Filter와 Interceptor

호돌·2021년 1월 9일
0

BackEnd

목록 보기
4/25

🙋‍♀️필터와 인터셉터

필터와 인터셉터의 비슷한 점은 무엇인가? 그것은 바로 핸드러 메서드가 호출되기 전/후에 HTTP 요청에 접근하여 특수한 작업을 할 수 있다는 것이다. 두 개 이상부터 모든 핸드러 메서드에 걸쳐 중복으로 적용되는 작업이라면, 필터 또는 인터셉터를 활용해서 코드 중복을 없애고, 유지보수가 편한 코드를 작성할 수 있을 것이다.

그래서 차이점은 무엇인가?

필터와 인터셉터의 차이는 바로 작업이 수행되는 시점 그리고 생성되어 존재하는 위치 라고 할 수 있다.

🤪필터(Filter)

  • 필터는 DispatcherServlet 전에 생성되고 위치하므로 요청을 가장 먼저 맞이하게 된다.
  • 모든 요청에 대해 일괄적으로 수행된다.
  • 여러 개의 필터를 둘 수 있고, @Order 어노테이션으로 순서를 지정 할 수 있다.
  • Spring Context 밖에서 정의되기 때문에 Bean들을 사용하는 비지니스 로직과 관련된 작업을 수행할 수 없다.
  • 따라서 대표적으로 인코딩,CORS,XSS,LOG,인증 등 을 구현하는 목적으로 사용한다.
  • Filter 인터페이스를 구현하거나, OncePerRequstFilter 같은 클래스를 상속하여 doFilter()를 구현한다.

🤔인터셉터(Interceptor)

  • 인터셉터는 DispatcherServlet에서 핸드러 매핑을 지나, 컨트롤러로 요청을 전달할 때 중간에 요청을 가로채서 특별한 처리를 해줄 수 있다.
  • 여러 개의 인터셉터를 체이닝하여 사용할 수 있다.
  • 특정 URI 해당하는 요청에만 인터셉터를 거치도록 성정할 수 있다.
  • 스프링 컨텍스트에 정의된 모든 빈 객체에 접근할 수 있다.
  • 대표적으로 로그인(인증)체크, 권한(인가)체크, 프로그램 실행시간 계산작업 로그 확인 등을 할 수 있다.
  • HandlerInterceptor라는 인터페이스를 통해 preHandle,postHandle,afterCompletion 메서드를 구현할 수 있다.

📝결론

필터와 인터셉터는 여러 요청에 일관된 작업을 할 때 코드의 중복을 줄이면서 유용하게 활용할 수 있다. 둘의 가장 큰 차이는 생성되는 위치이고 그 차이가 결국 디테일 적으로 수행할 수 있는 범위가 다르게 만든다.

필터에서는 애플리케이션의 비지니스 로직과 관계없는 작업이 수행되고, 인터셉터에서는 애플리케이션 비지니스 로직과 관계있는 작업이 수행된다.

profile
저도 모르는데요?, 내가 몰라서 적는 글

0개의 댓글