AOP 6

Spring AOP

Aspect 공통적인 부가 기능인 횡단 관심사를 위해 만들어진 것이 바로 Aspect이다. Aspect는 관점이라는 뜻인데, 애플리케이션을 바라보는 관점을 각각의 기능에서 횡단 관심사 관점으로 본다는 의미이다. 이렇게 횡단 관심사를 처리하는 Aspect를 사용한 프로그래밍 방식이 AOP(Aspect Oriented Programming)!! 이는 객체 지향을 대체하는 것이 아닌 OOP만으로 처리하기 어려운 횡단 관심사를 보조하기 위한 목적을 가지고 있다. Spring이 제공하는 Advisor, Advice, Pointcut 또한 하나의 Aspect라고 볼 수 있다. AOP AOP의 가장 핵심 아이디어는 횡단 관심사를 분리하여 한 곳에서 관리하도록 하는 것이다. AOP 적용 방식 AOP에서 횡단 관심사를 ..

@Aspect AOP

Spring에 @Aspect 애노테이션을 사용하면 이것이 Advisor 생성 기능을 지원한다. @Aspect는 AspectJ에서 제공하는 애노테이션으로 스프링은 이를 사용해 AOP를 가능케한다. 코드로 살펴보자 @Aspect : 프록시를 적용하기 위한 애노테이션 @Around : Pointcut을 위한 애노테이션, 인자로 AspectJ표현식을 넣는다. @Around가 붙은 메서드가 바로 Advice이다.(여기서는 execute) ProceedingJoinPoint : MethodInvocation과 유사하다. 내부에 실제 호출 대상(target), 전달 인자, 어떤 객체와 어떤 메서드가 호출되었는지에 대한 정보가 포함되어 있다. proceed() : target 호출 이렇게 만들어진 프록시를 스프링 빈으..

빈 후처리기

빈 후처리기란?(BeanPostProcessor) @Bean이나 컴포넌트 스캔으로 스프링 빈을 등록하면 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 그 이후에는 등록된 빈을 조회하고 사용할 수 있게된다. 스프링이 빈 저장소에 등록할 목적으로 객체를 생성하는데(Singleton) 등록 직전에 조작하고 싶을 때 사용하는 것이 바로 빈 후처리기!! 즉, 빈을 생성한 후에 무언가를 처리하는 용도로 이해하자! 빈 후처리기 기능 객체를 조작 다른 객체로 바꿔치기 빈 후처리기 과정 생성 : 스프링 빈 대상이 되는 객체를 생성 전달 : 생성된 객체를 빈 후처리기에 전달 후 처리 작업 : 빈 후처리기가 스프링 빈 객체를 조작 등록 : 스프링 컨테이너의 내부 저장소에 빈 객체 등록 Bean..

Spring의 프록시 기술

JDK 동적 프록시는 인터페이스가 있는 경우에만 사용이 가능하고, CGLIB은 구현체에도 적용이 가능하다. 이 두가지를 일관성있게 사용할 수는 없을까? Spring은 동적 프록시를 통합하여 편리하게 만들어주는 ProxyFactory를 제공한다! ProxyFactory는 인터페이스가 있다면 JDK 동적 프록시를 사용하고, 구체 클래스만 있다면 CGLIB을 사용한다. 물론 이 기본설정을 변경할 수도 있다! ProxyFactory Proxy에 추가할 부가 기능을 적용하기위해 Advice를 만들어주면된다. 이 Advice는 JDK 동적프록시의 InvocationHandler, CGLIB의 MethodInterceptor가 호출한다. Advice는 프록시에 적용할 부가 기능 로직이다. InvocationHandl..

AOP 적용

공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 분리 1. 공통 로직 만들기 (시간 측정) @Aspect 애노테이션을 통해 AOP로 사용하겠다는 의미 @Around 애노테이션을 통해 타켓을 지정해 줄 수있는데 특정 클래스를 지정해줄 수 도 있다. 위에서는 hellospring패키지 안의 모든 클래스에 적용해주었다. joinPoint.proceed() : 다음 메소드 진행 joinPoint.toString()을 통하여 어떤 메소드를 call하는지 확인 2. AOP등록 스프링 빈으로 등록(@Bean) 컴포넌트 스캔(@Component) 스프링 빈에 등록해서 쓰는 것을 선호하는 경향임. 우리는 컴포넌트 스캔으로 진행 3. 실행 spring을 실행시키고 l..

AOP

AOP(Aspect Oriented Programming) - 관점 지향 프로그래밍 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을 흩어..

반응형