ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [15] Aspect Oriented Programming 의 개념
    Spring/Spring 핵심 기술 2020. 5. 2. 07:31
    반응형

    먼저 Aspect Oriented Programming관 관련된 용어를 정리하도록 하겠습니다.

    1. Aspect : aspect의 사전적 뜻은 "측면", "양상"입니다. programming code에서 동일한 양상의 code(crosscutting concerns)들을 한 곳에 모아 관리하는 것이 aspect 입니다.
    2. Target : aspect의 advice(code)를 적용할 대상입니다.
    3. Advice : concern들을 모아 aspect에서 관리하는 code입니다. aspect를 통해 target에서 수행됩니다.
    4. Join point : code의 흐름 중 aspect의 advice를 적용할 point 입니다. 생성자 호출 직전, 생성자 호출 시, field 접근 전 filed에서 값을 가져갔을 때 method 호출할 때 등과 같은 여러 가지 종류의 join point가 있습니다. 이 중에 method를 호출할 때의 join point를 point cut이라고 합니다.

     

     

    Crosscutting concerns 은 우리의 code 중에 산재해 있는 비슷한 성향의 code 들을 말합니다.

     

     

    Class with concerns

     

    위의 그림과 같이 concern이 산재해 있는 상태라고 할 때, concern에 변경이 필요하면 concern에 해당하는 모든 부분을 각각 변경해야 하고 테스트해야 하는 어려움이 따릅니다.

     

     

    AOP(Aspect Oriented Programming)는 다음과 같이 code 중에 산재해있는 crosscutting concern들을 aspect로 module화 하여 관리합니다. aspect는 concern에 해당하는 code 정보와 그 code를 다른 code의 흐름 중 삽입해줄 시점에 대한 정보를 가지고 있습니다. 

     

    Separate concerns with class by Aspect

     

     

    AOP를 사용하면 code의 양과 관리 point를 줄여 유지보수를 용이하게 할 수 있습니다. 또한 객체마다 공통으로 가지는 concern들을 따로 빼서 관리하기 때문에 기능(책임)의 추가에 따른 객체들의 역할 구분이 불명확해지는 것을 미연에 방지할 수 있습니다. (AOP는 Object Oriented Programming을 돕는 역할을 합니다.)

     

    AOP를 적용할 수 있는 실제 예로 taransaction과 logging 기능을 들 수 있습니다. transaction의 경우 insert, update, delete 처리가 필요할 경우 autocommit을 false로 설정하고 query 실행 후 commit 또는 rollback 하는 일련의 공통된 과정들을 concern으로 보고 이를 aspect로 관리할 수 있습니다. method의 성능을 파악하기 위해 실행 시간을 측정하여 기록하는 logging 기능 같은 경우도 method 마다 가지고 있는 concern으로 역시 aspect로 관리할 수 있습니다.

     

     

    언어별로 여러 가지 AOP 구현체가 제공되고 있습니다. Java는 AspectJ와 Spring AOP가 있습니다.

     

     

    [AOP는 적용 시점에 따른 구분]

    1. Compile time 적용 : Java file을 class file로 compile 할 때 byte code들을 조작하여 AOP를 적용합니다.
    2. Class Load time 적용 : class를 loading 할 때 aspect의 advice를 target에 끼워 넣어 AOP를 적용합니다. (AspectJ)
    3. Run time 적용 : 특정 bean에 aspect의 adivce를 적용해야 하는 것을 Spring이 알고 있어서 그 bean을 생성할 때 advice가 적용된 동일한 type의 proxy bean(bean type을 감싼 동일한 bean type)으로 생성하여 AOP를 적용합니다. (AspectJ, Spring AOP)

    댓글

Designed by Tistory.