Filter와 Interceptor의 차이점 (비교 및 정리)

 Spring에서 Filter와 Interceptor는 모두 요청과 응답을 중간에 가로채서 처리하는 목적으로 사용된다.

하지만 이들 사이에는 몇가지 주요한 차이점이 존재한다.

 

이미지 출처 : https://velog.io/@junsj119/spring-Filter-Interceptor-AOP-%EC%B0%A8%EC%9D%B4%EC%99%80-DispatcherServlet%EA%B0%84%EB%8B%A8%EA%B0%84%EB%8B%A8

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 내부에서 작동하기 때문에 더 많은 정보와 기능에 액세스할 수 있는데

 세션정보나 특정 로직수행등을 스프링 기능을 활용하여 정의할 수 있다.