필터, 인터셉터

김민우·2023년 1월 2일
0

잡동사니

목록 보기
9/22

기존 필터와 인터셉터의 개념이 좀 모호했는데 좀 자세히 정리해보았다.

필터

필터(Filter)는 J2EE 표준 스펙 기능으로 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이므로, 필터는 스프링 범위 밖에서 처리가 되는 것이다. 

즉, 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 되는 것이고(스프링 빈으로 등록은 된다), 디스패처 서블릿 전/후에 처리하는 것이다.

HandlerInterceptor는 특정한 URI 호출을 '가로채는' 역할을 한다고 생각하자. 이를 이용하여 기존 컨트롤러의 로직을 수정하지 않고도, 사전이나 사후 제어가 가능하다.

HandlerInterceptor 메소드의 메소드에는 다음 3가지가 정의 되어있다.

  • preHandle(request, response, handler)
    지정된 컨트롤러의 동작 이전에 수행할 동작 (사전 제어).
  • postHandle(request, response, handler, modelAndView)
    지정된 컨트롤러의 동작 이후에 처리할 동작 (사후 제어).
    Spring MVC의 Dispatcher Servlet이 화면을 처리하기 전에 동작.
  • afterCompletion(request, reponse, handler, exception)
    Dispatcher Servlet의 화면 처리가 완료된 이후 처리할 동작.

그러면 필터와 인터셉터의 차이는 무엇일까?

두 기능 모두 특정 URI에 접근할 때 제어하는 용도로 사용되긴 한다. 두 기능의 가장 큰 차이는 Context(실행 영역)에 있다고 할 수 있다.

필터는 웹 어플리케이션 내에서 동작하기 때문에 Spring Context에 접근하기 어려운 반면 인터셉터의 경우 Spring 영역 내에서 동작하기 때문에, Spring Context에 접근하기 용이하다.

0개의 댓글