1. Spring AOP
1-1) Spring AOP 개념
AOP란 Aspect-Oriented Programming의 약어임.
Spring AOP는 AOP의 구현체를 제공하며, 자바에 만들어져 있는 프레임워크 AspectJ라는
또 다른 구현체와 연동해서 사용할 수 있는 기능을 제공함. 이러한 기능을 기반으로 스프링
트랜젝션과 같은 다른 기능이 적용되고 있음.
AOP, 관점 지향 프로그래밍은 흩어진 관심사를 Aspect로 모듈화 할 수 있는 프로그래밍 기법을 말함.
관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눈다는 의미임.
관점을 기준으로 각각 모듈화하는 프로그래밍 기법인 거임.
1-2) AOP Image
→ 각각의 색들은 Concern이라고 보면 됨.
→ Concern, 여러 클래스나 메서드에 걸쳐 나타나는 비슷한 코드를 의미함.
→ 각 클래스에 있는 CrossCuttingConcern. 흩어진 관심사를 Aspect로 모듈화하고
→ 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지임.
→ AOP란 관점 지향 프로그래밍은 흩어진 관심사를 Aspect로 모듈화 할 수 있는 프로그래밍 기법임.
→ AOP 주요개념에는 Aspect, Target, JoinPoint, PointCut
→ Aspect, 흩어진 관심사(CrossCuttingConcern)를 묶어서 모듈화한 것.
→ Aspect에는 1) Advice(해야할 일)와 2) Point Cut(어떻게 할 것인가)이 들어감.
→ Join Point, 메서드 실행 시점임. Advice가 적용될 위치
2. AOP 주요개념
2-1) Aspect
흩어진 관심사(CrossCuttingConcern)를 묶어서 모듈화한 것.
하나의 모듈. Advice와 Point Cut이 들어감.
2-2) Target
Aspect가 가지고 있는 Advice가 적용되는 대상(클래스, 메서드 등등)을 말함.
2-3) Advice(해야할일)
어떤 일을 해야할 지에 대한 것. 해야할 일들에 대한 정보를 가지고 있음.
2-4) Join Point
가장 흔한 Join Point는 메서드 실행 시점임. Advice가 적용될 위치, 끼어들 수 있는 지점,
생성자 호출 직전, 생성자 호출시, 필드에 접근하기 전, 필드에서 값을 가져갔을 때 등등
2-5) Point Cut(어떻게 할 것인가?)
Join Point의 상세한 스펙을 정의한 것. 어디에 적용해야 하는지에 대한 정보를 가지고 있음.
"A 클래스에 B 메서드를 적용할 때 호출을 해라"와 같은 구체적인 정보를 줌.
3. AOP 구현체
AspectJ, Spring AOP
4. AOP 적용방법
4-1) 컴파일 타임에 적용
컴파일 시점(.java 파일을 .class 파일로 만들 때)에 바이트 코드를 조작하여
조작된 (AOP가 적용된) 바이트 코드를 생성
4-2) 로드 타임에 적용
순수하게 컴파일을 한 뒤, 클래스 로딩하는 시점에 클래스 정보를 변경(Load Time Weaving)
4-3) 런타임에 적용
스프링 AOP가 사용하는 방법, A 클래스 타입의 Bean을 만들 때
A 타입의 Proxy Bean을 만들어
Proxy Bean이 Aspect 코드를 추가하여 동작.