개념 정리를 해보려고 한다.
공통 업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법이 3가지 있다.
적용시 시점이 다르다.
Filter -> Interceptor -> AOP
적용 방식이 다르다.
Filter : web.xml , Interceptor: servlet-context.xml

실행 순서
1. 서버를 실행시킨 후 서블릿이 올라오는 동안 init이 실행되고, 그 후 doFilter가 실행된다.
2. 컨트롤러에 들어가기 전 preHandler가 실행되낟.
3. 컨트롤러에서 나와 postHandler, after Completion, doFilter 순으로 진행이 된다.
4. 서블릿 종료시 destroy가 실행된다.
요청과 응답을 거른뒤 정제하는 역할을 한다.
서블릿 필터는 DispatchServlet 이전에 실행이 되는데 필터가 동작하도록 지정된 자원의 앞단에서 요청 내용을 변경하거나, 여러가지 체크를 수행할 수 있다.
또한 자원의 처리가 끝난 후 응답내용에 대해서도 변경하는 처리를 할 수 있다.
보통 web.xml에 등록하고, 일반적으로 인코딩, XSS방어 등의 처리로 사용.
요청에 대한 작업 전/후로 가로챈다고 보면 된다.
필터는 스프링 컨텍스트 외부에 존재하여 스프링과 무관한 자원에 대해 동작했지만, 인터셉터는 스프링의 DispatcherServlet이 컨트롤러를 호출하기 전, 후로 끼어들기 때문에 스프링 컨텍스트 영역 내부에서 Controller(Handler)에 관한 요청과 응답에 대해 처리한다.
스프링의 모든 빈 객체에 접근할 수 있다.
인터셉터는 여러개를 사용할 수 있다.
oop를 보완하기 위해 나온 개념
객체 지향의 프로그래밍을 했을 때 중복을 줄일 수 없는 부분을 줄이기 위해 종단면(관점)에서 바라보고 처리한다.
주로'로깅','트랜잭션','에러처리'등 비지니스단의 메서드에서 더 세밀하게 조정하고 싶을 때 사용한다.
Interceptor, Filter와 달리 메서드 전후의 지점에서 자유롭게 설정이 가능하다.
Interceptor와 Filter는 주소로 대상을 구분해서 걸러내야하는 반면, AOP는 주소, 파라미터, 애노테이션 등 다양한 방법으로 대상을 지정할 수 있다.
AOP의 Advice와 HandlerInterceptor의 가장 큰 차이는 파라미터의 차이다.
Advice의 경우 JoinPoint나 ProceedingJoinPoint 등을 활용해서 호출한다.
반면 HandlerInterceptor는 Filter와 유사하게 HttpServletRequest, HttpServletResponse를 파라미터로 사용한다.