💭 오늘의 학습 전략
# AOP
◾ 필요한 이유
◽ 용어
◻ Aspect
◻ JoinPoint
◻ Advice
◻ Pointcut
◻ Advisor
◻ Weaving
◻ Target
◻ AOP Proxy
◽ 타입별 Advice
◽ Pointcut 표현식
◽ JoinPoint
◽ 애너테이션을 이용한 AOP
◾ 실습
🌼 학습한 것들
◾ AOP 필요한 이유
- 비즈니스 클래스에 공존하는 핵심 관심사 + 횡단 관심사 분리
=> 보다 객체지향적으로
◾ AOP 용어
- Aspect: 여러 Advice + Pointcut. 앱에 포함되는 모듈화된 횡단 기능
- JoinPoint: 앱 실행 흐름에서 AOP 적용 가능한 특정 포인트(Spring은 프록시 방식으로 메서드 실행 지점으로 제한)
- Advice: JoinPoint에서 수행되는 코드
- Pointcut: JoinPoint 중 Advice가 적용될 위치 선별, AspectJ 표현식 사용
- Advisor: 하나의 Advice + Pointcut (Spring AOP에서만 사용)
- Target: 핵심 기능 모듈 ==> 부가기능을 부여할 대상. Advice 받는 객체
- Weaving: Advice를 핵심코드에 적용하는 것(Pointcut으로 결정한 Target의 JoinPoint에)
- AOP Proxy: AOP 기능을 구현하기 위해 만든 프록시 객체, 대상 객체 원본을 대체
◾ 타입별 Advice
- Before: JoinPoint 실행 이전. 예외 발생 시 대상 객체 메서드 호출 불가
- AfterReturning: JoinPoint 실행 완료 이후.
- AfterThrowing: 대상 객체 메서드가 예외 던진 경우
- After: JoinPoint 동작 결과와 상관없이 실행 (finally 느낌)
- Around: 대상 객체 메서드 전후에 수행, 가장 강력. try-catch-finally 처리 가능.
Advice 첫번째 파라미터 타입은 ProceedingJoinPoint
◾ Pointcut 표현식
- AspectJ가 제공하는 포인트컷 표현식을 줄여서 표현
- ex) @Pointcut("execution(* hello.aop.order..*(..))")
@Pointcut("execution(* hello.aop.service.*.*(..))
@Pointcut(public * *(..))
- 포인트컷 지시자: execution, whthin, args 등등 보통 execution. 추후에 필요할 때 찾아보기
◾ JoinPoint
- 추상적 개념. AOP 적용 가능 지점
- Spring AOP는 프록시 방식 => JoinPoint는 메서드 실행 지점으로 제한
- JoinPoint 인터페이스: getArgs(), getThis(), getTarget(), getSignature() ...
* Signature 객체: getName(), toLongString(), toShortString() ...
- ProceedingJoinPoint 인터페이스: proceed()
🔥 보충이 필요한 것들
◽ 애너테이션을 이용한 AOP
💨 하루를 마치며
1. 제일 처음 컨텐츠를 읽을 때는 너무 복잡한 용어들 때문에 헷갈렸고, 개념은 알아도 실행되는 방식에 대한 이해가 전혀 되지 않았다.
2. 실습과 테스트를 거치면서 동작 방식을 이해할 수 있어서 좋았다. Pointcut을 따로 빼서 사용하거나, 이름으로 다른 Pointcut의 참조식을 포함하는 등 여러가지 방식으로 Pointcut을 설정해가면서 실습해보면서 이해가 빠르게 됐다.
3. 어제는 조금 답답한 기분이 있었지만 오늘 마무리세션에서 한 번 더 그림과 함께 설명을 들으니까 처음보다 확실히 와닿아서 기뻤다!!
4. 그나저나 예전에 로깅을 어떻게 했던 건지 궁금하다.ㅠㅠ AOP를 사용하지는 않았는데,, 알 수 있는 방법이 없담
'공부기록 > TIL' 카테고리의 다른 글
2022/12/15 TIL | Spring MVC, Controller (0) | 2022.12.15 |
---|---|
2022/12/14 TIL | 모의 기술면접(2) (0) | 2022.12.14 |
2022/12/08-09 TIL | DI (0) | 2022.12.09 |
2022/12/07 TIL | Spring Framework 모듈 구성, SpringBoot (0) | 2022.12.07 |
2022/12/06 TIL | Spring Framework, 특징 (0) | 2022.12.06 |
댓글