WEB

Filter 와 Interceptor의 차이란?

긍.응.성 2020. 4. 12. 17:53
반응형

Filter와 Interceptor의 차이에 대해 찾아보고 공부하면서 작성한 글입니다. 내용 중 잘못된 내용이 있다면 짚어주세요~

 

Filter

Filter는 자원에 대한 요청, 자원에 대한 응답에 대하여 필터링을 수행하는 객체이다.

init(), destroy()를 이용해 생성과 소멸 시 필요한 행동을 취할 수 있으며, doFilter() 메서드를 통해 요청과 응답을 다음 루틴으로 전송한다.

Tomcat javax.servlet 패키지에 구현되어 있으며 web.xml에서 Web Application에 등록한다 (당연히 Tomcat이 제공하는 클래스니까!).

등록방법

  • <filter>

    • <filter-name>: 등록할 필터의 이름을 지정한다
    • <filter-class>: 등록한 필터 클래스를 지정한다
  • <filter-mapping>

    • <filter-name>: url과 매핑 시키고 싶은 필터의 이름을 지정한다. 이때 필터의 이름은 filter태그에서 지정한 이름을 입력한다.
    • <url-pattern>: 매핑시키고싶은 url을 지정한다.

 

Interceptor

Interceptor는 Controller에 들어오는 요청 HttpRequest와 응답 HttpResponse를 가로채는 역할을 하는 객체이다.

Handler를 실행하기 전 (preHandle()) 후 (postHandle()), view를 렌더링 한 후(afterCompletion()) 실행할 수 있다는것이 장점이다.

Interceptor가 작업을 처리 중 Exception이 발생한다면 @ControllerAdvice 어노테이션을 통해 예외처리를 해줄 수 있다.

 

diff between filter and interceptor

Filter와 Interceptor의 차이점

1. 호출시점

  • Filter: DispatcherServlet 실행 전
  • Interceptor: DispatcherServlet 실행 후

2. 설정 위치

  • Filter: web.xml에 등록
  • Interceptor: ApplicationContext에 등록

실제 적용에서의 차이점

스프링 HandlerInterceptor documentation에서는 Filter를 더 강력한 도구로 표현하고 있다.

Filter는 request와 response를 교체시켜 제공할 수 있기 때문이고, 실제로 자주 사용된다고 한다. 쓰임에 대해서는 Filter와 같은 경우 Request content나 View Content에 적합하다. 예를 들어 multipart form이나 GZIP 압축 지정에 사용된다. 필터마다 특정 content-type에 매핑시켜 필요에 맞게 자주 사용한다.

Interceptor는 들어온 요청에 대해 공통 핸들러 또는 권한을 체크하는데 정제하여 사용하는 것이 좋다. 또한 View를 렌더링 하기 전후로 작업을 할당할 수 있다는 것이 장점이다. 권한에 따라 다른 view를 렌더링 해야 하는 경우에 말이다.


참고자료

반응형