본문 바로가기
기타 CS

기술 면접 준비 - 필터(Filter) vs 인터셉터(Interceptor)

by 밝지 2023. 2. 27.
728x90
반응형

 

필터(Filter)

 

J
2EE 표준 스펙 기능으로 디스패처 서블릿에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가 작업을 처리할 수 있는 기능을 제공합니다. 필터는 스프링의 가장 앞 단에 존재하는 프론트 컨트롤러로, 필터에서 처리하는 작업들은 '스프링 범위 밖'에서 처리되는 것으로 볼 수 있습니다. 
즉, 필터는 스프링 컨테이너가 아닌 톰캣 같은 웹 컨테이너에 의해 관리가 됩니다. 
 
 
 

필터(Filter)의 메소드

  • init 메소드 - 필터 객체를 초기화하고 서비스에 추가하기 위한 메소드. 웹 턴테이너가 1회 호출하여 초기화하면 이후의 요청을 doFilter가 처리한다. 
  • doFilter 메소드 - url 패턴에 맞는 HTTP 요청이 디스패처 서블릿으로 전달되기 전에 웹 컨테이너에 의해 실행되는 메소드이다. 
  • destroy 메소드 - 사용한 필터 객체를 서비스에서 제거하고 사용하는 자원을 반환하기 위한 메소드.

 
 
 

필터를 주로 사용하는 경우

  • 공통된 보안 및 인증/인가 작업
  • 모든 요청에 대한 로깅 또는 감사
  • 이미지/데이터 압축 및 문자열 인코딩 
  • 스프링과 분리되어야 하는 기능

 
 
 

인터셉터(Interceptor)

 

 
인터셉터는 필터와 달리 스프링이 제공하는 기술로 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 (=디스패처 서블릿과 컨트롤러 사이에서) 요청과 응답을 참조하거나 가공합니다. 즉 웹 컨텍스트에서 동작하는 필터와 달리 인터셉터는 스프링 컨텍스트에서 동작합니다. 
디스패처 서블릿이 핸들러 매핑을 통해 컨트롤러를 찾도록 요청할 때 그 결과로 실행체인(HandlerExecutionChain)을 돌려받습니다. 이 실행 체인은 인터셉터가 등록되어 있으면 순차적으로 인터셉터(들)을 거쳐 컨트롤러가 실행되도록 하고, 인터셉터가 없으면 바로 컨트롤러를 실행합니다. 
 
 
 

인터셉터(Interceptor)의 메소드

  • preHandle 메소드 - 컨트롤러가 호출되기 전에 실행된다. 컨트롤러 이전에 처리해야 하는 전처리 작업, 요청 정보를 가공하거나 추가하는 경우에 사용 가능하다. 
  • postHandle 메소드 - 컨트롤러 호출 이후에 실행된다. 컨트롤러 이후에 처리해야 하는 후처리 작업이 있을 때 사용할 수 있다. 컨트롤러가 반황하는 ModelAndView 타입의 정보가 제공되는데, 최근에는 json 형태로 데이터를 가공하는 RestAPI 기반 @RestController를 만들기때문에 해당 정보는 잘 사용되지 않는다. 컨트롤러 하위에서 작업 중 예외가 발생하면 postHandle은 호추되지 않는다. 
  • afterCompletion 메소드 - 모든 작업이 완료된 후에 실행된다. 사용한 리소스를 반환할 때 사용하기 적합하다. 컨트롤러 하위에서 작업 중 예외가 발생해도 afterCompletion은 반드시 호출된다. 

 
 
 

인터셉터를 주로 사용하는 경우

  • 세부적인 보안 및 인증/인가 공통 작업
  • API 호출에 대한 로깅 
  • Controller로 넘겨주는 정보의 가공

 
 

728x90
반응형