AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)는 소프트웨어 모듈 간의 공통적인 기능을 분리하여 코드의 유지보수성과 재사용성을 높이는 프로그래밍 기법

| Filter | Interceptor | AOP | |
|---|---|---|---|
| 특징 | Servlet 단위에서 실행 | Servlet 단위에서 실행 | Method를 감싸는 Proxy 패턴 |
| 역할 | 요청과 응답을 거른 뒤 정제 | 요청에 대한 작업 전/후로 가로챈다. | OOP로 했을 때, 중복을 줄일 수 없는 부분을 줄이기 위해 종단면에서 바라보고 처리 |
| 사용 용도 | 1. 인코딩 변환 처리 2. XSS 방어 |
스프링의 모든 Bean 객체에 접근 가능 1. 로그인/권한 체크 2. 프로그램 실행시간 계산 3. 로그 확인 |
비즈니스단의 메서드에서 더 세밀하게 조정하고 싶을 때 사용 1. 로깅 2. 트랜잭션 3. 에러 처리 |
| 실행 메서드 및 방법 | Init() doFilter() destroy() |
preHandler() postHandler() afterCompletion():view페이지 렌더링 이후 |
AOP의 포인트컷 1. @Before 2. @After 3. @After-returning 4. @After-throwing 5. @Around |
스프링 인터셉터
DispatcherServlet이 컨트롤러를 호출하기 전/후로 끼어들어서 스프링 컨텍스트 내부에서 컨트롤러에 관한 요청, 응답을 처리한다.
파라미터로 HttpServletRequest, HttpServletResponse를 사용해서 컨트롤러로 넘어가는 요청과 응답 데이터를 처리하기 좀 더 용이하다.
스프링 AOP
주로 트랜잭션, 로깅 등 비즈니스단의 메소드에서 더 세밀하게 조정하고 싶을 때 사용
인터셉터와 필터는 주소(URL)로 대상을 구분해서 걸러내야 한다면 AOP는 주소, 파라미터, 어노테이션 등 다양한 방법으로 대상을 지정할 수가 있다.
URL 기반이 아닌 PointCut 단위로 동작하기에 인터셉터와 필터와 달리 메서드 전/후의 지점에서 자유롭게 설정이 가능하다.

필터는 WAS 단에 설정되어 스프링과 무관한 자원에 대해 동작, doFilter() 메소드만 있지만
인터셉터는 스프링 컨텍스트 내부에 설정되어 컨트롤러 접근 전/후에 가로채서 기능을 동작, pre, post로 명확하게 분리된다.
필터와 인터셉터는 각각 관리되는 컨테이너와 Request/Response의 조작 가능 여부가 다르고, 그에 따라 용도가 다르다
∘ 필터는 Request와 Response를 조작할 수 있지만 인터셉터는 조작할 수 없다.
필터에서는 기본적으로 스프링과 무관하게 전역적으로 처리해야 하는 작업들을 처리할 수 있다.
∘ 대표적인 예시로 보안과 관련된 공통 작업이 있다.
인터셉터에서는 클라이언트의 요청과 관련되어 전역적으로 처리해야 하는 작업들을 처리할 수 있다.
∘ 대표적으로 세부적으로 적용해야 하는 인증이나 인가와 같이 클라이언트 요청과 관련된 작업 등이 있다.
Filter