상세 컨텐츠

본문 제목

Aspect : AOP의 공통기능 20221103

command

by MustThanks 2022. 11. 3. 14:06

본문

반응형

AOP(Aspect Oriented Programming)의 약자로 여러 객체에 공통으로 적용할 수 있는 기능을 구분 하여 재사용성을 높여주는 기능제공

  Aspect : AOP의 공통기능  

  Aspect     : 트랜잭션 관리처럼 여러 type, Object들이 공통적으로 갖는 관심
                 Spring AOP에서는 특정 Interface를 구현하거나 @Aspect annotation을 붙여서 사용가능

  Joint Point : 특정 Method를 실행하거나 Exception을 처리할 때 처럼 프로그램이 실행되고 있는 어느 한 시점
                  String AOP에서는 Method 실행 시점을 의미

  Advice     :  특정 Joint Point나 Aspect에 행할 행동을 의미 
                  around, before,after 등의 종류가 존재
                  Spring AOP를 포함해서 많은 AOP 프레임워크들은 advice를 Interceptor 로 간주 하며 
                  Join Point Around의 Interceptor 체인을 관리

  Pointcut   : Join points의 한 종류 
                 advice는 pointcut에 일치하는 Join point에 실행됨
                  - 특정 이름의 메소드 실행
                 Spring AOP는 AspectJ의 pointcut 표현방식을 기본으로 함

  Introduction : 이익에 따라 추가적인 method나 field를 정의하는 것
                    Spring AOP는 advised object에 새로운 interface와 그 구현체를 introduce하도록 허가함

  Target Object : 하나 또는 그 이상의 Aspect에 의해 advised되는 객체
                      advised object라고도 함
                      Spring AOP에서는 언제나 runtime proxies를 사용하므로 proxied object라고도 할 수 있음
 
  AOP proxy : aspect contracts를 구현하기 위해 AOP 프레임워크에 의해서 만들어진 Object 
                  Spring Framework에서 JDK dunamic proxy 또는 CGLIB proxy를 사용

  Weaving : aspects와 어플리케이션의 object 또는 type들을 연결하여 advised object들을 만들어내는 과정
               compile time , load time , runtime 모두에 실행될 수 있음
               다른 순수 자바 AOP프레임워크들과 마찬가지로 Spring AOP도 runtime에 weaving을 수행

  advice 종류
  - Before advice : join point가 실행되기 이전 시점에 실행되는 advice
                       Exception을 던지지 않는 이상 join point의 실행 막을 수는 없음

  - After returning advice : join point가 완료되고 리턴한 다음에 실행되는 advice

  - After throwing advice : join point가 Exception을 던지며 종료된 다음에 실행되는 advice

  - After (finally) advice : join point가 정상적으로 종료된 여부에 관계 없이 항상 실행되는 advice

  - Around advice : method 호출처럼 join point를 둘러싸는 advice
                         join point를 실행할 것인가 아니면 자체적인 값을 리턴하거나 Exception을 던져서 생략할 것인가 결정할 수도 있음


  AOP 종류

    Spring AOP

          스프링에서 AOP를 사용할 때 기본적으로 사용하는 방식
          
          JDK dynamic proxy 
            기본적으로 사용되는 Proxy interface로 정의된 클래스에만 사용가능

          CGLIB proxy interface 없이 바로 작성된 concrete class도 proxy도 만들 수 있음
            설정에 따라 CDLIB만 사용하도록 강제할 수 있음

    Full AspectJ

       AspectJ compiler 또는 weaver를 사용해서 AOP기능을 사용하는 방식
       JVM에 javaagent  ..../aspectjweaver.jar 옵션을 설정
       field 와 method 모두 advice를 설정하는 것이 가능하여 find-grained object를 이용하는데 유리
       Spring에서는 spring-aspects.jar 라이브러리를 제공

관련글 더보기

댓글 영역