개발자가 되고 싶은 개발자

[Spring] AOP 용어 및 예제 본문

Dev/Java & Spring

[Spring] AOP 용어 및 예제

Fullth 2020. 3. 18. 21:00

안녕하세요, 지난 포스팅에서 AOP의 개념에 대해서 알아보았습니다. 

 

[SPRING] AOP 개념

안녕하세요, 스프링의 주요 개념인 AOP에 대해서 알아보도록 하겠습니다. " AOP란?? " Aspect Oriented Progrmming. 관점 지향 프로그래밍. 관점? 관점이 의미하는 바는 무엇일까요?? 우선, 사전의 뜻을 찾아보도..

fullth.tistory.com

이번 포스팅에서는 AOP의 용어를 알아보고 예제를 통해 확인해보도록 하겠습니다. 

(예제는 아직 작성중입니다.)

아직 AOP가 익숙치 않기 때문에, 여러 포스팅을 참고하였습니다.

 


1. AOP란 무엇인지 다시 복습해봅시다.

Aspect Oriented Programming의 약자. 직역하면 관점 지향 프로그래밍 입니다.

 

위키백과에 정의되어 있는 뜻은 아래와 같습니다.

횡단 관심사 (cross-cutting concern)의 분리를 허용함으로써, 모듈성을 증가시키는 것이 목적인
프로그래밍 패러다임이다.

반복되는 로깅이나 보안, 트랜잭션 등의 부가기능(횡단 관심사)들을 모듈로 분리하여

공통 코드로 관리하는 것이 목적입니다.

 

아래 순서대로 AOP의 용어들을 알아보도록 하겠습니다.

  • 타겟(Target)
  • 어드바이스(Advice)
  • 조인포인트(Joinpoint)
  • 포인트컷(Pointcut)
  • 어드바이스저(Advisor)
  • 위빙(Weaving)

 

 

 

 


3. 타겟

Target: '대상을 뜻하는 명사.'

AOP에서는 Aspect를 적용하는 곳을 의미합니다.

즉, 분리한 관심사를 적용하는 대상을 의미합니다.

 

Aspect는 핵심 로직에서 반복되는 부가 기능들을 모듈화 한 것이라고 하였습니다. 

그렇다면, 핵심 로직에서 떼어내서 Aspect로 분리했다면, Aspect를 다시 핵심 로직에 적용시켜야겠죠??

 

네, 타겟(Target)은 주요 관심사를 의미합니다.

 

 

 

 

 


4. 어드바이스

실질적인 부가 기능을 담은 구현체를 의미합니다.

쉽게 말해서 부가 기능, 횡단 관심사 입니다.

 

Advice를 통해서 핵심 로직안에서의 부가 기능이 언제 동작할지 결정합니다.

다음은 Advice의 어노테이션들입니다.

@Before : 타겟 객체의 메소드 호출 전에 공통 기능을 실행.
@After : 타겟 객체의 메소드가 호출 된 후에 공통 기능을 실행.
(단순히 메소드가 완료 되면 실행. 메소드의 성공과, 예외와 관계가 없음. )
@After-returning : 타겟 객체의 메소드가 정상적으로 반환된 이후에 공통 기능을 실행.
@After-throwing : 타겟 객체 메소드의 예외 발생 이후 공통 기능을 실행.
@Around : 타겟 객체 메소드의 호출 전과 후에 공통 기능을 실행.

 

 

 

 

 

 


5. 조인포인트

위에서 설명한 Advice가 적용될 지점을 말합니다.

Advice가 앞에 생략되어 있다고 봐도 괜찮을 것 같습니다.

 

아직 설명하지 않은 위빙이란 개념이 있습니다. 조인포인트는 어느 지점으로 위빙할 것인지를 정합니다.



 

 

 

 


6. 포인트 컷

포인트 컷은 부가적인 설정을 거친 조인포인트라고 생각할 수 있습니다.

구체적인 실행 지점을 설정할 수 있습니다.

 

 

 

 

 


7. 어드바이저

4번에서 설명했던 어드바이스와 포인트 컷을 같이 일컫는 말입니다.

둘을 합하면 부가 기능과 그 부가 기능에 관한 명세를 합한 것이라고 볼 수 있습니다.

그렇다면 이것이 바로 저희가 모듈로서 분리하고자 했던, 관점. Aspect라고 볼 수 있습니다.

 

Advisor은 AOP개념의 Aspect를 뜻하는 SpringAOP에서만 사용되는 용어입니다.

 

 

 

 

 

 


8. 위빙

부가 기능인 Advice가 핵심 로직에 적용되는 것을 Weaving이라고 합니다.

위에서 설명했던 기능들을, Weaving(엮기)을 통해서 적용하는 것입니다.

 

 

 

 

 

 

 

잘못된 부분은 알려주시면 수정하도록 하겠습니다. 감사합니다.

 

[출처]

http://closer27.github.io/backend/2017/08/03/spring-aop/

https://devbox.tistory.com/entry/spring-AOP-%EC%9A%A9%EC%96%B4-%EC%84%A4%EB%AA%85

https://blog.naver.com/chatdehiver/221380971939

https://engkimbs.tistory.com/7

'Dev > Java & Spring' 카테고리의 다른 글

[Spring] IoC, DI  (0) 2020.03.24
[Spring] 전자정부 프레임워크 공통 컴포넌트 db설정  (0) 2020.03.24
[SpringBoot] DB 연결  (0) 2020.03.06
[Spring] AOP 개념  (0) 2020.03.03
[Spring] Maven Ojdbc6 에러  (0) 2020.02.21