Interceptor& Servlet Filter
스프링 프레임워크에서 인터셉터(Interceptor)와 서블릿 필터(Servlet Filter)는 요청을 가로채어 전/후 처리를 할 수 있는 메커니즘을 제공한다. 이 두 기능은 유사하게 보일 수 있지만, 적용되는 범위와 활용 방식에서 차이가 있다.
서블릿 필터(Servlet Filter)
서블릿 필터는 서블릿 명세에 정의된 컴포넌트로, 서블릿 컨테이너 레벨에서 동작한다. 모든 요청과 응답에 대해 전처리와 후처리를 할 수 있으며, 체인 형태로 여러 필터를 연결할 수 있다. 서블릿 필터는 일반적으로 인코딩 변환, 로깅 및 인증과 같은 공통적인 작업을 처리하는 데 사용된다.
- 적용 범위: 서블릿 필터는 DispatcherServlet에 도달하기 전의 요청과 응답에 대해 동작한다. 따라서 스프링 컨텍스트 외부에서 발생하는 모든 웹 요청에 대해 처리할 수 있다.
- 사용 예시: 요청 로깅, 보안 검사, 요청 데이터의 인코딩 설정 등
인터셉터(Interceptor)
인터셉터는 스프링 MVC에서 제공하는 기능으로, DispatcherServlet이 컨트롤러를 호출하기 전후 및 완료 후에 추가적인 작업을 수행할 수 있도록 한다. 인터셉터는 AOP(Aspect-Oriented Programming)의 개념을 활용하여 특정 로직을 모듈화하는 데 유용하며, 스프링 컨텍스트 내의 빈(bean)에 접근할 수 있다는 장점이 있다.
- 적용 범위: 인터셉터는 스프링의 DispatcherServlet이 처리하는 컨트롤러 메서드에 대해서만 동작한다. 스프링 MVC 컨텍스트 내부에서 작동하므로, 스프링 빈과의 통합이 필요한 경우 유리하다.
- 사용 예시: 컨트롤러 실행 전/후의 로깅, 인증 체크, 사용자 세션 검사 등
차이점 요약
- 동작 범위: 서블릿 필터는 웹 애플리케이션 전체에 걸쳐 요청과 응답을 처리하며, 스프링 컨텍스트에 독립적으로 동작한다. 반면, 인터셉터는 스프링 MVC의 컨텍스트 내에서 동작하며, 주로 컨트롤러의 요청을 가로채는 데 사용된다.
- 접근성: 인터셉터는 스프링의 의존성 주입과 같은 기능을 활용할 수 있어 스프링 빈에 쉽게 접근할 수 있다. 서블릿 필터는 이러한 스프링 컨텍스트의 기능을 직접적으로 사용할 수 없다.
구성 및 관리: 인터셉터는 스프링의 설정을 통해 관리되며, 스프링의 다른 컴포넌트와 일관된 방식으로 구성할 수 있다. 서블릿 필터는 서블릿 컨테이너에 의해 관리되며, web.xml 파일이나 서블릿 3.0 이상의 @WebFilter 어노테이션을 통해 구성한다.
이러한 차이점을 이해하고 적절한 상황에 맞게 필터와 인터셉터를 사용하는 것이 중요하다. 일반적으로, 스프링 컨텍스트 내에서의 세밀한 처리가 필요한 경우 인터셉터를, 애플리케이션 전반에 걸친 요청과 응답을 관리해야 하는 경우 서블릿 필터를 사용한다.