면접에서 받은 기술 질문이다. 그땐 대답을 못했다.. 똥멍텅구리 녀석.
그래서 알기 위해 적어본다. + JWT 사용을 원할히 하기 위해.
1. 필터 (Filter)
Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가적인 작업을 처리하는 기능이다.
+) Dispatcher Servlet은 뭐냐
dispatch: 보내다
즉, 디스패처 서블릿은 http 프로토콜로 들어오는 모든 요청을 가장 먼자 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러다.
클라이언트로 부터 어떤 요청이 온다!면 Tomcat과 같은 서블릿 컨테이너가 요청을 받는다. 그리고 이 요청을 디스패처 서블릿이 받는다.
암튼 다시 필터로 가서..
Spring container의 관리 대상이 아닌 Tomcat(서블릿 컨테이너)의 관리 대상이다. 디스패처 서블릿 후에도 적용된다.
다음 세 가지 메소드를 implements 해야 한다.
public interface Filter {
public default void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException;
public default void destroy() {}
}
+) 여기서 말하는 FilterChain은 뭔가?
말 그대로 여러 Filter가 모여있는 것, 해당 Filter 뿐만 아니라 여러 Filter를 커스텀할 수 있다.
2. 인터셉터 (Interceptor)
Spring이 제공하는 기술로 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 응답을 참고하거나 가공할 수 있는 기능을 제공한다. Dispatcher Servlet이 controller 호출 전, 요청과 응답을 참조, 가공하는 기능을 가진다.
Dispatcher Servlet은 적절한 컨트롤러를 찾기 위해 핸들러 매핑을 사용한다. 이 결과로 실행 체인이 반환된다. 해당 실행 체인에 인서텝터가 등록 되어 있으면 실행 후, 컨트롤러를 실행한다. (Interceptor가 Controller를 호출하진 않음)
다음 세 가지 메소드를 implements 해야 한다.
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable Exception ex) throws Exception {
}
}
3. 둘의 차이
1. 관리 영역
정리하면, Filter는 웹 컨테이너/서블릿 컨테이너/Tomcat에서 동작하지만, 인터셉터는 스프링 컨텍스트에서 동작한다. 관리 영역에서 온 대표적인 차이는 예외처리이다. Interceptor는 스프링 예외처리가 되지만, Filter는 안된다. (관리 대상이 아니라)
2. Response / Request 객체 조작 여부
필터는 Response / Request를 조작할 수 있지만, Interceptor는 불가능하다. 다른 객체로 바꿔치기가 불가능하다.
4. 둘의 용도
1. 필터
스프링과 무관하게 전역에서 처리하는 작업을 수행한다. 주로 보안 및 인증 작업에 사용된다. 추가로 이미지, 데이터 압축이나 문자열 인코딩 같이 웹 애플리케이션 전반에 사용되는 기능을 구현한다.
2. 인터셉터
Client 요청과 관련한 전역 처리 작업을 수행한다. 컨트롤러에게 넘기기 전 검사가 필요하면 인터셉터가 처리한다. 객체 자체 조작은 불가하다. 하지만 객체 내부 값은 조작 가능하다. 따라서 controller에게 넘겨주기 위한 정보 가공에 용이하다.
추가적인 내용을 적으면,
그렇기에 필터를 사용하는 SpringSecurity는 Spring MVC에 종속적이지 않다. 관리 대상이 아니기 때문에.
5. 후기
나는 내가 아는 사람 중 가~장 게으른 사람이다. 이 게으름을 고치는 경우가 있는데.. 바로 후회다. 늘 소 잃고 외양간을 고친다. 에후.. JWT를 면접 전 미리 봤으면 얼마나 좋았을까!
그래도 이제 물으면 기깔나게 자신있게 대답해야지.. (근데 이러면 안묻더라 ㅎ)
6. 도움 받은 블로그 글
https://mangkyu.tistory.com/173
[Spring] 필터(Filter) vs 인터셉터(Interceptor) 차이 및 용도 - (1)
Spring은 공통적으로 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있도록 많은 기능들을 지원하고 있다. 이번에는 그 중에서 필터(Filter) vs 인터셉터(Interceptor)의 차이에 대해 알아보고자
mangkyu.tistory.com
제 글 이해 안가면 여길 들어가보심이.. 참 친절히 설명 해주셨어요. 짱짱맨.
'개발 끄적끄적' 카테고리의 다른 글
| [Spring] cookie, token, session (0) | 2025.08.08 |
|---|---|
| [Spring] Security - JWT 서버 구축 (4) | 2025.08.06 |
| [Spring] Security - 웹 보안 이해 (1) | 2025.08.03 |
| [Spring] Security - OAuth 2.0 (3) | 2025.08.01 |
| [GitHub Actions + AWS] IAM role 접근 권한에 따른 오류 해결 + GitHub Actions 성공 기준 (1) | 2025.07.15 |