- AOP
- OOP를 더욱 보완, 확장하여 OOP를 OOP 답게 사용할 수 있도록 도움
- AOP 도입 전까지는 객체의 재사용에도 불구하고 필수적으로 반복되는 코드 중복은 여전
- AOP의 가장 기초 개념은 ‘관심의 분리’
- 기능을 비즈니스 로직과 공통 모듈로 구분한 후 개발자의 코드 밖에서 필요한 시점에 비즈니스 로직에 삽입하여 실행
- 핵심 관점(비즈니스 로직) + 횡단 관점(트랜잭션, 로그, 권한 체크 등)

- 계좌이체, 입출금, 이자계산이라는 로직을 처리할 때, 모두 똑같이 로깅, 보안, 트랜잭션을 처리해줘야 함
- 하지만, AOP 에서는 로깅, 보안, 트랜잭션이라는 공통 관심을 따로 빼내어 계좌이체, 입출금, 이자계산이라는 핵심 관심에 횡단으로 삽입
- 각 객체별로 처리했던 것을 각 관점별로 외부에서 접근하는 것이 핵심
- 개발자는 계좌이체, 입출금, 이자계산과 같은 핵심 기능을 만들고, 공통적인 관심 기능(로깅, 보안, 트랜잭션)을 처리하는 모듈을 분리해서 개발한 후, 필요한 시점에 자동으로 공통적인 관심 기능이 삽입되도록 하는 것
- 용어 정리
- Aspect: 오브젝트와 같은 개념으로 Advice와 PointCut을 담고 있음
- Advice: 실제 부가기능 구현 부분. 무엇을 언제 할지 정의
- PointCut: JointPoint에서 정한 위치를 선정하는 방법으로 구체적으로 지정
- JointPoint: Advice가 적용될 수 있는 위치
- Proxy: 프록시 패턴으로 스프링 AOP 동작. 빈 요청 시 프록시 빈이 호출되어 부가기능 처리 후 전달
- 참조