Aspect Oriented Programming(AOP - 관심 지향 프로그래밍
Application의 핵심 업무 로직에서 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것
Application을 보는 관점을 '하나하나의 기능'에서 '공통 관심사' 관점으로 보는 것
OOP만 단독적으로 설계를 하게 된다면, 여러 군데에서 공통적으로 쓰이는 부가 기능의
중복 코드가 발생한다. 만약 부가 기능에 변경점이 생긴다면 사용된 모든 곳에 대한 수정 작업을
해야 하는데 이런 경우 유지보수가 힘들어지는 단점이 있다.
AOP는 이를 보완하기 위한 개념으로, OOP의 불필요한 반복을 해결하기 위한 방법이다.
지속적으로 공부하면서 업데이트 예정
[TBC] AOP 관련 포스팅 | |||
Advice | Pointcut 표현식 / 지시자 | Join Point | Annotation (AspectJ) |
- 공통 관심 사항(Cross-cutting concern / 횡단 관심사 / 부가 기능)
- Application 전반에 걸쳐 공통적으로 사용하는 기능
- 핵심 관심 사항에 반대되는 개념으로, 부가적인 관심 사항이라고 표현하기도 한다.
- 단독 사용 X, 핵심 관심 사항과 같이 사용 (핵심 관심 기능 + 부가기능 = 하나의 객체로)
- Application 전반에 걸쳐 공통적으로 사용하는 기능
- 핵심 관심 사항(Core concern)
- Application의 주목적(비즈니스 로직)을 달성하기 위한 핵심 로직
- Application의 주목적(비즈니스 로직)을 달성하기 위한 핵심 로직
AOP의 필요성
- 코드를 간결하게 유지할 수 있다.
- OOP적 설계 원칙에 맞는 코드를 구현할 수 있다.
- 중복된 코드를 공통화하여 코드를 재 사용할 수 있다.
개념적 결론
AOP(관계 지향 프로그래밍)을 사용하면 application상에 전반적으로 사용되는 공통적인 기능들
(트랜잭션, 로깅, 보안 트레이싱 모니터링) 등을 핵심 관심 사항(비즈니스 로직)으로부터 분리하여
재사용 가능한 모듈로 사용 가능하다.
AOP 용어 및 개념
Core Technologies
In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly where the autowired bean definitions are declared is still somewhat ambiguous. For example, as a developer looking at ServiceConfig, how do
docs.spring.io
Aspect
- 여러 객체(objects)에 공통적으로 적용되는 기능 (공통 기능)
- Advice + Pointcut을 모듈화 하여 Application에 포함되는 Cross-cutting (횡단 기능)
- 여러 Advice와 Pointcut이 함께 존재한다.
Join Point
Application의 진행 흐름에서의 특정 포인트를 의미하며
메서드의 실행, 객체의 인스턴스화, 클래스 초기화, 필드 접근, 예외 처리 같은 것들이 포인트가 된다.
다만 스프링의 AOP에서는 프록시 방식을 사용하기 때문에
1. Join point를 메서드 실행 지점 (a method execution)으로 한정한다
2. 스프링 컨테이너가 관리할 수 있는 스프링 Bean에만 AOP를 적용할 수 있다.
Cross-Cutting Concern(횡단 관심)은 AOP에 의해 Join point 전/후에 자동으로 추가된다.
어드바이스 적용이 필요한 부분은 Application안에 메서드를 갖는다.
Advice
Join Point에서 실행되는 코드
Aspect를 언제 핵심 코드에 적용할지 정의한다.
- 부가 기능(Cross-Cutting Concern)에 해당한다
- 시스템 전체 aspect에 API 호출 제공
- 각 상세 정보와 모든 메서드를 로그로 남기기 때문에
메서드 시작 전의 포인트를 선택한다.
Pointcut
Join Point 중에서 Advice가 적용될 위치를 설정하는 기능 (실행 시기 제어)
- AspectJ 표현식을 사용해서 지정
- 스프링의 AOP는 메서드 실행 지점만 Pointcut으로 설정 가능
Weaving
PointCut으로 설정한 타겟의 Join Point에 Advice를 적용하는 것 (weaving 뜻 자체)
Advice를 핵심 코드(Core Concern)에 적용.
- 핵심 기능 코드에 영향을 주지 않으면서 부가 기능을 추가
- AOP 적용을 위해 Aspect 객체에 연결한 상태
다음의 단계에서 weaving 가능:- 컴파일 타임(AspectJ compiler)
- 로드 타임
- 런타임
- Spring AOP에서는 runtime에 weaving 시행
AOP proxy
- AOP기능 구현을 위해 만든 프록시 개체
- 스프링에서 AOP 프록시는 [ JDK dynamic proxy ] or [ CGLIB proxy ]이다.
Target
- 핵심 기능을 담고 있는 모듈로 부가기능을 부여할 대상이다.
- Advice를 받는 객체이고 Pointcut으로 결정된다.
Advisor
- 하나의 advisor와 하나의 pointcut으로 구성
- 스프링 AOP에서만 사용되는 용어이다.
'programming > SPRING' 카테고리의 다른 글
핸들러 메서드의 응답 데이터 순서 변경 (0) | 2022.06.23 |
---|---|
gradle reload는 중요해 (0) | 2022.06.22 |
AOP - Annotation (AspectJ) (0) | 2022.06.20 |
AOP - Join Point (0) | 2022.06.20 |
AOP - Pointcut 표현식 / 지시자 (0) | 2022.06.20 |