AOP(Aspect Oriented Programming)란 관점지향 프로그래밍으로, 핵심 기능들을 분리하여 구현하는 OOP(Object Oriented Programming)에
핵심 기능들에 부가적으로 필요한 로깅, 예외처리, 데이터 검증과 같이 반복되는 부가기능을 따로 분리하여 핵심 기능에 더욱 집중할 수 있고,
부가 기능은 따로 관리하여 반복을 줄이고, 유지보수를 더 편하게 할 수 있도록 관심 분리를 한 것입니다. 이러한 부가기능을 횡단 관심이라고도 합니다.
참조 : http://closer27.github.io/backend/2017/08/03/spring-aop/
이러한 AOP를 구현하기 위해서는 JoinPoint, PointCut, Advice, Aspect 라는 개념이 추가됩니다.
클라이언트가 호출하는 모든 비즈니스 메소드, 모든 메소드를 조인포인트로 생각하면 됩니다.
횡단 관심을 넣을 시점, Joint를 하기 위한 지점이라고 생각하면 됩니다.
포인트컷은 필터링된 조인포인트를 의미합니다. JointPoint 중에 부가적인 처리를 하고 싶은 부분을 필터링하는 역할을 합니다.
포인트컷 지시자를 이용하여 처리를 하고자하는 메소드, 패키지 등을 설정합니다.
Adivce는 Aspect의 구현체로 JoinPoint에 삽입되어 동작하는 코드입니다.
이는 횡단 관심에 해당하는 공통 기능의 코드를 의미합니다.
Aspect는 구현하고자 하는 횡단 관심, 부가 기능을 의미하는 것으로,
한 개 이상의 PointCut(언제 어디서)과 Advice(무엇을)의 조합으로 만들어집니다.