Aspect : cross-curring concern(=횡단 관심사)을 캡슐화 한 것을 말한다. 여기서 횡단 관심사란 여러 서비스 로직에서 실행되어야 하는 (공통)로직을 말한다. 예를 들어 인즈&인가, 로깅, 트랜잭션 처리 등이 있다.
cf) 관심사 : 일반적인 로직이나 기능을 뜻함.
Spring AOP 특징 : 프록시 디자인 패턴을 사용한다. 여기서 프록시 디자인 패턴이란 아래 사진과 같이 인터페이스 구현 객체 대신 프록시 객체를 사용하여 구현 객체의 기능을 그대로 사용하면서 부가적인 작업을 추가할 수 있다.
@Service
@RequiredArgsConstructor
public class TestServiceProxy implements TestService {
private TestService testService; // TestServiceImpl 객체 할당됨
@Override
public int test() {
// 1. 메소드 호출 전의 부가 기능 처리
this.testService.test() // 구현 메소드 호출
// 3. 메소드 호출 후의 부가 기능 처리
}
}
AOP 장점 : 코드 재사용성을 촉진하고, 변경하기 쉽다. 또한 기능을 구현할 때 비즈니스 로직과 관련이 없는 것을 AOP 단일 클래스에 적으면 되므로 비즈니스 로직 코딩이 더 깔끔해진다.
AOP 단점 : 애플리케이션 흐름을 따라가기 힘들어진다. 또한 AOP에서 런타임 위빙을 사용할 경우 약간의 비용이 발생한다. 따라서 최대한 필요에 의해서만 사용하도록 하고 남발하지 말자.
AOP 용어 정리
- Advice : 어떤 작업을 수행할지에 대한 것이다. 실질적인 부가 기능을 담은 구현체를 뜻한다.
- JointPoint : Advice가 적용될 시점을 의미한다.
- Target : Advice를 적용할 메소드, 클래스를 말한다.
- PointCut : Advice를 적용할 타겟을 선별하는 정규 표현식이다.
- Weaving : Pointcut에 의해서 결정된 타겟의 Join Point에 Advice를 삽입하는 과정을 뜻한다. 컴파일 타임 위빙, 로드 타임 위빙, 런타임 위빙이 있다. 빠른 순이다.
- Spring AOP는 프록시 패턴을 이용한 런타임 위빙만을 사용한다. 따라서 메인 어플리케이션은 프록시 객체와 통신하여 실제 메소드를 호출한다.
- AspectJ는 모든 위빙을 제공한다.
Spring AOP 장,단점
- 장점 : 프록시 패턴을 사용하며, @Aspect 어노테이션을 통해 쉽게 AOP 기능을 사용할 수 있다.
- 단점 : 메서드가 호출될 때 그 때에만 Advice를 적용할 수 있다. 즉, 메서드 수준의 타겟만 지원하기에 빈으로 생성된 것만 에스펙트를 지원할 수 있다. 또한 런타임 위빙을 사용하므로 성능이 좀 떨어진다.
AspectJ 장,단점
- 장점 : 모든 조인 포인트를 지원한다. AspectJ는 스프링 애플리케이션 컨텍스트에서 생성된 빈뿐만 아니라 모든 POJO에서도 작동한다. 또한 컴파일 타임 위빙도 되기에 성능이 좋다.
- 단점 : 사용 방법이 매우 복잡하다.
'Spring Boot > AOP' 카테고리의 다른 글
Spring Boot AOP @Around (0) | 2024.07.31 |
---|---|
Spring Boot AOP 실습3 @AfterThrowing, @After (0) | 2024.07.31 |
Spring Boot AOP 실습3 JoinPoint, @AfterReturning (0) | 2024.07.30 |
Spring Boot AOP 실습2 - @Order (0) | 2024.07.30 |
Spring Boot AOP 실습1 - @Before, Pointcut (0) | 2024.07.30 |