본문 바로가기

Spring

Springframework AOP란?

AOP란?

Aspect Oriented Programing의 약자로 관점 지향 프로그래밍을 의미한다.

AOP와 관련된 용어들은 다음과 같다.

 

  • 조인포인트(JoinPoint)
    • 클라이언트가 호출한 모든 비즈니스 메소드를 조인포인트라고 하며, 포인트컷 대상 혹은 포인트 컷 후보라고 하는데 이는 조인포인트에서 포인트컷이 선택되기 때문이다.
  • 포인트컷(PointCut)
    • 필터링 된 조인포인트를 의미한다.
  • 어드바이스(Advice)
    • 어드바이스는 횡단관심에 해당하는 공통 기능의 코드를 의미하며, 독립된 클래스의 메소드로 작성된다. before, after, after-returning, after-throwing, around 등 다섯 가지의 구체적인 동작시점이 있다.
  • 위빙(Weaving)
    • 포인트컷으로 지정한 핵심 관심 메소드가 호출될 때, 어드바이스에 해당하는 횡단 관심 메소드가 삽입되는 과정을 의미한다.
  • 애스펙트(Aspect) 또는 어드바이저(Advisor)
    • 애스펙트는 포인트컷과 어드바이스의 결합으로써 어떤 포인트컷에 어떤 어드바이스를 실행할지 결정한다. 이 애스펙트 설정에 따라 AOP 동작방식이 결정되므로 가장 중요한 개념이라고 할 수 있다.

 

포인트컷 표현식

execution(* com.OA.wip.*Impl.get*(..))

* : 리턴타입
com.OA.wip : 패키지 경로
*Impl : 클래스명
get*(..) : 메소드명 및 매개변수

 

리턴타입

* 모든 리턴타입 허용
void 리턴타입이 void인 메소드
!void 리턴타입이 void가 아닌 메소드

 

패키지지정

com.springbook.biz 정확하게 com.springbook.biz 패키지만 선택
com.springbook.biz.. com.springbook.biz 패키지로 시작하는 모든 패키지 선택
com.springbook..impl com.springbook.biz 패키지로 시작하면서 패키지 이름이 Impl로 끝나는 패키지 선택

 

클래스 지정

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

 

메소드 지정

*(..) 모든 메소드 선택
get*(..) 메소드 이름이 get으로 시작하는 모든 메소드 선택

 

매개변수 지정

(..) 매개변수의 타입과 개수 제한이 없음
(*) 반드시 1개의 매개변수를 가지는 메소드만 선택
(com.springbook.user.UserVO) 매개변수로 UserVO를 가지는 메소드만 선택
(!com.springbook.user.UserVO) 매개변수로 UserVO를 가지지 않는 메소드만 선택
(Integer, ..) 1개 이상의 매개변수를 가지되, 첫 번째 매개변수의 타입이 Integer인 메소드만 선택
(Integer, *) 반드시 2개이상의 매개변수를 가지되, 첫 번째 매개변수의 타입이 Integer인 메소드만 선택

 

어드바이스 동작시점

Before 비즈니스 메소드 실행 전 동작
After - After Returning : 비즈니스 메소드가 성공적으로 리턴되면 동작
- After Throwing : 비즈니스 메소드 실행 중 예외가 발생하면 동작(try ~ catch 블록에서 catch에 해당)
- After : 비즈니스 메소드가 실행 후 반드시 실행(try ~ catch ~ finally 블록에서 finally에 해당)
Around Around는 비즈니스 메소드 호출을 가로채 호출 전후에 해당되는 로직을 작성할 수 있음

 

 

참조 

  • 스프링 퀵 스타트