일단 Spring AOP를 알아보기 전에 AOP가 무엇인지를 알아보자.
AOP란 무엇일까?
소프트웨어 개발 패러다임 중 하나로, 프로그램의 핵심 기능과 공통 기능을 분리하여 코드의 모듈화와 재사용성을 높이고 유지보수를 효율적으로 할 수 있게 한다.
따라서, AOP는 밑에와 같은 상황에서 유용하게 사용된다.
- 로깅(Logging): 모든 메서드 호출에 로그를 남기는 기능
- 트랜잭션 관리(Transaction Management): 데이터베이스 트랜잭션 시작, 커밋, 롤백 등의 관리
- 보안(Security): 메서드 호출 전에 인증 및 권한 확인
- 에러 처리(Error Handling): 예외 처리 로직의 일관된 적용

애플리케이션을 보면 핵심적인 비즈니스 로직과 부가적인 기능이 존재한다. 이러한 부가적인 기능을 횡단 관심사(cross-cutting concerns)라고 한다.
비즈니스 로직과 코드를 분리시켜 간결성을 높이고, 재사용성을 높이는 것이 AOP의 목적이다.
AOP의 핵심 요소
AOP의 핵심 요소들을 알아보자.
-
Aspect
애스펙트는 어드바이스와 포인트컷을 합친 것으로, 횡단 관심사를 모듈화한 것이다.
-
Advice
어드바이스는 특정 시점에 실행될 코드를 정의한 것이다.
주로 메서드 호출 전후, 예외 발생 시 실행된다.
-
Join Point
조인 포인트는 어드바이스가 적용될 수 있는 실행 지점을 의미
주로 메서드 호출 시점이 이에 해당한다.
-
Point Cut
포인트컷은 특정 조인 포인트를 선택하는 표현식
어떤 조인 포인트에 어드바이스를 적용할지 정의한다.
Spring AOP

1. Aspect
- @Aspect 애노테이션은 Spring 빈(Bean) 클래스에만 적용 가능하다.
-- 컴포넌트 스캔을 통해 자동으로 감지되거나 명시적으로 빈으로 등록된 클래스를 포함한다.
2. Advice
- @Around: '핵심 기능' 수행 전과 후에 실행 (@Before + @After)
- @Before: '핵심 기능' 호출 전에 실행
- @After: '핵심 기능' 수행 성공 여부와 상관없이 항상 실행
- @AfterReturning: '핵심 기능' 호출이 성공할 때 실행
- @AfterThrowing: '핵심 기능' 호출이 실패할 때, 예외가 발생한 경우에만 실행
3. Join Point
- 조인 포인트는 애플리케이션 실행 흐름에서 AOP를 적용할 수 있는 특정 지점을 의미한다.
- 주로 메서드 호출, 객체 초기화, 예외 발생 등이 포함됨
- 스프링 AOP에서는 주로 메서드 실행 지점으로 제한되며, 이는 어드바이스가 적용될 수 있는 위치를 정의한다.
4. Point Cut
- 포인트컷은 조인 포인트를 선택하는 표현식으로, 어떤 조인 포인트에 어드바이스를 적용할지를 결정한다.
- @Pointcut: 포인트컷을 정의하는 어노테이션으로, 특정 메서드나 클래스에 어드바이스를 적용할 수 있는 조인 포인트를 선택한다.
- 포인트컷 표현식은 메서드의 시그니처(이름, 매개변수 타입 등)를 기준으로 하며, 다양한 키워드를 사용하여 정의한다.