Interceptor와 Filter는 Servlet 단위에서 실행
반면 AOP는 메소드 앞에 Proxy패턴의 형태로 실행
실행순서를 보면 Filter가 가장 밖에 있고 그 안에 Interceptor, 그 안에 AOP가 있는 형태
따라서 요청이 들어오면 Filter → Interceptor → AOP → Interceptor → Filter 순으로 거치게 됨
서버를 실행시켜 서블릿이 올라오는 동안에 init이 실행되고, 그 후 doFilter가 실행
컨트롤러에 들어가기 전 preHandler가 실행
컨트롤러에서 나와 postHandler, after Completion, doFilter 순으로 진행이
서블릿 종료 시 destroy가 실행
일반적으로 스프링과 무관하게 전역적으로 처리해야 하는 작업들을 처리할때 사용
Spring이 실행 되기 전 실행되며 톰캣과 같은 웹컨테이너(WAS)에서 처리해줌
Request / Response에 대한 조작이 가능
(HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 처리 함)
공통된 보안 및 인증/인가 관련 작업(XSS방어)
이미지/데이터 압축 및 문자열 인코딩 변환 처리
Spring과 분리되어야 하는 기능
모든 요청에 대한 로깅
요청에 대한 작업 전/후로 가로챔
스프링의 모든 빈 객체에 접근 가능
스프링의 DistpatcherServlet이 컨트롤러를 호출하기 전, 후로 끼어들기 때문에 스프링 컨텍스트(Context, 영역) 내부에서 Controller(Handler)에 관한 요청과 응답에 대해 처리
세부적인 보안 및 인증/인가 공통 작업( 특정 사용자는 특정 기능을 사용 못하게 막음)
API 호출에 대한 로깅
Controller로 넘겨주는 정보(데이터)의 가공
(필터와 다르게 HttpServletRequest나 HttpServletResponse 등과 같은 객체를 제공받으므로 객체 자체를 조작할 수는 없음,
대신 해당 객체가 내부적으로 갖는 값은 조작할 수 있으므로 컨트롤러로 넘겨주기 위한 정보를 가공 가능
EX) JWT 토큰 정보를 파싱해서 컨트롤러에게 사용자의 정보를 제공하도록 가공)
URL 기반이 아닌 PointCut 단위로 동작하여 주소, 파라미터, 애노테이션 등 PointCut이 지원하는 다양한 방법으로 대상지정 가능
위 둘보다 더 세밀한 조정이 가능함