AOP는 관점 지향 프로그래밍으로, 로직을 핵심적인 관점과 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하는 것을 의미합니다.
이 때, 핵심적인 관점의 경우 핵심 Business Logic이 되고 부가적인 기능의 경우 DB 연동, 로깅, I/O 등이 있을 수 있다.
AOP에서 각 관점을 기준으로 모듈화한다는 것은 일련의 코드들을 각 Aspect로 모듈화 하고 핵심 비즈니스 로직에서 분리하여 재사용하기 위함이다.
프록시 패턴 기반의 AOP 구현체, 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위함이다.
Spring Bean에만 AOP를 적용할 수 있으며
모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 애플리케이션에서 흔히 발생하는 문제들을 쉽게 해결할 수 있도록 지원한다.