Spring Boot

[SPRING] AOP를 사용해보장

재원쓰 2023. 1. 1. 22:15

업무 로직을 포함하는 비즈니스 로직을 핵심 기능(Core Concerns)라고 부르고,

핵심 기능을 도와주는 부가적인 기능을 부가기능(Cross-cutting Concerns)이라고 부른다. 

 

AOP란?

로직을 짤 때 기능을 핵심기능과 부가기능으로 분리해서 관리한다면 더할 나위 없이 좋을 것이다. 이때 AOP는 핵심기능에서 부가기능을 애스팩트(Aspect)라는 모듈 형태로 만들어서 더 설계적으로 분리할 수 있게 도와준다.

 

애스펙트(Aspect)란?

Advice + PointCut = Aspect

애스펙트는 부가기능을 정의한 코드인 어드바이스(Advice)와 어드바이스를 어디에 적용하지를 결정하는 포인트컷(PointCut)을 합친 개념이다.

AOP 개념을 적용하면 핵심기능 코드 사이에서 부가기능을 독립적인 애스펙트로 뽑아서 관리할 수 있다. 그리고 관리되는 애스펙트를 런타임 시에 필요에 따라 핵심기능에 자유롭게 넣을 수 있다.

 

AOP 용어 정리

타겟(Target)

부가기능을 적용할 핵심기능 모듈이다.

 

어드바이스(Advice)

타겟에 적용시킬 부가기능 모듈이다.

 

조인포인트(Join Point)

어드바이스가 적용될 수 있는 위치를 말한다.

타겟 객체가 구현한 인터페이스의 모든 메서드는 조인 포인트가 된다.

 

포인트 컷(Pointcut)❓

어드바이스를 어디에 적용할지 결정하는 정규표현식이다.

포인트컷 표현식은 execution으로 시작하고 메서드의 Signature를 비교하는 방법을 주로 이용한다.

 

애스펙트(Aspect)

애스펙트는 AOP의 기본 모듈이다.

애스펙트 = 어드바이스 + 포인트컷

애스펙트는 싱글톤 형태의 객체로 존재한다.

 

어드바이저(Advisor)❓

- 어드바이저 = 어드바이스 + 포인트컷

- 어드바이저는 Spring AOP에서만 사용되는 특별한 용어이다.

 

위빙(Weaving)

위빙은 포인트컷에 의해서 결정된 타겟의 조인 포인트에 부가기능(어드바이스)를 적용하는 과정을 뜻한다.

위빙은 AOP가 핵심기능(타겟)의 코드에 영향을 주지 않으면서 필요한 부가기능(어드바이스)를 추가할 수 있도록

해주는 핵심적인 처리과정이다.

 

 

 

애노테이션 모음

@Aspect

@Around("execution(public * com.sparta.myselectshop2.controller..*(..))") 11:05

-> 해당 경로(포인트컷)에 위치한 API들에 부가기능을 적용시킬 것이라고 선언한다.

@Pointcut

-> 포인트컷 경로를 재사용할 수 있도록 변수화시킨다.