Filter와 Interceptor의 차이점 (비교 및 정리)
Spring에서 Filter와 Interceptor는 모두 요청과 응답을 중간에 가로채서 처리하는 목적으로 사용된다.
하지만 이들 사이에는 몇가지 주요한 차이점이 존재한다.
1. 작동위치
- Filter : 위 그림에서 보이는 것처럼 필터는 Servlet Contrainer level에서 작동한다. 즉 Spring Context가 시작되기 전에 이미실행되기 때문에
Spring과 상관없이 웹 App의 모든 요청/응답에 대해서 동작할 수 있다.
- Interceptor : 인터셉터는 Spring context level에서 작동한다. 따라서 Spring MVC의 DispatcherServlet 이 컨트롤러를 호출하기 전후로 동작한다. 따라서 특정 컨트롤러 또는 핸들러 매핑을 타겟으로 설정할 수 있다.
#핸들러 매핑(Handler Mapping)이란?
클라이언트의 요청을 처리할 수 있는 적절한 컨트롤러를 찾아주는 역할을 하는 인터페이스로서 Spring MVC에서는
Client에서 요청이 오면, DispatcherServlet은 이 요청을 처리하기 위해 해당 요청을 핸들링 할 수 있는 Controller를 찾는다.
이때 사용되는 것이 핸들러 매핑으로 가장 많이 사용되는 RequestMappingHandlerMapping은
@RequestMapping 어노테이션이 붙어있는 메소드와 URL을 맵핑하고 이 매핑정보를 바탕으로 적절한 컨트롤러 메소드를 호출한다.
2. 기능
- Filter : 필터는 HTTP 요청/응답을 조작할 수 있는 저수준의 액세스 권한을 제공한다.
ex) 인코딩 변경, CORS 설정 등 주로 보안관련 설정을 수행할 수 있다.
-Interceptor : 인터셉터는 Spring Context 내부에서 작동하기 때문에 더 많은 정보와 기능에 액세스할 수 있는데
세션정보나 특정 로직수행등을 스프링 기능을 활용하여 정의할 수 있다.