정의
AOP는 핵심 관심사(core concerns)에서 공통 관심사(cross-cutting concerns)를 분리시키는 프로그래밍 기법으로, 공통 관심사를 추상화하고 캡슐화합니다.
공통 관심사 (Cross-cutting concerns)
공통 관심사는 로깅, 검증, 트랜잭션, 시간측정과 같이, 서로 다른 메서드들에 공통적으로 반복되고, 모듈 자체에서 완전한 리팩토링할 수 없는 코드를 의미합니다.
AOP 주요 개념
- Aspect
- 모듈화한 공통 관심사 - Join point
- 프로그램 실행 중 한 시점, Spring AOP에서는 메서드 실행 - pointcut
- join point을 식별 - Advice
- pointcut에 의해 선택된 join point에 실행할 코드, cross-cutting concern 메서드 - Target Object
- advice가 적용될 객체들
- Sping AOP에서는 런타임에 subclass가 생성되고, advice를 포함하여 target의 메서드를 오버라이딩 - AOP proxy
- Spring AOP는 JDK dynamic proxy를 사용하여 target class 및 advice 호출을 생성 -> AOP proxy class
- CGLIB 프록시 사용 가능 - Weaving
- advice 객체 생성을 위해 aspect와 다른 어플리케이션/객체를 연결하는 과정
AOP Advice Type
- Before advice
- join point 메서드 실행 전에 실행 (@Before)
- After (finally) advice
- join point 메서드의 실행이 끝난 후 실행 (@After)
- Around advice
- Target 메서드의 실행 전/후 등등 annotation이 advice 실행 위치를 지정
https://dev.to/anouar1611/spring-aop-introduction-and-concepts-of-aop-4oan
https://seongmun-hong.github.io/spring/Spring-Aspect-Oriented-Programming(AOP)(1)
https://stackoverflow.com/questions/242177/what-is-aspect-oriented-programming
https://docs.jboss.org/aop/1.0/aspect-framework/userguide/en/html/what.html
https://en.wikipedia.org/wiki/Cross-cutting_concern
https://ko.wikipedia.org/wiki/%ED%9A%A1%EB%8B%A8_%EA%B4%80%EC%8B%AC%EC%82%AC
'프레임워크 > Spring' 카테고리의 다른 글
[Spring] Rest API 서버 만들기 1 - 문서화, 구조, Exception, Security (0) | 2022.06.05 |
---|---|
[Spring] Actuator (0) | 2022.05.15 |
[Spring] JpaRepository의 delete (0) | 2022.04.04 |
[Spring] @Transactional과 propagation (0) | 2022.04.04 |
[인프런][스프링 입문] 25~27 강 (0) | 2022.03.09 |