AOP(Aspect Oriented Programming)란, 관점 지향 프로그래밍 정도로 해석할 수 있다. 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠서 보고 그 관점을 기준으로 각각 모듈화 하는 것이다. 객체 지향 프로그래밍은 애플리케이션을 설계할 때 클래스가 단일 책임을 갖도록 분리하여 각 모듈의 결합도가 낮아지게 한다. 하지만, 여러 클래스에 로깅이나 보안 및 트랜잭션 등의 공통된 기능들이 흩어져 존재할 수 있다는 한계가 있다. 따라서 AOP가 필요한 것이다. 다시 말해, AOP는 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것이라고 생각하면 된다. 애플리케이션을 개발하다보면 공통적으로 사용되는 기능들이 있기 마련인데, 이러한 공통 ..