Spring의 특징 중 하나인 AOP가 무엇인지 알아보도록 하자
Aspect Oriented Programming, 관점 지향 프로그래밍이다.
어떤 로직이 있을 때 이 로직을 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하는 것이다.
공통관점기능
은 전체 시스템에서 사용하는 로그처리, 트랜잭션, 인증 등을 말하고 핵심관점기능
은 일반적인 비즈니스 로직을 말한다. 핵심관점기능은 OOP(객체 지향 프로그래밍)으로 쉽게 분리할 수 있지만 공통관점기능은 OOP로는 분리하기 힘들다 아래 그림을 보면 이해가 될 것이다.
AOP를 사용하지 않고 공통적으로 처리해야하는 파란색 영역의 코드를 수정해야 한다면 Class A, B, C에서 해당 코드를 모두 수정해야 한다.
이런 번거로움을 줄이고자 공통적으로 처리해야하는 로그처리나 트랜잭션처리를 따로 모듈화해서 사용하는 것이 AOP이다.
Advice
- 실제 적용하는 기능(트랜잭션, 로그, 인증) 즉, 어떤 일을 해야하는지 + 언제 기능을 실행 시킬 것인지
JoinPoint
- Advice가 삽입되어 동작
하는 위치(메소드 실행, 예외처리, 변수 값 변경)
PointCut
- JoinPoint 중 실행하려는 위치를 결정
Target
- Advice를 적용할 대상 클래스 객체
Aspect
- 여러 객체에 공통적으로 사용되는 관심사를 모듈화 한 것 즉, Advice를 합쳐놓은 것 (트랜잭션 관리 기능)
Weaving
- Advice를 비즈니스 로직 코드에 삽입하는 것