서블릿 필터(Servlet Filter)

less than 1 minute read

mvc framework에서 servlet과 같은 역할을 하는 것은 controller

controller에서 반복적으로 발생하는 일이 있을 수 있다 -> 서블릿 내의 중복이 발생한다

인프라 성격의 로직(인프라 로직) : 권한 관리, 성능 측정, 해당 메서드에 대해서 로깅을 처리

컨트롤러 메서드의 성능 측정 방법 : (메서드의 끝나는 시간 - 시작 시간) - 이 기능을 모든 메서드에 적용하면 반복적인 코드들이 중복된다.

서블릿에서는 인프라 로직을 처리하는 servlet filter가 존재함

spring mvc에서는 interceptor가 servlet filter역할을 함

controller에 대한 반복적인 로직 처리는 interceptor(dispatch servlet <-> controller 사이)

servlet filter는 chain방식으로 작동된다

  • 들어올 때 : A -> B -> C의 필터가 적용되었다면
  • 나갈 때 : C -> B -> A의 순서로 필터가 적용 된다

chain.doFilter(request, response);을 구현하지 않으면 Servlet이 호출되지 않는다.

기존 로직에서 어떠한 기능 추가 없이 반복되는 기능을 구현한 것을 AOP라 한다 -> @Transactional이 일종의 AOP이다.

web.xml에서 annotation기반으로 바뀌면서 서블릿 필터에 대한 순서 보장이 어렵다.

  • 이를 해결하기 위해 서블릿 필터들을 묶은 서블릿 필터를 구현해 해결해야 한다.