스프링을 사용하다 보면 자동으로 무언가를 해주는 3녀석 있다. filter, interceptor, AOP가 주인공인데 잘만 쓰면 우리의 코드를 확 줄여줘서 퇴근을 빠르게 해줄 수 있는 녀석들이다.
이번 포스트에서는 면접에서 이 녀석들의 차이점을 왕왕 물어보기도 하므로 정리해보자.
공통점
filter, interceptor, AOP의 사용 목적은 실제 호출하려는 대상 이전/이후에 호출되서 주요 목적 이외의 부가적인 동작을 처리해준다는 공통점이 있다.
차이점
Spring @MVC를 이용해서 웹 애플리케이션을 작성한다고 할 때 filter, interceptor, AOP의 동작 위치를 살펴보자.
일단 filter는 spring과 무관한 J2EE의 스펙이다. 사용자의 모든 요청은 filter를 거쳐서 Servlet에 전달되므로 url mapping에 적합한 요청이라면 servlet 동작 보다 먼저 적용된다. ServletRequest/ServletResponse에 대한 사전/사후 처리가 가능하지만 spring 자원이 아니기 때문에 spring과의 협업이 어렵다. (하지만 Spring에 DelegatingFilterProxy가 등장하면서 가능하게 되었다.)
interceptor는 DispatcherServlet와 handler(controller)사이에서 역시 요청과 응답을 가로챌 수 있다. spring의 기술로 handler가 동작하기 이전에 동작한다. filter와 마찬가지로 url 기반으로 적용되는데 filter와의 차이점은 spring 기술이기 때문에 spring에서 관리하는 bean 들을 사용할 수 있게 된다.
AOP는 역시 spring의 기술이며 url 기반이 아닌 pointcut 기반으로 동작한다. filter나 interceptor는 HttpServletRequest, HttpServletResponse를 받아서 웹과 관련된 처리를 하는 반면 AOP는 주로 웹과 무관하게 business logic과 연결해서 사용된다.