필터(Filter)란?
HTTP 요청과 응답을 서블릿에 도달하기 전후에 처리하는 데 사용된다. 필터는 주로 인증, 로깅, 요청/응답 변환 등의 목적으로 사용된다.
필터의 특징과 사용 방법
- 서블릿 스펙에 정의: 필터는 서블릿 API에 정의되어 있다.
- 전역적인 처리: 모든 요청에 대해 일관된 처리를 수행한다.
- 순서 지정 가능: 여러 필터를 사용할 때, 그 순서를 지정할 수 있다.
필터 구현 예제
import javax.servlet.*;
import java.io.IOException;
public class CustomFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 요청 처리 전 로직
chain.doFilter(request, response);
// 요청 처리 후 로직
}
}
위 예제에서 CustomFilter 클래스는 Filter 인터페이스를 구현하고 있다. 이 필터는 요청을 처리하기 전후에 특정 로직을 실행할 수 있다.
인터셉터(Interceptor)란?
인터셉터는 컨트롤러가 처리되기 전후 및 뷰가 렌더링된 후에 추가적인 작업을 할 수 있도록 한다. 인터셉터는 주로 인증, 로깅, 데이터 가공 등에 사용된다.
인터셉터의 특징과 사용 방법
- 스프링 MVC에 특화: 스프링 MVC의 컨트롤러 처리 과정에 개입한다.
- 컨트롤러의 동작 전후 처리: 컨트롤러의 실행 전후에 특정 작업을 수행할 수 있다.
- 순서 지정 가능: 여러 인터셉터가 있을 경우, 순서를 지정할 수 있다.
인터셉터 구현 예제
import org.springframework.web.servlet.HandlerInterceptor;
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 컨트롤러 실행 전 로직
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
// 컨트롤러 실행 후 로직
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// 뷰 렌더링 후 로직
}
}
위 예제에서 CustomInterceptor 클래스는 HandlerInterceptor 인터페이스를 구현하고 있다. 이 인터셉터는 컨트롤러의 실행 전, 후 및 뷰 렌더링 후에 특정 로직을 수행한다.
필터와 인터셉터의 주요 차이점
필터와 인터셉터는 비슷한 역할을 수행하지만, 다음과 같은 중요한 차이점이 있다:
- 적용 범위: 필터는 서블릿에 적용되며, 인터셉터는 스프링 MVC에 특화되어 있다.
- 설정 방식: 필터는 서블릿 컨텍스트에서 설정되고, 인터셉터는 스프링의 WebMvcConfigurer를 통해 설정된다.
- 처리 깊이: 인터셉터는 스프링의 컨트롤러 메커니즘에 더 깊숙이 개입한다.
'Java, Spring' 카테고리의 다른 글
| [Spring] js, css를 못찾는 404 에러 해결법 (0) | 2022.01.22 |
|---|---|
| [Spring Boot] Setter를 무분별하게 사용하면 안되는 이유 (0) | 2021.01.21 |
| [Spring Boot] AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍) (0) | 2021.01.21 |
| [Spring Boot] @Component 와 @Bean의 차이 (0) | 2021.01.21 |
| [Spring Boot] IoC(Inversion Of Control)란 무엇인가? : 스프링 부트에서의 IoC의 역할 (0) | 2021.01.21 |