- AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다.
- 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.
*모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다.
핵심적인 관점은 비즈니스 로직이 될 수 있다
부가적인 관점은 핵심 로직을 실행하기 위해 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등이 될 수 있다.
[Spring] AOP가 뭔디?
Pointcut
: Join Point의 상세한 스펙을 정의한 것. "A란 메서드의 진입 시점에 호출할 것"처럼 구체적으로 Advice가 실행될 시점을 정함.
Advice
: 실질적으로 어떤 일을 해야 할 지에 대한 것, 실질적인 부가기능을 담은 구현체
JoinPoint
: Advice가 적용될 위치 혹은 끼어들 수 있는 시점.
스프링에서 Join Point는 언제나 메서드 실행 시점을 의미 한다.
Aspect
: 여러 개의 Advice와 여러 개의 Pointcut의 결합체를 의미
Advisor
: Aspect를 적용하는 곳. 클래스, 메서드 등..
AspectJ는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공
@Pointcut("execution( hello.aop.order..(..))")
그중에서, Spring AOP에서 사용되는 조인 포인트는 항상 메소드 호출을 의미합니다. 따라서 사용할 수 있는 포인트 컷의 표현 식으론 메소드 패턴을 지원하는 표현 식만을 사용할 수 있습니다.
스프링 AOP는 프록시 방식을 사용하여 조인포인트가 항상 메서드의 실행 지점으로 제한된다.