You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
스프링 애플리케이션에 프록시에 적용하려면 포인트 컷과 어드바이스로 구성되어 있는 어드바이저”Advisor”를 만들어서 스프링 빈으로 등록하면 된다. 그러면 나머지는 앞서 배운 자동 프록시 생성기가 모두 자동으로 처리해준다. 자동 프록시 생성기는 스프링 빈으로 등록된 어드바이저들을 찾고 스프링 빈들에 자동으로 프록시를 적용해준다.( 물론 포인트ㅡ컷이 매칭되는 경우에 프록시를 생성한다.)
스프링은 @Ascpect 애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다.
지금까지 어드바이저를 직접 만들었던 부분을 @Aspect 애노테이션을 사용해서 만들어보자.
참고 : @aspect은 관점 지향 프로그래밍(AOP)을 가능하게 하는 AspectJ프로젝트에서 제공하는 애노테이션이다. 스프링은 이것을 차용해서 프록시를 통한 AOP를 가능하게 한다. AOP와 AspectJ관련된 자세한 내용은 다음에 설명한다. 지금은 프록시에 초점을 맞추자. 우선 애노테이션을 사용해서 스프링이 편리하게 프록시를 만들어준다고 생각하면 된다.
앞서 자동 프록시 생성기를 학습할 때, 자동 프록시 생성기(AnnotationAwareAspectJAutoProxyCreator
)는 Advisor를 자동으로 찾아와서 필요한 곳에 프록시를 생성하고 적용해준다고 했다. 자동 프록시 생성기는 여기에 추가로 하나의 역할을 더하는데 바로 @Aspect를 찾아서 이것을 Advisor로 만들어준다. 쉽게 이야기해서 지금까지 학습한 기능을 더해 @Aspect를 Advisor 로 변환해서 저장하는 기능도 한다. 그래서 이름 앞에 AnnotationAware(애노테이션을 인식하는)가 붙어 있는 것이다
모든 @aspect 빈 조회: 자동 프록시 생성기는 스프링 컨테이너에서 @aspect 애노테이션이 붙은 스프링 빈을 모두 조회한다.
어드바이저 생성: `Aspect 어드바이저 빌더를 통해 @aspect 애노테이션이 붙은 스프링 빈
애노테이션 정보를 기반으로 어드바이저를 생성한다.
@aspect 기반 어드바이저 저장: 생성한 어드바이저를 @Aspect어드바이저 빌더 내부에 저장한다.
@aspect 어드바이저 빌더 BeanFactoryAspectJAdvisorsBuilder클래스이다. @Aspect의 정보를 기반으로 포인트컷, 어드바이스, 어드바이저를 생성하고 보관하는 것을 담당한다. @Aspect의 정보를 기반으로 어드바이저를 만들고, @aspect 어드바이저 빌더 내부 저장소에 캐시한다. 캐시에 어드바이저가 이미 만들어져 있는 경우 캐시에 저장된 어드바이저를 반환한다.
2. 어드바이저를 기반으로 프록시 생성
자동 프록시 생성기의 작동 과정을 살펴보겠습니다.
생성: 스프링 빈 대상이 되는 객체를 생성합니다(@Bean, 컴포넌트 스캔 모두 포함).
전달: 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달합니다.
3-1. Advisor 빈 조회: 스프링 컨테이너에서 Advisor 빈을 모두 조회합니다.
3-2. @aspect Advisor 조회: @Aspect 어드바이저 빌더 내부에 저장된 Advisor를 모두 조회합니다.
프록시 적용 대상 체크: 앞서 3-1, 3-2에서 조회한 Advisor에 포함되어 있는 포인트컷을 사용해서 해당 객체가 프록시를 적용할 대상인지 판단합니다. 이때 객체의 클래스 정보와 모든 메서드를 포인트컷과 매칭합니다. 메서드 하나라도 포인트컷 조건을 만족하면 프록시 적용 대상이 됩니다.
프록시 생성: 프록시 적용 대상이면 프록시를 생성하고 반환하여 스프링 빈으로 등록합니다. 적용 대상이 아니면 원본 객체를 반환하여 스프링 빈으로 등록합니다.
빈 등록: 반환된 객체를 스프링 빈으로 등록합니다.
정리
@aspect 를 사용해서 애노테이션 기반 프록시를 매우 편리하게 적용해보았다. 실무에서 프록시를 적용할 때는 대부분 이 방식을 사용한다.
지금까지 우리가 구현한 애플리케이션 전반의 로깅 기능은 특정 기능에만 국한된 것이 아니라, 애플리케이션의 여러 기능들을 관통하는 관심사이다. 이러한 특성을 가진 것을 '횡단 관심사(cross-cutting concerns)'라고 한다. 우리가 지금까지 적용한 방법은 이러한 횡단 관심사의 문제를 해결하기 위한 것이었다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
@aspect 프록시 적용
스프링 애플리케이션에 프록시에 적용하려면 포인트 컷과 어드바이스로 구성되어 있는 어드바이저”Advisor”를 만들어서 스프링 빈으로 등록하면 된다. 그러면 나머지는 앞서 배운 자동 프록시 생성기가 모두 자동으로 처리해준다. 자동 프록시 생성기는 스프링 빈으로 등록된 어드바이저들을 찾고 스프링 빈들에 자동으로 프록시를 적용해준다.( 물론 포인트ㅡ컷이 매칭되는 경우에 프록시를 생성한다.)
스프링은
@Ascpect애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다.지금까지 어드바이저를 직접 만들었던 부분을
@Aspect애노테이션을 사용해서 만들어보자.LogTraceAspect
@aspect 프록시 - 설명
앞서 자동 프록시 생성기를 학습할 때, 자동 프록시 생성기(AnnotationAwareAspectJAutoProxyCreator
)는 Advisor를 자동으로 찾아와서 필요한 곳에 프록시를 생성하고 적용해준다고 했다. 자동 프록시 생성기는 여기에 추가로 하나의 역할을 더하는데 바로
@Aspect를 찾아서 이것을Advisor로 만들어준다. 쉽게 이야기해서 지금까지 학습한 기능을 더해@Aspect를Advisor로 변환해서 저장하는 기능도 한다. 그래서 이름 앞에AnnotationAware(애노테이션을 인식하는)가 붙어 있는 것이다자동 프록시 생성기는 2가지 일을 한다.
@Aspect를 보고 어드바이저(Advisor)로 변환해서 저장한다.1. @aspect를 어드바이저로 변환해서 저장하는 과정
@aspect를 어드바이저로 변환해서 저장하는 과정을 알아보자
애노테이션 정보를 기반으로 어드바이저를 생성한다.
@Aspect어드바이저 빌더 내부에 저장한다.@aspect 어드바이저 빌더
BeanFactoryAspectJAdvisorsBuilder클래스이다.@Aspect의 정보를 기반으로 포인트컷, 어드바이스, 어드바이저를 생성하고 보관하는 것을 담당한다.@Aspect의 정보를 기반으로 어드바이저를 만들고, @aspect 어드바이저 빌더 내부 저장소에 캐시한다. 캐시에 어드바이저가 이미 만들어져 있는 경우 캐시에 저장된 어드바이저를 반환한다.2. 어드바이저를 기반으로 프록시 생성
자동 프록시 생성기의 작동 과정을 살펴보겠습니다.
@Bean, 컴포넌트 스캔 모두 포함).3-1. Advisor 빈 조회: 스프링 컨테이너에서
Advisor빈을 모두 조회합니다.3-2. @aspect Advisor 조회:
@Aspect어드바이저 빌더 내부에 저장된Advisor를 모두 조회합니다.Advisor에 포함되어 있는 포인트컷을 사용해서 해당 객체가 프록시를 적용할 대상인지 판단합니다. 이때 객체의 클래스 정보와 모든 메서드를 포인트컷과 매칭합니다. 메서드 하나라도 포인트컷 조건을 만족하면 프록시 적용 대상이 됩니다.정리
@aspect 를 사용해서 애노테이션 기반 프록시를 매우 편리하게 적용해보았다. 실무에서 프록시를 적용할 때는 대부분 이 방식을 사용한다.
지금까지 우리가 구현한 애플리케이션 전반의 로깅 기능은 특정 기능에만 국한된 것이 아니라, 애플리케이션의 여러 기능들을 관통하는 관심사이다. 이러한 특성을 가진 것을 '횡단 관심사(cross-cutting concerns)'라고 한다. 우리가 지금까지 적용한 방법은 이러한 횡단 관심사의 문제를 해결하기 위한 것이었다.
All reactions