✔️ @Aspect 프록시
스프링은 @Aspect 애노테이션으로 매우 편리하게 포인트 컷과 어드바이스로 구성되어있는 어드바이저 생성 기능 지원
참고
@Aspect 는 관점 지향 프로그래밍(AOP)을 가능하게 하는 AspectJ 프로젝트에서 제공하는 애노테이션이다.
@Slf4j
@Aspect
public class LogTraceAspect {
private final LogTrace logTrace;
public LogTraceAspect(LogTrace logTrace) {
this.logTrace = logTrace;
}
@Around("execution(* hello.proxy.app..*(..))") // 포인트 컷
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable { // 메서드 자체가 어드바이스
TraceStatus status = null;
try {
String message = joinPoint.getSignature().toShortString();
status = logTrace.begin(message);
// 로직 호출
Object result = joinPoint.proceed();
logTrace.end(status);
return result;
} catch (Exception e ) {
logTrace.exception(status, e);
throw e;
}
}
}
@Aspect : 애노테이션 기반 프록시를 적용할 때 필요
@Around(..) : 포인트컷 표현식 (AspectJ 표현식)을 넣는다. (포인트컷)
- 이 애노테이션이 붙으면 이 메서드는 어드바이스가 된다.
ProceedingJoinPoint joinPoint : MethodInvocation invocation 과 유사한 기능
jointPoint.proceed() : 실제 호출 대상(target) 호출
config로 의존관계 주입시 Aspect도 스프링 빈으로 등록해줘야한다. (아니면 @Componenet)
설명
자동 프록시 생성기는 Advisor를 자동으로 찾아와서 필요한 곳에 프록시를 생성하고 적용해준다.
자동 프록시 생성기는 추가로 @Aspect 를 찾아서 이것을 Advisor를 만들어 주는 역할을 한다.
그림만으로 이해가 잘 간다..
정리
지금까지 우리가 진행한 애플리케이션 전반에로그를 남기는 기능은 특정 기능 하나에 관심이 있는 기능이 아닌, 애플리케이션의 여러 기능들 사이에 걸쳐서 들어가는 관심사이다. 이를 횡단 관심사(cross-cutting concerns)라고 한다.
이를 기반으로 횡단 관심사를 전문으로 해결하는 스프링 AOP에 대해 본격적으로 학습한다.
🔖 학습내용 출처
'Back-End > Spring Advance & Boot' 카테고리의 다른 글
스프링 고급편 - 스프링 AOP 구현 (0) | 2024.10.31 |
---|---|
스프링 고급편 - 스프링 AOP 개념 (0) | 2024.10.04 |
스프링 고급편 - 빈 후처리기 (1) | 2024.09.27 |
스프링 고급편 - 스프링이 지원하는 프록시 (프록시 팩토리) (1) | 2024.09.25 |
스프링 고급편 - 동적 프록시 기술 (0) | 2024.09.24 |