[Spring Boot] Filter와 Interceptor

끝으로 ㅣ 2025. 2. 2. 21:14

Filter와 Interceptor는 비슷한 역할을 수행하지만 동작하는 위치와 실행 순서가 다르다

Filter는 HTTP 요청의 전반적인 부분을 처리하는데 사용되고, Interceptor는 컨트롤러 실행 전후의 로직을 처리하는데 사용한다.

1. Filter

- Filter는 Servlet 기반의 웹 애플리케이션에서 HTTP 요청과 응답을 가로채고, 필터 체인을 통해 처리하는 기능을 제공

[주요 특징]

  • Servlet 컨테이너에서 동작하며, HTTP 요청과 응답의 전후로 실행
  • 요청의 가공, 인증, 권한 부여, 로깅 등의 작업을 수행
  • javax.servlet.Filter 인터페이스를 구현하여 생성되며, doFilter() 메서드를 통해 요청과 응답을 가로채어 처리
  • Spring Boot에서는 @Component 또는 @Configuration을 이용하여 Filter 등록

 

2. Interceptor

- Interceptor는 Spring Framework의 핸들러 실행 전후에 처리를 삽입하는 기능을 제공

[주요 특징]

  • Spring MVC의 요청 처리 과정에서 컨트롤러의 메서드 호출 전후로 실행
  • 요청의 가공, 인증, 권한 부여, 로깅 등의 작업을 수행
  • HandlerInterceptor 인터페이스를 구현하여 생성되며, preHandle(), postHandle(), afterCompletion() 등의 메서드를 통해 요청을 가로채어 처리
  • Spring Boot에서는 WebMvcConfigurer를 구현한 클래스에서 addInterceptors() 메서드를 오버라이딩하여 등록

 

3. Filter와 Interceptor의 차이

구분 Filter Interceptor
실행 위치 Servlet 컨테이너에서 동작 Spring MVC에서 동작
실행 시점 DispatcherServlet 이전 DispatcherServlet 이후
주 사용 목적 요청의 전처리, 인증, 로깅, 인코딩 처리 컨트롤러의 실행 전후 로직 처리
인터페이스 javax.servlet.Filter HandlerInterceptor
등록 방식 @Component 또는 @Configuration WebMvcConfigurer의 addInterceptors()

 

4. 실행 순서

1. Filter가 먼저 실행되어 요청을 가공하거나 전처리

2. DispatcherServlet이 요청을 받아 처리

3. Interceptor가 실행되어 컨트롤러 실행 전후의 추가적인 로직 수행

4. 컨트롤러의 응답이 처리된 후 Filter가 응답을 가공

 

사용 예시

1. Filter 구현 예제

@Component
public class CustomFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("Filter 실행 중");
        chain.doFilter(request, response);
    }
}

 

2. Interceptor 구현 예제

// Custom 인터셉터 구현
@Component
public class CustomInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("Interceptor 실행 중");
        return true;
    }
}

// WebConfig에 인터셉터 등록
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private CustomInterceptor customInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(customInterceptor);
    }
}

 

여기까지 Filter와 Interceptor의 차이를 알아보았다.

'Spring Boot' 카테고리의 다른 글

[Spring Boot] Spring AOP  (0) 2025.02.07
[Spring Boot] Redisson 분산 락  (0) 2024.06.09
[Spring Boot] OTP 2차 인증  (0) 2024.04.30