1. AOP란?
응집도와 관련된 기능
부가적인 공통 코드들을 효율적으로 관리
관심 분리
횡단관심(Crosscutting Concerns) : AOP에서 메소드마다 공통으로 등장하는 로깅이나 예외, 트랜잭션 처리 같은 코드들을 말함.
핵심관심(Core Concerns) : 사용자의 요청에 따라 실제로 수행되는 핵심 비즈니스 로직.
OOP의 한계를 극복
** OOP는 "Object-Oriented Programming"의 약자로, 횡단 관심에 해당하는 공통코드를 완벽하게 독립적인 모듈로 분리해내기가 어렵다는 단점이 있다.
OOP는 모듈화가 뛰어난 언어이지만, 공통모듈에 해당하는 Advice 클래스 객체를 생성하고 공통 메소드를 호출하는 코드가 비즈니스 메소드에 있다면 핵심관심과 횡단관심을 완벽하게 분리할 수 없다.
-> AOP는 이런 OOP의 한계를 극복한다.
2. AOP 용어 정리
조인포인트(Joinpoint)
클라이언트가 호출하는 모든 비즈니스 메소드
ex) BoardServiceImpl이나 UserServiceImpl 등의 모든 메서드
조인포인트는 다음에 설명할 ‘포인트컷 대상’ 또는 ‘포인트컷 후보‘ 라고도 함
조인포인트 중에서 포인트컷이 선택됨.
포인트컷(Pointcut)
필터링 된 조인포인트
수많은 비즈니스 메소드 중, 원하는 특정 메소드에서만 횡단 관심에 해당하는 공통 기능을 수행시키기 위한 것.
- 첫번째 포인트 컷은 리턴타입과 매개변수를 무시하고 com.mirim.biz 패키지로 시작하는 클래스 중에서 이름이 Impl로 끝나는 클래스의 모든 메소드를 포인트 컷으로 설정한다.
- 두번째는 get으로 시작하는 메소드만 포인트컷으로 설정한다.
사용자는 시스템을 사용하면서 자연스럽게 비즈니스 컴포넌트의 여러 조인 포인트(①)를 호출
이때 특정 포인트컷(②)으로 지정한 메소드가 호출되는 순간, 어드바이스(③)객체의 어드바이스 메소드가 실행
이 어드바이스 메소드의 동작 시점을 5가지로 지정할 수 있으며,
포인트 컷으로 지정한 메소드가 호출될 때, 어드바이스 메소드를 삽입하도록 하는 설정을 애스팩트(④)라고 한다.
이 애스팩트 설정에 따라 위빙(⑤)이 처리된다.