AOP(Aspect-oriented Programming)
-흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법
-OOP를 보완하는 수단
Crosscutting Concerns(흩어진 관심사)
*동일한 색은 동일한 concern에 해당함
*concern: 여러 클래스, 여러 메소드에 걸쳐서 나타나는 비슷한 코드들
ex) 트랜잭션, 로깅
-각각의 concern들에 코드의 변경이 일어나게 되면, 해당 concern을 이용한 모든 코드들을 수정하기 쉽지 않으므로 AOP를 이용합니다
AOP를 적용하여 흩어진 코드들을 한곳에 모음
-각각의 concern별로 해당 기능이 어디에 적용되어야 하는지 명시하고, Aspect를 독립적으로 모듈화함
AOP의 주요 개념
-Aspect: concern별로 모은 하나의 모듈입니다.
-Advice: Aspect를 구성하는 요소로, 해야할 일들에 대한 정보를 가지고 있습니다.
-Pointcut: Aspect를 구성하는 요소로, 어디에 적용해야 하는지에 대한 정보를 가지고 있습니다.
-Target: Advice들이 적용되는 대상 ex) 위 그림의 A, B, C
-Join point: 메소드 실행 시점, 생성자 호출 직전, 생성자를 호출했을 때, 필드에 접근하기 전, 필드에서 값을 가져갔을 때 등 끼어들 시점(합류 지점들)
AOP 구현체
-위키피디아 'implementations' 검색
-자바
·AspectJ: 다양한 join point와 다양한 기능들을 제공함
·스프링 AOP: 국한적으로 기능을 제공함
AOP 적용 방법
-컴파일: 자바 파일을 실행 파일로 만들 때 조작이 된 바이트 파일이 생성됨(AspectJ를 사용할 때)
-로드 타임: 클래스 파일을 로딩하는 시점에 로딩하는 클래스 정보를 변경함(AspectJ를 사용할 때)
-런타임: A라는 클래스 타입의 빈을 만들 때 A라는 빈을 감싼 '프록시 빈'을 만듦(스프링 AOP가 이용하는 방식)
*주로 런타임을 이용하지만, 다양한 join point를 이용하는 경우에는 AspectJ 컴파일러로 컴파일을 하거나 별도의 자바 로드 타임 위빙을 하는 방식으로 AspectJ와 연동하여 사용할 수 있습니다.
'Spring > 스프링 프레임워크 핵심 원리' 카테고리의 다른 글
[Spring] #20. 스프링 AOP: @AOP (0) | 2020.12.26 |
---|---|
[Spring] #19. 스프링 AOP: 프록시 기반 AOP (0) | 2020.12.26 |
[Spring] #17. SpEL(스프링 Expression Language) (0) | 2020.12.24 |
[Spring] #16. 데이터 바인딩 추상화: Converter와 Formatter (0) | 2020.12.24 |
[Spring] #15. 데이터 바인딩 추상화: PropertyEditor (0) | 2020.12.24 |