앞에서 봤었던 AOP(Aspect Oriented Programming)의 핵심을 다음의 두 가지로 정리할 수 있습니다.

스프링 프레임워크는 앞에서 봤던 프록시 객체를 자동으로 생성하여 AOP를 구현하는 방식을 지원하고 있습니다.

mWuHeCwL7MPcWqfz-OR8i-1681651104206.png

스프링 AOP는 위의 그림과 같이 타깃 객체(Target Object)를 외부에서 프록시 객체가 한번 감싸는 구조를 가지고 있습니다. 마치, 이전의 챕터에서 GugudanProxy 클래스를 통해서 타깃 객체가 실행되는 것과 같은 구조입니다. 따라서, 설정에 따라 타깃 객체의 핵심 로직이 실행되기 전과 후에 공통 기능을 호출할 수 있습니다.

한 가지 차이는, 앞의 예제에서는 우리가 프록시 객체를 직접 생성해야 했지만, 스프링의 경우 해당 프록시 객체를 스프링이 자동적으로 생성해 주기 때문에 GugudanProxy 클래스와 같은 객체를 따로 만들 필요가 없다는 점입니다.

이제 스프링 AOP와 관련한 핵심 개념들을 코드 예제와 함께 알아보겠습니다.

wxacAKfIWan9i1mI1hdI6-1682656601698.png

먼저, AOP에서는 공통 관심 사항에 대한 기능을 **애스펙트(Aspect)**라고 부릅니다.

AOP에서 첫 번째 A에 해당하는 부분이기도 한데, 공통 기능과 적용 시점을 정의한 **어드바이스(Advice)**와 어드바이스가 적용될 지점을 정의하는 **포인트컷(Pointcut)**의 조합으로 구성됩니다. 트랜잭션이나 보안 등이 애스펙트의 대표적인 예시입니다.

그럼 이제 Aspect와 함께 알아두어야 할 핵심적인 개념들에 대해 살펴보겠습니다.

Untitled

Untitled

참고로, 스프링에서 구현 가능한 어드바이스의 종류는 몇 가지가 있는데, 아래와 같이 애너테이션을 사용하여 다양한 시점에 원하는 기능을 삽입할 수 있습니다.