Framework/SpringBoot

[ 1 ] AOP 는 무엇인가?

foxy_wany 2021. 4. 22. 12:14

AOP ( Aspect Oriented Programming ): 관점 지향 프로그래밍이다. 

관점... 뭔가 어렵다. 

개인적으로 이해하기 쉽게 얘기한다면, 바라보는 시점 또는 관심사를 시작으로 한 프로그래밍 이란 의미이다.

 

예를 한번 들어보자. 

A 프로그램은 1 ~ 100까지 더하는 프로그램이다.

B 프로그램은 101 ~ 199까지 더하는 프로그램,

C는 200 ~ 299까지 더하는 총 3개의 프로그램이 있다고 생각해보자.

 

그런데 개발자는 위 A, B, C 프로그램이 수행하는 도중 덧셈 결과가 3의 배수일 경우는

중간 결괏값을 출력하고 싶다. 

 

관점을 추가해보자. 위 A, B, C 프로그램 내  '3의 배수일 경우 중간 결괏값 출력' 관점을 적용시키고 싶다. 

주 목표는 A, B, C 프로그램의 결과값을 얻는 것이고, 관점( 덧셈 결과가 3의 배수일 경우 중간 결과값 출력 )

은 주 목표에 영향을 끼치지 않은 상태에서 원하는 중간값을 얻는 것이다. 

 

아래 그림에서 주황색 화살표(Module)를 A, B, C이라고 치면, 

중간에 Cross cutting concern 은 중간 출력 값 처리 부분이다. 

 

( AOP 횡단 처리 )

Spring AOP 의 구현 방식은 Proxy 를 이용하여 구현된다. 

즉, 외부에서 AOP 에 선언된 객체를 호출하게 되면, 객체를 감싸고 있는 Proxy를 통해서 호출되는 방식이다. 

 Caller --> Proxy (AOP) --> 지정된 객체

1. Caller 가 Proxy 에 요청해서 횡단 관심사(AOP) 기능을 수행

2. Proxy 가 지정된 객체로 가서 객체의 기능을 실행

3. Proxy 설정에 따라 다시 Proxy 로 돌아와서 기능을 실행

 

 

[ AOP 용어 설명 ]

Aspect AOP의 추상적 명칭. ( 말그대로 관점 )
Advice Proxy 내 실제로 기능을 구현한 객체
Join Point Advice를 적용할 위치를 의미

예를 들어 특정 Package 내 ...Proc로 끝나는 클래스의 모든 메소드에
Advice를 적용한다면, ....Proc로 끝나는 클래스의 모든 메소느는 Join Point 가 된다
Pointcut Join Point를 선별 또는 기능을 정의한 모듈의 의미
또한 서비스 성격에 따라 어떤 Join point를 사용할지 결정
Target 실제 비지니스 로직을 수행하는 객체. Advice를 적용할 대상을 의미
Proxy  어드바이스가 적용되었을 떄 생성되는 객체

 

[ AOP 종류 (Spring 표기 기반) ]

@Before Target 메소드 실행 전 Advice 실행
@After Target 메소드 실행 시 Exception 이 발생해도 Advice 실행
@AfterReturning Target 메소드 정상 실행 후 Advice 실행
@AfterThrowing Target 메소드 실행 중 Exception 발생 시 Advice 실행
@Around Target 메소드 실행 전/후 또는 Exception 발생 시 Advice 실행

위 내용을 간단한 예시로 정리해보자


@Before( pointcut )
public void beforeAopTest( JoinPoint jp )
{
    .... Advice ....
}

 

 

다음에는 pointcut 선언 방법과 간단한 예제 글을 올리도록 하겠습니다.