티스토리 뷰

Spring

스프링 AOP - 2

엔꾸꾸 2019. 5. 12. 22:22

 

Spring - AOP 2

용어

  • AOP에서 사용하는 용어들이 존재한다. 이를 하나씩 살펴보자

  • Aspect

    • 관점, 측면
  • Advisor
    • 조언자, 고문
  • Advice
    • 조언, 충고
  • JoinPoint
    • 결합점
  • Pointcut
    • 자르는 지점

Pointcut ?

  • pointcut은 직역하면 자르는 지점, AOP에서는 Aspect적용 위치지정자 라고도한다.

아래의 예제소스를 살펴보자.

@Aspect
class MyAspect {

 @Before("execution(* doSomething())")
 public void before(JoinPoint joinPoint) {
 ...
 }
}
  • 위의 코드에서 “execution(* doSomething())” 이 바로 Pointcut이다.
  • @Before가 의미하는것은 * doSomething() 메서드가 실행되기 ‘이전’ 에 실행하라는 의미이다.
  • 즉 public void before 메서드는 횡단 관심사를 실행하는 메서드가 된다.
  • 정리하면 ..

    • pointcut은 횡단 관심사를 적용할 타겟 메서드를 선택하는 지시자 라고 할수있다.
  • 타깃 메서드 지정자에는 정규식과 AspectJ 표현식 등을 사용할 수 있다.
    [접근제어자] 리턴타입 [패키지&클래스] 메서드명(파라미터) [예외]

여기서 대괄호 [] 는 생략이 가능한 부분이다.
표현식에서 필수 요소는 리턴타입 , 메서드명 , 파라미터 이다.
앞서 소스코드에서 사용했던 패턴을 기반으로 한번 살펴보자

[집근제어자] * doSomething() [예외]
  • 접근제어자와 예외는 생략되었고 , 리턴타입과 메서드명 , 그리고 파라미터까지 정의된 모습을 볼 수 있다.

표현식은 무수히 많으므로 API 문서 등을 참고

JoinPoint

  • Pointcut은 JoinPoint의 부분집합이다.
  • 스프링 AOP는 인터페이스를 기반이다.
  • 인터페이스는 추상 메서드의 집합체이다.
  • 결론은 ? AOP는 메서드에만 적용이 가능하다 !
  • Pointcut의 후보가 되는 모든 메서드들이 joinPoint, 즉 Aspect적용이 가능한 지점이된다.

정리

  • JoinPoint란 Aspect적용이 가능한 모든 지점을 의미한다.
  • Aspect 를 적용가능한 지점중 일부가 Pointcut이 되므로 Pointcut은 JoinPoint의 부분집합인셈이다.
  • 스프링 AOP에서 JoinPoint란 스프링 프레임워크가 관리하는 빈의 모든 메서드에 해당한다.
@Aspect
class MyAspect {

 @Before("execution(* doSomething())")
 public void before(JoinPoint joinPoint) {
 ...
 }
}
  • 상단 소스코드에서 joinPoint의 실체는 그때그때마다 다르다.
  • me.june.SimpleService.doSomething 이 될수도있고,
  • me.june.SampleService.doSomething 이 될수도있다.
  • joinPoint 파라미터를 이용하여 실행 시점에 실제 호출된 메서드와 관련된 정보등을 확인할 수 있다.

Advice

  • Advice는 pointcut에 적용할 로직, 즉 메서드를 의미한다.
  • pointcut에 언제, 무엇을 적용할지 정의한 메서드이다.

아래의 소스코드를 보면 지정된 pointcut이 실행되기 이전 (@Before)에 before()메서드를 실행하라고 지정되어있음을 확인할 수 있다.

@Aspect
class MyAspect {

 @Before("execution(* doSomething())")
 public void before(JoinPoint joinPoint) {
 ...
 }
}

Aspect

  • AOP에서 Aspect는 여러개의 advice와 여러개의 pointcut의 결합체를 의미하는 용어이다.

수식으로 표현하면 다음과 같다.

Aspect = Advice들 + Pointcut들

Advisor

  • Advisor는 다음과 같은 수식으로 표현이 가능하다.

Advisor = Advice + Pointcut

Advisor 는 스프링 AOP에서만 사용하는 용어이며 , 다른 AOP프레임워크에서는 사용하지않는다.
또한 스프링 버전이 올라가면서 더이상 쓰지말라고 권고하는 기능이다.

정리

  • 이번 포스트에서는 AOP의 용어 및 애노테이션 기반 AOP를 알아보았다.
  • 다음시간에는 스프링의 3대 핵심 (?) 중 마지막인 PSA에 대해 알아보도록 하자.

 

'Spring' 카테고리의 다른 글

Spring - MVC  (0) 2019.06.10
Spring - PSA  (0) 2019.05.19
스프링 AOP -1  (0) 2019.05.04
스프링을 활용한 의존성주입 - 2  (0) 2019.05.01
스프링을 활용한 의존성주입 - 1  (0) 2019.04.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함