기록공간

AOP(Aspect Oriented Programming) 본문

BackEnd/Spring

AOP(Aspect Oriented Programming)

입코딩 2020. 12. 21. 22:07
반응형
※ 공통의 관심 사항을 적용해서 발생하는 의존 관계의 복잡성과 코드 중복을 해소해 주는 프로그래밍 기법

AOP의 개념

주 업무를 실행할 때 보조적인 업무(주 업무 실행 시간 체크, 로그 기록 등)가 진행되어야 한다. 만약, 주 업무가 여러 개이고 동일한 보조 업무가 진행되어야 한다면, 보조 업무 부분은 중복된 코드가 될 수 밖에 없다. 이런 중복 요소를 제거하고, 보조 업무를 보다 독립적인 방법으로 실행할 수 있도록 구성하는 것을 AOP 기법이라고 한다.

 

AOP 관련 주요 용어

  • 보조 업무(cross-cutting concern) : 주 업무 실행 시 발생하는 보조적인 업무. 주 업무와 분리 및 결합이 쉽게 될 수 있도록 만들어야 한다.

  • 주 업무(core concern, primary concern) : 핵심적인 기능을 수행하는 부분. 사용자의 요청에 대한 기본적인 수행 및 결과 반환을 수행해야 한다.

  • Advice : 언제 어떤 공통 관심 기능(보조 업무)을 적용할지 결정하는 방법. 순서에 따라 세 가지로 나뉜다.

    • Before Advice : 보조 업무가 주 업무 실행 전에 수행되는 경우

    • After Advice : 보조 업무가 주 업무 실행 후에 수행되는 경우

    • Around Advice : 보조 업무가 주 업무 실행 전과 후에 수행되는 경우

  • Proxy : 주 업무를 실행하는 객체와 동일한 모양을 가진 가짜 객체. 사용자가 주 업무를 실행하는 객체를 찾아가는 것이 아닌, proxy를 찾아가도록 지정하게 된다. proxy 내부에서 보조 업무를 실행한 후, 주 업무를 호출하도록 하면 외부에서 볼 때, 주 업무를 실행하는 것과 같은 결과가 나오도록 할 수 있다. 

  • JoinPoint : proxy 내부에서 주 업무를 호출하는 경우에 특정 지점에만 호출되도록 할 수 있다.

  • Weaving : advice를 주 업무에 적용하는 과정을 부르는 명칭

  • Aspect : 여러 주 업무 객체에 공통적으로 적용되는 공통 관심 사항(보조 업무)을 aspect 라고 한다.
    (보조 업무 == cross-cutting concern == aspect == 공통 관심 사항 == 공통 업무)

 

AOP 진행 순서

사용자                          프록시                      보조업무                                      주업무
(client)                        (proxy)                    (cross-cutting concern)      (core concern)
 
○------------------------------------------------------------------------------->○
   
●----------①-------->●
                
                                       ●-------②------->●

                                       ●---------------------------③------------------------>●

                                       ●<-------------------------④--------------------------●

                                       ●--------⑤------>●

○<--------------------------------------------------------------------------------○

●<---------⑥---------●


반응형

'BackEnd > Spring' 카테고리의 다른 글

[Spring 에러] Log4j cannot be resolved to a type  (0) 2021.03.06
[Spring 에러] cvc-complex-type.2.3  (0) 2021.03.06
스프링의 특징과 의존성 주입  (0) 2021.02.16
DI(Dependency Injection)  (0) 2020.12.21
Spring Framework 이해  (0) 2020.12.21
Comments