Spring/스프링 프레임워크 핵심 원리

[Spring] #18. 스프링 AOP: 개념 소개

sujin7837 2020. 12. 24. 20:47
반응형

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와 연동하여 사용할 수 있습니다.

반응형