스프링 필터와 인터셉터의 흐름과 예외처리

eomprgrm·2023년 4월 20일
0

1. 개요


스프링 어플리케이션에서 필터(Filter)와 인터셉터(Interceptor)의 차이와 각각의 예외처리는 어떻게 이뤄지는지 정리하고자 글을 쓴다. 우선 필터와 인터셉터가 웹 어플리케이션에서 어디에 위치하는지 어떻게 동작하는지 살펴보고, 이 둘은 어떤 차이가 있으며 어떻게 예외처리를 해야하는지 학습할 것이다.

2. 웹 어플리케이션 요청의 큰 흐름


사용자에게 요청이 들어오면 Web Context 제일 앞단의 필터에서 요청이 처리된다.(Filter 설정에 따라서) 필터는 디스패처 서블릿에 요청이 전달되기 전/후에 url 패턴에 맞는 요청에 대해 보안/로깅 등 부가적인 처리가 이뤄진다. 필터를 통과하면 디스패처 서블릿으로 전달되고 디스패처 서블릿은 핸들러 매핑을 통해 적절한 컨트롤러를 찾아 요청을 전달한다. 인터셉터는 해당 과정 전후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다.

3. 필터(Filter)


스프링 프레임워크에서 필터(Filter)는 웹 애플리케이션의 HTTP 요청과 응답을 가로채어 처리하는 컴포넌트로, 요청이 서블릿 컨테이너로 전달되기 전에 사전 처리(pre-processing) 또는 후처리(post-processing)를 수행하는 역할을 한다. 필터는 일종의 서블릿(Servlet)으로, 요청을 처리하기 전에 필요한 작업을 수행하거나, 응답을 처리하기 전에 후처리 작업을 수행할 수 있다. 정리하면 다음과 같다.

  • 서블릿 컨테이너에서 관리된다.
  • HTTP 응답의 요청과 응답을 가로채어 처리할 수 있다.
  • 필터는 여러 개의 필터를 체인 형태로 연결하여 사용할 수 있다. 체인의 시작과 끝에는 요청과 응답을 서블릿 컨테이너로 전달하거나 반환할 수 있다.
  • 필터는 요청과 응답을 조작할 수 있다. 요청의 파라미터, 헤더, URL 등을 변경하거나, 응답의 상태코드, 헤더 본문 등을 조작할 수 있다.
  • 인증과 권한 체크, 요청의 로깅, 캐싱, XSS 및 CSRF 방어, 인코딩/디코딩 등의 작업을 처리할 수 있다.

4. 인터셉터(Interceptor)


스프링 프레임워크에서 인터셉터(Interceptor)는 웹 애플리케이션의 컨트롤러에 들어오는 요청과 컨트롤러가 응답을 처리하기 전후에 사전 처리(pre-processing) 또는 후처리(post-processing)를 수행하는 컴포넌트로, 스프링 MVC에서 사용되는 기능이다. 인터셉터는 요청과 응답을 가로채어 처리하여, 로직의 재사용성과 중복 코드의 감소, 요청과 응답의 조작 등을 가능하게 한다. 정리하면 다음과 같다.

  • 스프링 컨테이너에서 관리된다.
  • 인터셉터는 컨트롤러와 요청 사이에 위치하여 요청과 응답을 가로채어 처리할 수 있다.
  • 요청의 처리 시점을 다양하게 설정할 수 있다. 사전 처리(PreHandle), 메서드가 실행된 후 처리 (PostHandle), 응답이 클라이언트로 전달된 후 처리(AfterCompletion) 등의 시점에서 인터셉터를 설정할 수 있다.

5. 필터와 인터셉터의 예외처리


인터셉터는 스프링 MVC에서 컨트롤러의 요청 처리 전후에 사전처리 또는 후처리를 수행하는 컴포넌트로 스프링 컨테이너에 관리되기 때문에 스프링의 @ControllerAdvice, @ExceptionHandler 같은 예외처리 매커니즘을 따를 수 있지만, 필터의 경우 스프링 컨테이너가 아닌 서블릿 컨테이너에 관리되기 때문에 스프링의 예외처리 매커니즘을 따를 수 없다. 따라서 Response 객체를 조작하여 예외처리를 해주어야 한다.

(인터셉터의 경우 스프링 예외처리 매커니즘에 따라 @ControllerAdvice, @ExceptionHandler를 사용하여 예외처리 할 수 있다.)

(필터의 경우 Response 객체를 조작하여 예외처리를 할 수 있다.)

Reference

https://developer-ping9.tistory.com/154
https://mangkyu.tistory.com/173

profile
오늘의 학습을 기록하는 공간

0개의 댓글