AOP (Aspect-of-programming)
프로그램의 횡단 관심사를 분리하는 프로그래밍 기법. 프로그램의 공통 관심사항(cross-cutting-concern)을 비즈니스 로직에서 분리시켜 한 번에 처리할 수 있도록 하는 방법이다.
AOP 적용 방법
- 컴파일 시점
- AspectJ
- 소스코드를 컴파일 하기 전에 공통구현코드를 소스에 삽입
- 클래스 로딩 시점
- 클래스를 로딩할 때, 바이트코드에 부가기능을 삽입
- 런타임 시점
- 스프링에서 제공하는 AOP 방식
- Proxy를 이용해서 부가기능이 동작하도록 구현
- JDK Proxy (interface based)
- CGLib Proxy (class based)
AOP 주요 용어
- 타겟 (Target)
- 핵심기능을 담고있는 모듈(클래스)로서 부가기능을 부여할 대상
- 조인 포인트 (Join Point)
- 타겟 객체가 구현한 인터페이스의 모든 메서드
- 어드바이스가 적용될 수 있는 위치
- 포인트 컷 (Pointcut)
- 어드바이스를 적용할 타겟 메서드를 선별하는 정규표현식
- 어드바이스 (Advice)
- 조인포인트에 적용될 부가기능
- @Before, @After, @Around, @AfterReturning, @AfterThrowing
- 에스펙트 (Aspect)
- 포인트 컷 + 어드바이스 => 에스펙트
- 위빙 (Weaving)
- 조인포인트에 어드바이스를 부여하는 과정