관점 지향 프로그래밍 (Aspect Oreinted Programming)
관점 지향 프로그래밍은 소스 코드의 여기저기에 흩어져 있는 횡단 관심사를 중심으로 설계와 구현을 하는 프로그래밍 기법이다.간단하게 설명하면 관점 지향 프로그래밍은 횡단 관심사의 분리를 실현하는 방법이다.
필터 와 인터셉터, 그리고 AOP의 차이를 구별해서 알아두는 것이 좋다.특히 AOP는 핵심 비지니스 로직과 관련하여 공통부분을 모듈화 한 것이다.

횡단 관심사(Cross-Cutting Concern)
핵심 비즈니스 로직과 다소 거리가 있지만, 여러 모듈에서 공통적이고 반복적인 처리를 요구하는 내용이다.
횡단 관심사의 분리(Separation Of Cross_Cutting Concerns)
애플리케이션 개발할 때 횡단 관심사에 해당하는 부분을 분리해서 한 곳으로 모으는 것을 의미한다.
AOP구현
스프링에서는 프락시 기반으로 AOP를 구현한다.
순서
-
핵심 비즈니스 로직에만 근거해서 코드를 작성한다.
-
주변 로직에 해당하는 관심사들을 분리해서 따로 작성한다.
-
핵심 비즈니스 로직 대상 객체에 어떤 관심사를 결합할 것인지를 설정한다.

AOP 관련 용어
- 애스펙트 (Aspect)
- AOP의 단위가 되는 횡단 관심사에 해당한다.
- 조인포인트 (Join Point)
- 횡단 관심사가 실행될 지점이나 시점(메서드 실행이나 예외 발생 등)을 말한다.
- 스프링에서는 메서드 실행 시점을 의미한다.
- 어드바이스(Advice)
- 특정 조인 포인트에서 실행되는 코드로, 횡단 관심사를 실제로 구현해서 처리하는 부분이다.
- 포인트컷(Pointcut)
- 수많은 조인 포인트 중에서 실제로 어드바이스를 적용할 곳을 선별하기 위한 표현식(expression)을 말한다.
- 위빙(Weaving)
- 애플리케이션 코드의 적절한 지점에 애스펙트를 적용하는 것을 말한다.
- 타깃(Target)
- AOP 처리에 의한 처리 흐름에 변화가 생긴 객체를 말한다.
- Aspect를 적용하는 곳(클래스,메서드)을 말한다.
포인트 컷 표현식
1)execution 지시자의 표현 방식
- execution 지시자를 활용해 포인트컷을 표현한 것이다.
execution(Board com.spring.aop.BoardService*.read*(..))
- 포인트컷 표현요소에 대한 설명
- execution: 지시자
- Board: 반환값
- com.spring.aop :패키지
- BoardService*:클래스 타입
- read*:메서드
- (…):인수
- 포인트컷 표현식에 사용되는 와일드 카드
-
- : 임의의 패키지 1개 계층의미, 또는 임의의 인수 1개를 의미한다.
- .. :임의의 패키지 0개 이상 계층을 의미하거나 임의의 인수 0개 이상을 의미한다.
-
- :클래스명 뒤에 붙여 쓰며,해당 클래스와 해당 클래스의 서브클래스, 혹은 구현 클래스 모두를 의미한다.