Spring Boot AOP는
Aspect Oriented Programming(관점 지향 프로그래밍)을 Spring Boot 환경에서 구현한 기능입니다.
쉽게 말하면,
"여러 군데에서 반복적으로 쓰이는 기능을 공통으로 빼서 한 번에 적용하는 기술"
입니다
Spring Boot 프로젝트를 하다 보면, 여러 클래스/메서드에 반복되는 코드가 생깁니다.
예:
이걸 매번 복붙하면 유지보수가 힘들죠.
AOP를 쓰면 이 공통 로직을 한 곳에 정의하고 필요한 지점에 자동 삽입할 수 있습니다.
| 용어 | 설명 |
|---|---|
| Aspect | 공통 기능을 모아놓은 클래스 |
| Join Point | 공통 기능을 삽입할 수 있는 지점 (메서드 실행, 예외 발생 등) |
| Pointcut | 공통 기능을 실제로 적용할 지점(메서드 패턴, 어노테이션 기준) |
| Advice | 실제 실행되는 공통 기능 코드 (Before, After, Around 등) |
| Weaving | Pointcut 위치에 Advice를 삽입하는 과정 (Spring은 런타임 Weaving 사용) |
java
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoggingAspect {
// execution(리턴타입 패키지명.클래스명.메서드명(매개변수))
@Around("execution(* com.example.service.*.*(..))")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
try {
return joinPoint.proceed(); // 실제 메서드 실행
} finally {
long end = System.currentTimeMillis();
System.out.println(joinPoint.getSignature() + " 실행 시간: " + (end - start) + "ms");
}
}
}
설명
@Aspect : 이 클래스가 AOP를 담당함을 명시@Around : 메서드 실행 전/후를 감싸는 Adviceexecution(* com.example.service.*.*(..)) : service 패키지의 모든 메서드에 적용ProceedingJoinPoint.proceed() : 원래 메서드 실행@EnableAspectJAutoProxy로 AOP를 활성화 (스프링 부트는 기본 활성화)장점
단점