[Spring] 스프링 AOP란?
2022. 8. 7. 15:42ㆍSpring/Spring AOP
AOP (Aspect Oriented Programming)
- AOP는 Aspect Oriented Programming, 즉 관점 지향 프로그래밍이라고 불린다. 하나의 소프트웨어가 거대한 OOP로써 설계, 프로그래밍되었다면 이것을 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 보고 그 관점을 기준으로 모듈화하여 분리시키는 개념이다.
- 모듈화(modularization) : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
- 여기서, 핵심 기능은 해당 객체가 제공하는 고유 기능으로 볼 수 있고, 부가 기능은 핵심 로직을 실행하기 위해 행해지는 기능을 뜻한다. 이에 속하는 것은 로깅, 트랜잭션, 보안 등이 있다.
- 위의 그림처럼 소스 코드상에서 반복하여 나타나는 코드들을 흩어진 관심사(Crosscutting Concerns)라고 한다.
- 이 흩어진 관심사들을 Aspect로 모듈화하고 핵심 비즈니스 로직에서 분리하여 재사용한다는 것이 AOP의 목적이다.
- AOP는 OOP를 대체하기 위한 것이 아닌, 흩어진 관심사를 처리하기 힘든 OOP의 부족한 부분을 보완하기 위한 목적으로 개발되었다.
- AOP의 대표적인 구현으로 AspectJ 프레임워크가 있다. (스프링에서도 대부분 AspectJ의 문법을 차용)
AOP의 적용 방식
① 컴파일 시점
- 소스코드를 컴파일러를 사용해 .class를 만드는 시점에 부가 기능 로직 추가 가능, 이 때 특별한 컴파일러를 사용해야 함. (Aspect로 부가 기능 적용 대상인지 구분)
② 클래스 로딩 시점
- 자바 언어의 특성상 .class 파일이 JVM 내부의 클래스 로더에 보관되는데, 중간에서 .class 파일을 조작한 다음 JVM에 올리게 된다. (자바 언어에서 제공하는 기능)
③ 런타임 시점
- 스프링에서 사용하는 방식으로, 자바의 메인 메서드가 이미 실행되고 난 다음을 뜻한다. 스프링과 같은 컨테이너, 빈후처리기 등의 도움을 받아 실제 객체 대신 프록시 객체를 컨테이너에 넣음으로써 부가 기능을 적용할 수 있다.
AOP 용어
▷ 조인 포인트(Join Point)
- 어드바이스가 적용될 수 있는 위치, AOP를 적용할 수 있는 모든 지점
- 메소드 실행, 생성자 호출, 필드 값 접근 등의 프로그램 실행 중 지점
▷ 애스팩트(Aspect)
- 흩어진 관심사를 모듈화한 것. 어드바이스 + 포인트컷
▷ 어드바이스(Advice)
- 어떠한 일을 해야하는가. 부가 기능 그 자체
- 특정 조인 포인트에서 Aspect에 의해 취해지는 조치
▷ 포인트컷(Pointcut)
- 조인 포인트 중 어드바이스가 적용될 위치를 선별하는 기능
▷ 타겟(Target)
- 어드바이스를 받는 객체, 포인트컷으로 결정된다.
▷ 어드바이저(Advisor)
- 어드바이스 1 + 포인트컷 1, 스프링 AOP 에서만 사용되는 용어
▷ 위빙(Weaving)
- 포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용하는 것
- 핵심 로직에 영향을 주지 않고 부가기능 로직을 적용할 수 있다.
▷ AOP 프록시
- AOP를 구현하기 위해 만든 프록시 객체, 스프링에서의 AOP 프록시는 JDK 동적 프록시와 CGLIB이 있다.
'Spring > Spring AOP' 카테고리의 다른 글
[Spring] 포인트컷 표현식 (0) | 2022.08.07 |
---|