FireDrago
[Spring] 스프링 AOP 개념 본문
AOP 소개 - 핵심기능과 부가기능

핵심기능 : 해당 객체가 제공하는 고유의 기능
부가기능 : 핵심기능을 보조하기 위해 제공되는 기능
횡단 관심사 : 하나의 부가 기능이 여러 곳에 동일하게 사용되는 경우다.
횡단 관심사를 적용하는 경우에 중복이 발생하고, 수정이 발생하면 클래스 모두를 하나씩 찾아가면서 수정해야 했다.
AOP 소개 - 애스펙트
부가기능과 부가기능을 어디에 적용할지 정의한 것이 애스펙트(Aspect)이다.
@Aspect 애너테이션을 사용하는 것이 바로 이 애스펙트의 예다.
애스펙트를 사용한 프로그래밍 방식을 관점 지향 프로그래밍 AOP(Aspect-Oriented Programming)이라고 한다.
AOP는 OOP를 대체하기 위한 것이 아니라 횡단 관심사를 깔끔하게 처리하기 어려운 OOP의 부족한 부분을 보조하는 목적으로 개발되었다.
AOP 적용방식
1. 컴파일 시점
- .java 소스 코드를 컴파일러가 .class 파일을 만드는 시점에 부가기능 로직을 추가하는 방법
- 생성자, 필드값, static 메서드, 메서드 실행 등 모든 지점에 AOP 적용할 수 있다.
2. 클래스 로딩 시점
- .class 파일을 조작한 후에 jvm 클래스 로더에 보관하는 방법이다.
- 설정이 번거롭고 운영하기 어렵다.
- 생성자, 필드값, static 메서드, 메서드 실행 등 모든 지점에 AOP 적용할 수 있다.
3. 런타임 시점 (프록시 사용)
- 런타임과 클래스 로딩이 다 끝나고 실행되는 시점에 부가기능을 적용하는 방식
- 빈 후처리기와 프록시를 사용한 AOP가 대표적인 예시이다.
- 메서드 실행 지점에만 AOP를 적용할 수 있다. 프록시는 메서드 오버라이딩을 활용하기 때문이다.
용어정리
| 용어 | 설명 |
| 조인 포인트 (Join point) | 어드바이스가 적용될 수 있는 위치, AOP 적용할 수 있는 모든 지점 스프링 AOP는 프록시를 사용하므로 조인포인트는 항상 메소드 실행 지점으로 제한된다. |
| 포인트컷 (Pointcut) | 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능 AspectJ 표현식을 사용해서 지정한다. |
| 타겟 (Target) | 어드바이스를 받는 객체, 포인트컷으로 결정 |
| 어드바이스 (Advice) | 부가기능 Around, Before, After, AfterReturning, AfterThrowing 같은 다양한 종류가 있다. |
| 애스펙트 (Aspect) | 어드바이스 + 포인트컷을 모듈화 한것 여러 어드바이스와 포인트컷이 함께 존재한다. |
| 어드바이저 (Advisor) | 하나의 어드바이스 + 하나의 포인트 컷 스프링 AOP에서만 사용되는 특별한 언어 |
| 위빙 (Weaving) | 포인트컷으로 결정한 타겟의 조인포인트에 어드바이스를 적용하는 것 |
| AOP 프록시 | AOP 기능을 구현하기 위해 만든 프록시 객체 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시이다. |
'프로그래밍 > Spring' 카테고리의 다른 글
| [Spring] 스프링 AOP - 포인트컷 1 (0) | 2024.05.20 |
|---|---|
| [Spring] 스프링 AOP 구현 (0) | 2024.05.18 |
| [Spring] 스프링이 지원하는 프록시 (0) | 2024.05.15 |
| [Spring] 동적 프록시 (JDK 동적 프록시, CGLIB) (0) | 2024.05.14 |
| [Spring] 동시성 문제와 쓰레드 로컬 (Thread Local) (0) | 2024.05.07 |
