2023. 12. 8. 22:10ㆍ카테고리 없음
흩어진 관심사를 Aspect 로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP 의 취지다.
스프링 AOP 특징
프록시 패턴 기반의 AOP 구현체, 프록세 객체를 쓰는 이유는 접근 제어와 부가 기능을 추가하기 위해서다.
스프링 빈에만 AOP 를 적용할 수 있다.
모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC 와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제인 중복 코드와 프록시 클래스 작성의 번거로움, 객체 간 관계 복잡도 증가 등에 대한 해결책을 지원하는 것이 목적이다.
AOP 주요 개념
Aspect 는 흩어진 관심사를 모듈화한 것이다. 주로 부가 기능을 모듈화한다.
Target 은 클래스나 메서드처럼 Aspect 를 적용하는 곳이다.
Advice 는 실질적인 부가 기능을 담은 구현체다.
JointPoint 는 아직 잘 모르겠다. Advice 가 적용될 위치 같은 것...?
PointCut 은 JointPoint 의 상세한 스펙을 정의한 것이다. 특정 메서드의 진입 시점에 호출하는 것과 같이 더 구체적으로 Advice 가 실행될 지점을 정할 수 있다.
@Aspect : 이 클래스가 Aspect 를 나타내는 클래스라는 것을 명시한다.
@Component : 스프링 빈으로 등록한다.
@Around : 타겟 메서드를 감싸서 특정 Advice 를 실행한다는 의미다.
@Around("execution(* com.kkamjjing..*.CommentService.*(..))")
com.kkamjjing 아래 피키지 경로의 CommentService 객체의 모든 메서드에 이 Aspect 를 적용하겠다는 의미다.