공통 업무에 관련된 코드를 각 페이지마다 작성한다면 중복 코드가 많아지고 프로젝트 규모가 커질수록 유지 보수가 어려워진다.
그래서 Spring Framework에서는 다음과 같은 기능들을 제공한다.
- Filter (필터)
- Interceptor (인터셉터)
- AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)
위의 세 가지 기능은 모두 특정 작업을 실행하기 전에 선처리하거나 실행한 후에 후처리 하는 데 사용된다.
이번 글에서는 필터와 인터셉터가 무엇인지 그리고 그 차이점에 대해 알아보자.
필터란?
필터는 클라이언트의 요청과 응답을 거르는 역할을 한다.
DispatcherServlet에 요청이 전달되기 전에 실행되며 URL 패턴에 맞는 모든 요청에 대해 부가 작업을 처리할 수 있는 기능을 제공한다. 필터는 서블릿 컨테이너(예: 톰캣)에 의해 관리되며 스프링 컨텍스트의 범위를 벗어나 작동한다.
그러나 스프링 부트에서는 필터를 스프링 빈으로 등록하여 관리할 수도 있다.
필터의 메서드 종류
필터를 사용하려면 javax.servlet의 Filter 인터페이스를 구현해야 하며 다음과 같은 메서드를 가진다.

init(FilterConfig filterConfig)
- 필터 객체를 초기화하는 메서드, 웹 컨테이너가 필터를 생성한 후 딱 한 번 호출된다.
doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- 필터의 핵심 메서드로 각 요청/응답에 대해 실행된다.
- FilterChain의 doFilter()를 호출하여 다음 필터나 서블릿으로 요청을 전달한다.
- 이 메서드 내에서 요청이나 응답 객체를 조작하거나 필요에 따라 새로운 객체로 래핑 할 수 있다.
destroy()
- 필터 객체가 제거될 때 호출되며 자원을 해제하는 데 사용된다.
인터셉터(Interceptor)란?
인터셉터는 스프링 MVC에서 DispatcherServlet과 컨트롤러 사이에서 동작하며 컨트롤러에 대한 요청을 가로채어 전처리 및 후처리를 수행한다.
인터셉터는 스프링 컨텍스트 내에서 관리되며 핸들러(컨트롤러) 실행 체인에 포함되어 동작한다.
인터셉터(Interceptor)의 메서드 종류
인터셉터를 사용하려면 org.springframework.web.servlet의 HandlerInterceptor 인터페이스를 구현해야 하며 다음과 같은 메서드를 가진다.

preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
- 컨트롤러가 호출되기 전에 실행된다.
- 반환값이 true이면 다음 인터셉터나 컨트롤러가 실행되며 false이면 요청 처리가 중단된다.
- 이 메서드에서 요청 정보를 가공하거나 인증 검사를 수행할 수 있다.
postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
- 컨트롤러가 실행된 후 뷰를 렌더링 하기 전에 실행된다.
- 컨트롤러에서 반환한 ModelAndView 객체를 조작할 수 있다.
- 최근에는 RESTful API의 증가로 자주 사용되지 않을 수 있다.
afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
- 뷰 렌더링까지 완료된 후에 실행된다.
- 요청 처리 중 사용한 자원을 해제하거나 예외 로그를 남기는 등의 작업을 수행할 수 있다.
필터, 인터셉터 정리
필터와 인터셉터는 모두 비즈니스 로직과 분리하여 공통적인 요구사항(보안, 인증, 로깅 등)을 처리하는 데 사용된다.
필터 | 인터셉터 |
|
|
|
|
|
|
필터 "구현 -> 등록"
인터셉터 "구현 -> 등록"
출처
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런
김영한 | 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습
www.inflearn.com
'Dev > Spring Framework' 카테고리의 다른 글
프레임워크와 라이브러리의 차이 (0) | 2024.12.06 |
---|---|
『MVC』 Bean Validation (0) | 2024.12.03 |
『Spring MVC』 메시지, 국제화 (0) | 2024.11.26 |
『Spring Boot』 Spring Boot Annotation 정리 (1) | 2024.11.25 |
『Spring Core』 Bean Scopes (0) | 2024.11.19 |