핵심 기능과 부가 기능의 분리
AOP(Aspect-Orientd Programming) :
애플리케이션을 바라보는 관점을 하나하나의 관점에서 횡단 관심사 관점으로 달리보는것.
*횡단관심사: 애플리케이션 전반에 걸쳐 핵심 관심에 영향을주는 영역
내가 원하는 핵심기능에 부가기능을 적용 할 수 있다.
AOP의 대표적인 구현으로 AspectJ Framework가 존재한다.
Spring에서는 AspectJ의 문법을 차용하고, AspectJ의 제공하는 기능의 일부만을 제공한다.
횡단 관심사의 모듈화
- 오류 검사 및 처리
- 동기화
- 캐싱
- 모니터링 및 로깅
AOP 적용방식
- 컴파일 시점 적용
- .java 소스를 AspectJ컴파일러를 사용해 .class를 만드는 시점에 부가기능 로직을 추가 할 수 있다.
- 원본 로직에 부가 기능 로직이 추가되는것을 위빙이라한다.
- 복잡해서 잘 사용되지 않는다고한다.
- 클래스 로딩 시점 적용
- Java는 .class 를 JVM 내부 클래스 로더에 보관한다. 이 때 중간에서 .class 파일을 조작해 부가 기능을 추가한다.
- loadTime weaving 또한 복잡해 잘 사용되지 않는다.
- 런타임 시점 ( 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 |