서블릿 필터(Servlet Filter)
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기반으로 바뀌면서 서블릿 필터에 대한 순서 보장이 어렵다.
- 이를 해결하기 위해 서블릿 필터들을 묶은 서블릿 필터를 구현해 해결해야 한다.