스프링 어플리케이션에서 필터(Filter)와 인터셉터(Interceptor)의 차이와 각각의 예외처리는 어떻게 이뤄지는지 정리하고자 글을 쓴다. 우선 필터와 인터셉터가 웹 어플리케이션에서 어디에 위치하는지 어떻게 동작하는지 살펴보고, 이 둘은 어떤 차이가 있으며 어떻게 예외처리를 해야하는지 학습할 것이다.
사용자에게 요청이 들어오면 Web Context 제일 앞단의 필터에서 요청이 처리된다.(Filter 설정에 따라서) 필터는 디스패처 서블릿에 요청이 전달되기 전/후에 url 패턴에 맞는 요청에 대해 보안/로깅 등 부가적인 처리가 이뤄진다. 필터를 통과하면 디스패처 서블릿으로 전달되고 디스패처 서블릿은 핸들러 매핑을 통해 적절한 컨트롤러를 찾아 요청을 전달한다. 인터셉터는 해당 과정 전후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다.
스프링 프레임워크에서 필터(Filter)는 웹 애플리케이션의 HTTP 요청과 응답을 가로채어 처리하는 컴포넌트로, 요청이 서블릿 컨테이너로 전달되기 전에 사전 처리(pre-processing) 또는 후처리(post-processing)를 수행하는 역할을 한다. 필터는 일종의 서블릿(Servlet)으로, 요청을 처리하기 전에 필요한 작업을 수행하거나, 응답을 처리하기 전에 후처리 작업을 수행할 수 있다. 정리하면 다음과 같다.
스프링 프레임워크에서 인터셉터(Interceptor)는 웹 애플리케이션의 컨트롤러에 들어오는 요청과 컨트롤러가 응답을 처리하기 전후에 사전 처리(pre-processing) 또는 후처리(post-processing)를 수행하는 컴포넌트로, 스프링 MVC에서 사용되는 기능이다. 인터셉터는 요청과 응답을 가로채어 처리하여, 로직의 재사용성과 중복 코드의 감소, 요청과 응답의 조작 등을 가능하게 한다. 정리하면 다음과 같다.
인터셉터는 스프링 MVC에서 컨트롤러의 요청 처리 전후에 사전처리 또는 후처리를 수행하는 컴포넌트로 스프링 컨테이너에 관리되기 때문에 스프링의 @ControllerAdvice, @ExceptionHandler 같은 예외처리 매커니즘을 따를 수 있지만, 필터의 경우 스프링 컨테이너가 아닌 서블릿 컨테이너에 관리되기 때문에 스프링의 예외처리 매커니즘을 따를 수 없다. 따라서 Response 객체를 조작하여 예외처리를 해주어야 한다.
(인터셉터의 경우 스프링 예외처리 매커니즘에 따라 @ControllerAdvice, @ExceptionHandler를 사용하여 예외처리 할 수 있다.)
(필터의 경우 Response 객체를 조작하여 예외처리를 할 수 있다.)
https://developer-ping9.tistory.com/154
https://mangkyu.tistory.com/173