이론 정리/java

필터와 인터셉트

철매존 2022. 4. 2. 23:57
728x90

필터와 인터셉트

게시판을 만들 때, 만약 해당 페이지의 가입자만이 사용할 수 있는 '회원게시판' 을 구현하려고 한다면 단순히 해당 게시판에 들어가는 것 뿐만이 아니라 이와 관련된 모든 부분(글쓰기, 읽기, 마이페이지 등등...) 에서 모두 로그인 로직을 검사해야 할 것이다.

그렇다면 이 로직은 어떻게 만들까??

먼저 매번 모든 페이지에 해당 로직을 구현해서 넣어준다면...너무 귀찮고 문제 발생 가능성도 높을 것이다.

이럴 때에 사용하는것이 바로 필터와 인터센터이다.
해당 두 가지 방법을 통해 위의 방법을 구현해 낼 수 있다.

먼저 두 방식의 차이는 아래와 같다.

그림을 통해 알 수 있는사실은

  • Filter은 DispatcherServlet의 앞에서 이루어진다.
  • Interceptor은 DispatcherServlet에서 Handler로 이동하기 전에 HandlerInterceptor로 이루어진다.

필터

위의 차이점에서 보이듯, Filter은 Dispatcher Servlet에 요청이 전달되기 전/후에 해당하는 모든 요청에 관하여 작업을 처리하도록 해준다.

즉 이 필터는 Front(Dispatcher Servlet)의 앞에서 처리되기 때문에 스프링의 범위 밖에서 처리된다는 것이다.

인터셉터

Interceptor은 Spring에서 제공하는 기능으로서, Handler에서 처리하기 전에 스프링 컨텍스트 내에서 동작하게 된다.

해당 인터셉터는 위의 필터와는 달리 스프링 컨텍스트 내애ㅔ서 동작하기 때문에 요청을 받을 때에 동작한다.

결론

인코딩, 보안 등 스프링보다 밖에서 전역적으로 처리해주어야 하는 경우 Filter
클라이언트와의 통신에 필요한 내(인증, 권한, 정보가공) 등의 경우 Interceptor
을 사용해 주도록 한다.