[SPRING] Filter, Interceptor

Spring MVC Request Lifecycle Structure

저번 포스팅에서 Spring MVC 흐름을 알아 보았다.

 

 

[ Request 흐름 ]

그림으로 보면 Servlet Container에 진입하기 전 Web Server (Apache) 에 필터가 존재하여 요청과 응답을 거르는 역할을 한다. 

 

Dispatcher Servlet에 요청이 전달되기 전과 후에 url 패턴에 맞는 모든 요청에 대해 부가 작업을 처리할 수 있는 기능을 제공하고, 스프링 컨테이너에서 관리되는 것이 아닌 웹 컨테이너에 의해 관리되는 특징이 있다. ( Spring Bean 으로 등록 가능하다. )

 

[ Filter ]

 

필터를 사용하기 위해서는 아래 코드와 같은 Filter 인터페이스를 구현하여 사용해야 한다.

public interface Filter { 

    public default void init(FilterConfig filterConfig) throws ServletException {} 
    
    public void doFilter(ServletRequest request, ServletResponse response,
    	FilterChain chain) throws IOException, ServletException;     
    
    public default void destroy() {}
    
}
  • init() 
    • 필터 객체를 초기화 하고 서비스에 추가하기 위한 메소드이다.
  • doFilter()
    • url 패턴에 맞는 HTTP 요청이 Dispatcher Servlet으로 전달되기 전 웹 컨테이너에서 실행된다.
  • destroy()
    • 필터 객체를 제거하고 자원을 반환하기 위한 메소드이다.

 

 

[ 필터와 인터셉터의 차이 ]

인터셉터는 필터와 달리 스프링 컨테이너에서 동작하며, 디스패처 서블릿이 핸들러 매핑을 통해 대응하는 컨트롤러를 매핑할 때 인터셉터가 끼어들어 요청과 응답에 대해 참조, 가공할 수 있는 기능을 제공한다.

 

필터는 요청이나 응답에 대해 객체를 조작할 수 있지만 인터셉터는 boolean 값을 리턴하여 true 일 때 순차적으로 진행하기 때문에 요청이나 응답을 조작할 수 없다.

 

 

[ 참고 자료 ]

 

[Spring] Spring MVC Request Lifecycle

공부하며 작성한 내용이기 때문에 오류 사항이 있을 수 있습니다. 잘못된 부분은 피드백 부탁드립니다.Spring MVC 프로젝트를 개발하기 위해서는 Spring MVC Request Lifecycle을 제대로 알고 가야 할 필요

velog.io

 

'🍃 스프링' 카테고리의 다른 글

[SPRING] IntelliJ 설정  (0) 2023.05.15
[SPRING] 남의 코드 이해하기  (1) 2023.05.07
[SPRING] Dispatcher Servlet  (0) 2022.10.02
[SPRING] JPA, ORM  (0) 2022.09.27
[SPRING] JAVA8  (0) 2022.09.25