Spring Servlet Filter
Spring Servlet Filter는 Java Servlet API의 일부로, HTTP 요청과 응답을 처리하는 데 사용되는 인터셉터(interceptor)입니다. Filter는 요청이 특정 서블릿이나 리소스에 도달하기 전에 요청을 가로채고 수정하거나, 응답이 클라이언트에게 전송되기 전에 응답을 수정할 수 있습니다. Spring에서는 이러한 필터를 활용하여 다양한 공통 작업을 수행할 수 있습니다. 예를 들어, 인증, 로깅, 압축, 인코딩 등을 처리할 수 있습니다.
Spring Servlet Filter의 개념 및 역할
요청/응답 가로채기:
필터는 클라이언트로부터 서버로 들어오는 HTTP 요청을 가로채어 요청을 처리하거나 수정할 수 있습니다.
서버에서 클라이언트로 나가는 HTTP 응답을 가로채어 응답을 처리하거나 수정할 수 있습니다.
공통 작업 수행:
인증 및 권한 부여: 사용자가 요청하는 리소스에 접근할 권한이 있는지 확인합니다.
로깅 및 감사: 요청 및 응답에 대한 로깅을 수행하여 누가, 언제, 어떤 리소스에 접근했는지 기록합니다.
데이터 압축: 응답 데이터를 압축하여 네트워크 대역폭을 절약합니다.
인코딩 설정: 요청 및 응답의 문자 인코딩을 설정합니다.
Spring에서 Filter 설정하기
Spring Boot에서는 @Component
애너테이션을 사용하여 간단하게 필터를 등록할 수 있습니다. 또한, FilterRegistrationBean
을 사용하여 필터를 프로그래밍 방식으로 등록할 수도 있습니다.
1. @Component
를 사용한 필터 등록
2. FilterRegistrationBean
을 사용한 필터 등록
필터 체인(Filter Chain)
필터 체인은 여러 개의 필터를 순차적으로 실행하는 구조를 의미합니다. 각 필터는 FilterChain
객체를 통해 다음 필터로 요청을 전달할 수 있습니다. 필터는 설정된 순서에 따라 실행되며, 필터 체인 내의 순서는 애플리케이션의 설정에 따라 달라집니다.
필터와 인터셉터의 차이점
필터: 서블릿 스펙에 정의된 것으로, 디스패처 서블릿(DispatcherServlet) 이전에 실행됩니다. 주로 HTTP 요청 및 응답의 전처리와 후처리를 담당합니다.
인터셉터: Spring MVC의 기능으로, 디스패처 서블릿 이후에 실행됩니다. 주로 컨트롤러 메서드 호출 전후에 특정 작업을 수행합니다.
결론
Spring Servlet Filter는 요청과 응답을 가로채어 다양한 공통 작업을 수행할 수 있는 강력한 도구입니다. 이를 통해 인증, 로깅, 데이터 압축 등의 작업을 손쉽게 처리할 수 있으며, 필터 체인을 통해 여러 필터를 순차적으로 적용할 수 있습니다. 필터와 인터셉터를 적절히 활용하면 애플리케이션의 요청 처리 로직을 깔끔하고 모듈화된 방식으로 구성할 수 있습니다.
Last updated