IT/개발자 면접

Interceptor 와 Filter 비교

Collin 2025. 11. 17. 19:00
반응형

Spring에서 **인터셉터(Interceptor)**와 **필터(Filter)**는 둘 다 요청/응답 흐름을 가로채서 처리할 수 있는 메커니즘이지만, 동작 시점, 적용 범위, 사용 목적 등에서 차이가 있습니다. 아래에 핵심 차이점을 정리해드릴게요.


🔍 핵심 차이점 요약

항목 Filter Interceptor

소속 서블릿(Servlet) 스펙 (javax.servlet) Spring MVC 프레임워크
실행 시점 DispatcherServlet 이전 DispatcherServlet 이후
적용 대상 모든 요청 (정적 리소스 포함) DispatcherServlet을 거치는 요청 (주로 컨트롤러)
주요 목적 인증, 로깅, 인코딩 설정 등 전역 처리 컨트롤러 전/후 처리, 인증/인가, 로깅 등
구현 방식 javax.servlet.Filter 구현 HandlerInterceptor 구현
등록 방식 @Component 또는 FilterRegistrationBean WebMvcConfigurer의 addInterceptors()
응답 조작 가능 (예: 응답 헤더 수정) 제한적 (주로 요청 전/후 처리)

🧩 실행 흐름 예시

클라이언트 요청
   ↓
[Filter] 실행
   ↓
DispatcherServlet
   ↓
[Interceptor] preHandle()
   ↓
Controller
   ↓
[Interceptor] postHandle()
   ↓
View 렌더링
   ↓
[Interceptor] afterCompletion()
   ↓
응답 반환
   ↓
[Filter] 응답 처리

🛠 사용 예시

✅ Filter 예시 (로그인 여부 확인, CORS 설정 등)

@Component
public class MyFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        // 요청 전 처리
        chain.doFilter(request, response);
        // 응답 후 처리
    }
}

✅ Interceptor 예시 (로그 기록, 권한 체크 등)

public class MyInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        // 컨트롤러 실행 전
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        // 컨트롤러 실행 후
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        // 뷰 렌더링 후
    }
}

🧠 언제 어떤 걸 써야 할까?

  • Filter가 적합한 경우
    • 요청 인코딩 설정
    • XSS/CSRF 방지
    • CORS 처리
    • 로깅, 트래픽 제어 등 전역적인 요청 처리
  • Interceptor가 적합한 경우
    • 로그인/권한 체크
    • 세션/토큰 검증
    • 컨트롤러 전후의 로직 삽입
    • 요청 시간 측정, 사용자 정보 로깅

필요하다면 실제 프로젝트에서 어떻게 적용하는지 예제 코드나 설정 방법도 도와드릴게요. 어떤 상황에서 사용하려는지 알려주시면 더 구체적으로 설명드릴 수 있어요!

728x90
반응형

'IT > 개발자 면접' 카테고리의 다른 글

JWT 장점과 단점  (0) 2025.11.18
Controller 와 RestController 차이  (0) 2025.11.17
Spring MVC Model  (0) 2023.12.17
Spring Security 암호화 방식  (0) 2023.12.16
Redis 란?  (0) 2023.12.15