AOP(Aspect-Oriented Programming) : 관점 지향 프로그래밍
Java Spring에서 왜 AOP 개념을 사용할까요?
객체지향프로그래밍으로 서비스를 구현할 때 핵심기능을 구현할텐데 그 핵심기능들에서 필수부가기능(트랜잭션,보안,로깅 코드)들이 불특정 다수의 클래스에 존재하게 되면 복잡도가 증가하게되고 비즈니스 코드 파악이 어렵게 됩니다.
그러하기 때문에 AOP가 등장을 하게 되었습니다.
AOP를 통해 핵심 기능과 부가기능으로 나눌 수 있습니다.
AOP 용어 정리
Aspect
-여러 객체에 공통으로 적용되는 기능(공통 기능)
-Advice + PointCut 을 모듈화하여 애플리케이션에 포함되는 횡단기능
-여러 어드바이스와 포인트컷이 함께 존재함
Join point
- 클래스 초기화, 객체 인스턴스화, 메소드 호출, 필드 접근, 예외 발생과 같은 애플리케이션 실행 흐름에서의 특정 포인트를 의미
-스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메소드 실행지점으로 제한함.
-추상적인 개념이고 AOP를 적용할 수 있는 모든 지점
Advice
-조인포인트에서 수행되는 코드를 의미
-Aspect를 언제 핵심 코드에 적용할 지를 정의
-부가기능에 해당됨
-Before , After returning , After throwing , After , Around가 있다.
Pointcut
- 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능
- AspectJ 표현식을 사용해서 지정
- 프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트컷으로 선별 가능
Weaving
- 포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용하는 것 (핵심 기능에 Advice를 적용)
- 핵심 기능코드에 영향 X 부가기능 추가 가능
AOP 프록시
- AOP 기능을 구현하기 위해 만든 프록시 객체
- 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시입니다.
(현재 스프링에서는 기본으로 CGLIB프록시를 사용하고있다. JDK보다 성능이 좋고 빠르다고한다.)
타겟(Target)
- 핵심 기능을 담고 있는 모듈로 타겟은 부가기능을 부여할 대상이 됨
- Adivce를 받는 객체 포인트컷으로 결정
'개발 > Spring' 카테고리의 다른 글
JSON으로 들어오는 HTTP 요청 객체로 한번에 받기 (0) | 2023.08.14 |
---|---|
DTO, 유효성 검증, Jakarta Bean Validation (1) | 2022.10.21 |
Java 기반 컨테이너 (1) | 2022.10.15 |
Spring Coniner(스프링 컨테이너) (0) | 2022.10.15 |
DI (1) | 2022.10.13 |