ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링퀵스타트 AOP용어 및 기본설정
    Spring/Spring Quick Start 2019. 5. 23. 06:29

    |AOP 용어정리

    1. 조인포인트(Joinpoint)

     조인 포인트는 클라이언트가 호출하는 모든 비즈니스 메소드로서, BoardServiceImpl이나 UserServiceImpl 클래스의 모든 메소드를 조인포인트라고 생각하면된다. 

     

    조인포인트를 2에서 설명할 '포인트컷 대상' 또는 '포인트컷후보'라고도 하는데, 이는 조인포인트 중에서 포인트컷이 선택되기 때문이다.

     

    2. 포인트컷(Pointcut)

    클라이언트가 호출하는 모든 비즈니스 메소드가 조인포인트라면, 포인트컷은 필터링된 조인포인트를 의미한다.

    예를 들어, 트랜잭션을 처리하는 공통 기능을 만들었다고 가정하자. 이 횡단 관심 기능은 등록, 수정, 삭제 기능의 비즈니스 메소드에 대해서는 당연히 동작해야 하지만, 검색 기능의 메소드에 대해서는 트랜잭션과 무관하므로 동작할 필요가 없다. 

     

    이렇게 수 많은 비즈니스 메소드 중에서 우리가 원하는 특정 메소드에서만 횡단 관심에 해당하는 공통 기능을 수행시키기 위해서 포인트컷이 필요하다. 포인트컷을 이용하면 메소드가 포함된 클래스와 패키지는 물론이고 메소드 시그니처까지 정확하게 지정할 수 있다. 

     

    포인트컷은 <aop:pointcut>엘리먼트로 선언하며, id 속성으로 포인트컷을 식별하기 위한 유일한 문자열을 선언한다.

    이 아이디가 나중에 포인트컷을 참조할 때 사용된다.

    중요한 것은 expression 속성인데, 이 값을 어떻게 설저앟느냐에 따라 필터링 되는 메소드가 달라진다. 

     

    3. 어드바이스(Advice)

    어드바이스는 횡단 관심에 해당하는 공통 기능의 코드를 의미한다. 독립된 클래스의 메소드로 작성된다. 그리고 어드바이스로 구현된 메소드가 언제 동작할지 스프링 설정 파일을 통해서 지정할 수 있다.

     

    스프링에서 어드바이스 동작 시점을 다섯 가지로 구분한다.

    1) before

    2) after

    3) after-returning

    4) after-throwing

    5) around

     

    4. 위빙(Weaving)

    위빙은 포인트컷으로 지정한 핵심 관심 메소드가 호출될 때, 어드바이스에 해당하는 횡단 관심 메소드가 삽입되는 과정을 의미한다. 이 위빙을 통해서 비즈니스 메소드를 수정하지 않고도 횡단 관심에 해당하는 기능을 추가하거나 변경할 수 있다. 

     

    위빙을 처리하는 방식은 크게 컴파일타임(Compiletime) 위빙, 로딩타임(Loadingtime) 위빙, 런타임(Runtime) 위빙이 있지만, 스프링에서는 런타임 위빙 방식만 지원한다.

     

     

    5. 애스펙트(Aspect) or 어드바이저(Advisor)

    Aspect Oriented Programming이라는 이름에서 알 수 있듯이 AOP의 핵심은 바로 애스펙트이다. 애스펙트는 포인트컷과 어드바이스의 결합으로써, 어떤 포인트컷 메소드에 대해서 어떤 어드바이스 메소드를 실행할지 결정한다. 이 애스펙트 설정에 따라 AOP의 동작 방식이 결정되므로 AOP 용어 중 가장 중요한 개념이라 할 수 있다.

     

     

    어드바이저 엘리먼트는 포인트컷과 어드바이스를 결합한다는 점에서 애스펙트와 같은 기능을 한다. 

    하지만, 트랜잭션 설정같은 몇몇 특수한 경우는 애스펙트가 아닌 어드바이저를 사용해야한다.

    그러나 만약 어드바이스 객체의 아이디를 모르거나 메소드 이름을 확인할 수 없을 때는 애스팩트를 설정할 수 없다.

     

     

    포인트컷 표현식

    1)리턴타입 지정

    리턴타입 지정에서 가장 기본적인 방법은 '*'캐릭터를 이용한다.

    표현식 설명
    * 모든 리턴타입 허용
    void 리턴타입이 void인 메소드 선택
    !void 리턴타입이 void가 아닌 메소드 선택

     

    2)패키지 지정

    패키지 경로를 지정할 때는 '*', '..'캐릭터를 이용한다.

    표현식 설명
    com.springbook.biz 정확하게 com.springbook.biz 패키지만 선택
    com.springbook.biz.. com.springbook.biz 패키지로 시작하는 모든 패키지 선택
    com.springbook..impl com.springbook 패키지로 시작하면서 마지막 패키지 이름이 impl로 끝나는 패키지 선택

     

     

    3)클래스 지정

    클래스 이름을 지정할 때는 '*', '+' 캐릭터를 지정한다.

    표현식 설명
    BoardServiceImpl 정확하게 BoardServiceImpl만 선택
    *Impl 클래스 이름이 Impl로 끝나는 클래스만 선택
    BoardService+ 클래스 뒤에 '+'가 붙으면 해당 클래스로부터 파생된 모든 자식 클래스 선택, 인터페이스 뒤에 '+'가 붙으면 해당 인터페이스를 구현한 모든 클래스 선택

     

    4)메소드 지정

    메소드를 지정할 때는 주로 '*'캐릭터를 사용하고 매개변수를 지정할 때는 '..'을 사용한다.

    표현식 설명
    *(..) 가장 기본 설정으로 모든 메소드 선택
    get*(..) 메소드 이름이 get으로 시작하는 모든 메소드 선택

     

     

    5)매개변수 지정

    매개변수를 지정할 때는 '..', '*' 캐릭터를 지정하거나 정확한 타입을 지정한다.

    표현식 설명
    (..) 가장 기본 설저으로서 '..'은 매개변수의 개수와 타입에 제약이 없음을 의미
    (*) 반드시 1개의 매개변수를 가지는 메소드만 선택
    (com.springbook.user.UserVO) 매개변수로 UserVO를 가지는 메소드만 선택, 이 때 클래스의 패키지 경로가 반드시 포함되어야함
    (com.springbook.user.UserVO!) 매개 변수로 UserVO를 가지지 않는 메소드만 선택
    (Integer, ..) 한 개 이상의 매개변수를 가지되, 첫 번째 매개변수의 타입이 inte-gaer인 메소드만 선택
    (Integer, *) 반드시 두 개의 매개변수를 기지되, 첫 번째 매개 변수의 타입이 Integer인 메소드 선택

    댓글

© 2018 T-Story. All right reserved.