Pink Spider/Boot에서 filter와 interceptor의 차이

Created Wed, 26 Mar 2025 08:15:45 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
956 Words 4 min

Spring Boot에서 FilterInterceptor는 모두 요청(Request)과 응답(Response)을 가로채서 처리할 수 있게 해주는 기능이지만, 역할, 실행 시점, 적용 범위에서 차이가 있습니다. 아래에서 간단 + 예시와 함께 정리해볼게요.


🔹 1. Filter (서블릿 필터)

✅ 개요

  • Servlet 스펙에 정의된 기능
  • Spring보다 더 하위 레벨
  • DispatcherServlet 이전에 실행됨

✅ 사용 예시

  • 인증, 인코딩, 로깅, XSS 방어
  • 공통 전처리/후처리

✅ 예제

@Component
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("Filter: 요청 전");
        chain.doFilter(request, response);
        System.out.println("Filter: 응답 후");
    }
}

🔹 2. Interceptor (스프링 인터셉터)

✅ 개요

  • Spring MVC의 기능
  • DispatcherServlet 이후에 동작
  • 주로 컨트롤러 진입 전/후에 로직 적용

✅ 사용 예시

  • 로그인 체크
  • 권한 검사
  • 요청 로깅
  • 공통 응답 가공

✅ 예제

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("Interceptor: 컨트롤러 호출 전");
        return true; // false면 컨트롤러로 안 넘어감
    }
}

그리고 등록은 이렇게 해야 해요:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/api/**"); // 적용할 경로 지정
    }
}

📌 핵심 차이 요약

항목 Filter Interceptor
위치 Servlet 레벨 Spring MVC 레벨
실행 시점 DispatcherServlet 이전 DispatcherServlet 이후
대상 모든 요청 (정적 리소스 포함) 컨트롤러로 가는 요청만
설정 방식 Filter 인터페이스 구현 HandlerInterceptor 구현 + 등록
등록 방식 @Component 또는 FilterRegistrationBean WebMvcConfigurer에서 등록
주로 쓰이는 곳 인코딩, 로깅, 보안 인증, 권한, 로깅, 응답 조작

🙋 요약하자면?

  • Filter: 전반적인 요청 흐름 제어 (컨트롤러 이전 단계 포함)
  • Interceptor: 컨트롤러 기준으로 요청 전/후 로직 처리

Spring Boot 웹 요청 처리 흐름에서 Filter, Interceptor, 그리고 Controller가 실행되는 순서를 도식처럼 설명해볼게요.
(요청부터 응답까지 전체 흐름 포함!)


🔁 요청 처리 순서 흐름도

 클라이언트 요청
[Filter] (서블릿 필터)
DispatcherServlet
[Interceptor - preHandle()]
@Controller (핸들러 메서드)
[Interceptor - postHandle()]
View (템플릿 렌더링 or JSON 응답)
[Interceptor - afterCompletion()]
[Filter] (응답 처리)
 클라이언트 응답

🔍 각 단계 설명 요약

단계 설명
Filter 모든 요청과 응답을 가장 먼저 가로챔 (정적 리소스 포함)
DispatcherServlet Spring의 중앙 컨트롤러, 요청을 실제 컨트롤러로 전달
Interceptor - preHandle() 컨트롤러 실행 전 (인증, 권한 확인)
Controller 실제 요청 로직 처리 (예: /api/users)
Interceptor - postHandle() 컨트롤러 실행 후, View 렌더링 전
View 템플릿 or JSON 응답 생성
Interceptor - afterCompletion() 응답 완료 후 (예외 처리, 로깅 등)
Filter (응답 처리) 응답 마무리 (헤더 조작 등 가능)

🎯 예시로 시나리오 설명

예: 사용자가 /api/user를 요청했다고 하면…

  1. Filter → 로그 찍음
  2. Interceptor → 로그인 체크
  3. Controller → 사용자 정보 반환
  4. Interceptor → 응답 데이터 가공
  5. Filter → 응답 로그 찍고 마무리