티스토리 뷰
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 |
댓글