공부/Spring

AOP

kkkkkdddddhhhhh 2024. 1. 14. 17:17

핵심 기능과 부가 기능의 분리

AOP(Aspect-Orientd Programming) :
애플리케이션을 바라보는 관점을 하나하나의 관점에서 횡단 관심사 관점으로 달리보는것.

*횡단관심사: 애플리케이션 전반에 걸쳐 핵심 관심에 영향을주는 영역

 

내가 원하는 핵심기능에 부가기능을 적용 할 수 있다.

AOP의 대표적인 구현으로 AspectJ Framework가 존재한다. 

Spring에서는 AspectJ의 문법을 차용하고, AspectJ의 제공하는 기능의 일부만을 제공한다.

 

횡단 관심사의 모듈화

  • 오류 검사 및 처리
  • 동기화
  • 캐싱
  • 모니터링 및 로깅

AOP 적용방식

  1. 컴파일 시점 적용
    • .java 소스를 AspectJ컴파일러를 사용해 .class를 만드는 시점에 부가기능 로직을 추가 할 수 있다.
    • 원본 로직에 부가 기능 로직이 추가되는것을 위빙이라한다.
    • 복잡해서 잘 사용되지 않는다고한다.
  2. 클래스 로딩 시점 적용
    • Java는 .class 를 JVM 내부 클래스 로더에 보관한다. 이 때 중간에서 .class 파일을 조작해 부가 기능을 추가한다.
    • loadTime weaving 또한 복잡해 잘 사용되지 않는다.
  3. 런타임 시점 ( Proxy ) 적용
    • 컴파일, 클래스 로딩도 모두 끝난 시점에서 프록시를 이용해 부가 기능을 추가하는 방식
    • Proxy 객체를 만들어야하는 단점이 존재하지만 Spring을 통해 구현이 간편한다.

 

AOP 적용 위치

적용 가능 지점 ( Join point ) :

  • Proxy 를 이용해 적용하는 경우 메서드 실행 시점에만 적용이 가능하다
  • Spring은 컨테이너가 관리할 수있는 Spring Bean에만 AOP가 적용 가능하다.

 

용어 정리

  • JoinPoint : 
    • AOP를 적용 할 수 있는 모든 지점.
    • 추상적인 개념
    • Spring에서의 Joinpoint는 메서드 실행시점으로 제한된다.
  • PointCut:
    • Advice가 적용될 위치를 선별하는 기능
    • AspectJ 표현식을 이용해 지정
  • Target:
    • 부가 기능을을 적용받는 핵심 기능 객체
  • Advice:
    • 부가 기능
  • Aspect:
    • Advice + PointCut을 모듈화 한것.
    • 여러개의 Advisor를 가질 수 있다.
  • Advisor:
    • 하나의 Advice와 하나의 PointCut으로 이뤄진것.
  • AOP Proxy:
    • Spring에서 Target이 Interface 기반일 경우 JDK Proxy , Class 기반일 경우 CGLIB Proxy를 적용한다.

'공부 > Spring' 카테고리의 다른 글

빈 후처리기  (0) 2024.01.13
포인트컷, 어드바이스, 어드바이저  (0) 2024.01.12
CGLIB  (0) 2024.01.11