AOP(Aspect Oriented Programming)

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 를 적용하겠다는 의미다.