Hello, Freakin world!

[Spring boot] AOP 용어 정리 본문

Spring boot

[Spring boot] AOP 용어 정리

johnna_endure 2020. 7. 16. 21:37
참조 : https://docs.spring.io/spring/docs/4.3.15.RELEASE/spring-framework-reference/html/aop.html#aop-introduction-defn

 

 

 

Aspect 

: 다수 클래스를 가로지르는 관심사를 모듈화한 것이다. 객체지향에서의 클래스와 같은 개념이다.

스프링에서 aspect는 두 가지 방식으로 구현된다.

- schema-based approach (xml을 기반으로 한 방식인듯? 하다)

- annotation approach  

 

Join Point

: 메서드가 실행되고 있는 동안의 시점을 의미한다.  AOP 프레임워크의 어느 특정 기능에 대한 용어가 아니다!

 예를 들어, 특정 메서드가 실행되기 전에서 끝나기 까지의 그런 시점들을 총징하는 용어다.

보통 메서드 실행 전과 후의 시점을 가리키는 듯.

 

Advice

: 어떤 Join Point(시점)에서 실행되는 Aspect에 정의된 행동.

여러 타입이 있다. around advice, before advice, after advice 등.

자세한 건 뒤에서 살펴보자.

 

PointCut

: 조인 포인트와 매치되는 Predicate.

여기서 잠깐! Predicate란? 쉽게 말하자면 boolean을 반환하는 조건이다.

용어가 헤깔리긴 하지만 결국은 boolean을 반환하는 조건을 통과하는 경우 Advice를 실행하는데,

쉽게 if문의 조건문의 역할을 한다고 생각해도 된다.

 

PointCut 개념은 AOP의 중추적인 개념이다. 스프링에서는 AspectJ 포인트컷 표현식을 기본으로 한다.(AspectJ는 라이브러리다.)

 

정리하자면 PointCut(조건)에 매치되는 Join Point(시점)를 찾고 그 Join Point에서 Advice(기능)를 실행한다. 로 정리할 수 있다. 

 

Introduction

: 이 개념은 객체의 interface 구현을 AOP를 이용해 대신하는 기능이다.

쉽게 말해서 직접 클래스에 인터페이스를 구현하는게 아니라 AOP를 이용해 타겟 클래스 소스를 건드리지 않고

인터페이스를 구현할 수 있다는 것이다.

더 구체적인 내용은 아직 더 학습이 필요하다.

 

Target Object

: 하나 이상의 Advice가 적용되는 객체. advised object 라고 불리기도 한다. 

스프링은 runtime proxy를 사용하기 때문에, 이 객체는 항상 proxy 객체다.

 

AOP Proxy

: Aspect 명세(Advice등 메타정보)를 실행하기 위해서 AOP 프레임워크에서 만든 객체.

참고) 스프링에서 AOP 프록시는 JDK dynamic proxy이거나 CGLIB 프록시다.

 

Weaving

Aspect를 target object에 연결하는 것.

이 작업은 컴파일 시점, 로드 시점, 런타임 시점에 실행될 수 있다.(AspectJ 컴파일러를 사용)

스프링 AOP 프레임워크와 다른 AOP 프레임워크에서 이 작업은 런타임에 실행된다.

 


Advice 의 타입

 

- Before advice : 조인 포인트 전에 실행되는 Advice. 예외를 던지는 것 이외에 실행 흐름에 영향을 끼칠 수 없다.

- After returning advice : 조인 포인트가 끝나고 실행되는 Advice

- After throwing advice : 메서드가 예외를 던지고 exit한 경우 실행되는 Advice

- After (finally) advice : 예외로 exit 하든 정상적으로 exit하든 메서드가 exit하면 실행되는 Advice

- Around Advice : 메서드 전, 후로 실행되는 Advice

 

 

 

 

 

 

 

 

 

 

 

Comments