반응형
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 |