Spring AOP는 핵심 비즈니스 로직과 여러 기능에서 공통으로 사용되는 부가 기능을 분리하는 기술입니다.

AOP는 관점 지향 프로그래밍을 의미하며, 로깅, 트랜잭션, 권한 검사처럼 여러 메서드에 반복되는 횡단 관심사를 별도의 Aspect로 모듈화합니다. 이후 특정 조건을 만족하는 메서드의 실행 전후나 예외 발생 시점에 해당 기능을 적용합니다.

Spring AOP는 프록시 기반으로 동작합니다. Spring Bean을 대상으로 프록시 객체를 생성하고, 외부에서 메서드를 호출하면 프록시가 요청을 가로채 부가 기능을 수행한 뒤 실제 객체의 메서드를 호출합니다. 대표적인 예가 @Transactional입니다.

주로 다음과 같은 상황에서 사용합니다.

  • 여러 서비스에 반복되는 로깅이나 실행 시간 측정
  • 트랜잭션 처리
  • 권한 검사 및 감사 로그
  • 예외 처리나 모니터링과 같은 공통 기능

다만 AOP는 비즈니스 로직 자체를 분리하는 용도보다는, 여러 계층이나 기능에 공통으로 적용되는 부가 기능을 분리할 때 사용하는 것이 적절합니다.

Filter는 서블릿 컨테이너 영역에서 HTTP 요청과 응답을 대상으로 동작
Interceptor는 Spring MVC 영역에서 컨트롤러 호출 전후에 동작
AOP는 Spring Bean의 메서드 실행을 대상으로 동작