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 |