core concern : 핵심 기능 - 비즈니스 컴포넌트 -
가로 의 흐름
모든 기능이 Cross-Cutting Concern이 필요
corss-cutting concern : 응용프로그램 전반에 걸쳐서 공통적으로 필요한 기능
세로의 지점
비즈니스 로직에 속하지 않은 시스템 서비스
비즈니스 컴포넌트들과 복잡한 의존 관계 형성
ex) 트랜잭션,로깅,보안,인증 등
#Aspects(=cross-cutting concern)
- 여러 객체에서 공통으로 적용되는 공통관심 사항 (공통적인 기능)
- 부수적인 기능
- advice와 PointCut 모임
- 트랜잭션,로깅,보안,인증 등
#Advice
- 사용해야하는 Aspect가 무엇인고 언제 사용할건지 정의하는 것
- what, when (어떤, 언제) aspects를 핵심 로직에 사용할 것인지 정의
- 메소스 수행 전 후, 예외발생 전 후 등
#Target(핵심 기능 : core concern)
- advice를 사용하는 객체 ( 중요 핵심 객체)
- 비즈니스 로직을 구현하는 객체
#Weaving(삽입)
- advice(aspect가 정의된) 기능이 Target Object 실행하는 과정에서 Target Object의 필요한 위치에 입력(삽입)되는것
- 컴파일시에, 클래스 로딩시에, 런타임 시에 등
#JoinPoint
- Target Method의 어느 지점으로 weaving 할 것인지 정의
- aspect 가 적용될 수 있는 지점
- 이곳에 JoinPoint 하면 이곳에 와서 Weaving 하라고 하는것
- 메소드 호출 때, 예외 발생시, 필드 변경할 때 지점 등
#Pointcut
- weaving하는 지점에 패턴을 정해 놓은것
- advice는 aspect의 언제, 무엇(어떤)을 정의 하며 pointcut은 어디(위치)를 정의하는 것
- pre로 시작하는 메소드가 호출이 되면 메소드가 호출이 되는 pointcut 지점으로 weaving 하는 거야 라고 패턴을 지정
#Advisor
- advice + pointcut
- advice의 메소드가 target의 어느 지점으로 weaving 되는 정보를 가지고 있는것
#Proxy
- Target 객체에 advice가 적용된 후 생성된 객체
- target object 랑 Proxy Object가 같아야 한다.
Spring에서의 AOP
- Proxy Pattern을 통해서 AOP 구현
- 런타임시에 AOP가 적용된 것을 런타임 위빙(weaving)이라고 한다.
런타임시에 프록시 객체를 생성하는 방식으로는 JDK Dynamic Proxy 와 CGLIB (Code Generator Library) 방식이 있음
Spring AOP는 기본적으로 CGLIB 방식을 통해 프록시 객체를 생성해 런타임 위빙(Weaving)을 구현
- JDK Dynamic Proxy
Java Reflection API의 Proxy 클래스를 통해 프록시 객체를 생성하는 방식으로 타겟 객체가 아닌 타겟 객체를 추상화한
인터페이스의 구현을 통해 프록시 객체를 생성
Spring AOP가 적용되는 Bean의 프록시 객체가 JDK Dynamic Proxy를 통해 생성되는 경우에 타겟 객체는 받드시 인터페이스를
구현한 클래스이어야함 한다는 단점이 있음
- CGLib (Code Generator Library)
CGLib (Code Generator Library)는 바이트 코드를 조작하여 프록시 객체를 생성해 주는 라이브러리
JDK Dynamic Proxy와 달리 CGLIB는 타겟 객체를 상속 받아 프록시 객체를 생성하므로 인터페이스를 강제적으로 구현하지 않아도 된다는 장점
리플렉션이 아닌 상속을 통해서 프록시 패턴을 구현하기 때문에 JDK Dynamic Proxy보다 성능적으로 우수
참조 ; [Spring] Aspect Oriented Programming(AOP) — 그저 코딩을 박박 (tistory.com)
Factory Method Pattern(팩토리 메소트 패턴) (0) | 2023.04.10 |
---|---|
SOLID 원칙 (0) | 2023.04.04 |
쿠버네티스와 컨테이너, 도커에 대한 기본 개념 (0) | 2022.09.15 |
쿠버네티스[10] 권장 레이블 20220913 (0) | 2022.09.13 |
쿠버네티스 [9] 필드셀렉터 20220912 (1) | 2022.09.12 |
댓글 영역