
Spring Boot로 웹 백엔드 개발을 공부하면서 가장 먼저 마주한 기능 중 하나는 Filter다.
단순한 전/후처리 정도로만 여겨졌던 Filter가 사실은 Spring Security 같은 보안 프레임워크의 핵심 기반이라는 것을 알게 되면서 생각이 많이 확장되었다.
이 글에서는 내가 이해한 내용을 정리해본다.
javax.servlet.Filter는 Spring이 만든 기능이 아니라,
Java Servlet 스펙에 정의된 표준 인터페이스이다.
즉, 톰캣, 제티 같은 서블릿 컨테이너에서 요청(Request)과 응답(Response)을 가로채서 처리할 수 있도록 만들어진 구조다.
Spring Boot에서는 spring-boot-starter-web 의존성만 추가하면 다음과 같은 기능이 자동 포함된다.
javax.servlet.*)그래서 별도로 Filter를 위한 의존성을 추가하지 않아도, 바로 다음과 같이 사용할 수 있다.
@Component
public class LoggingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("요청이 들어왔습니다");
chain.doFilter(request, response);
System.out.println("응답을 반환합니다");
}
}
Filter는 chain.doFilter()를 기준으로 앞뒤에 코드를 작성하여 요청 전/후를 가로채는 구조로 작동한다.
이는 마치 Controller를 감싸는 중간 인터셉터처럼 동작하며, 공통 처리, 보안 전처리, 로깅 등 다양한 목적으로 활용된다.
Filter는 다음과 같은 상황에서 유용하게 사용된다:
| 사용 목적 | 설명 |
|---|---|
| ✅ 요청 로깅 | 어떤 요청이 들어왔고, 어떤 응답이 나갔는지 기록 |
| ✅ 응답 시간 측정 | 요청이 들어온 시점부터 응답까지 걸린 시간 계산 |
| ✅ JWT 인증 | Authorization 헤더에서 토큰 추출 및 검증 |
| ✅ 공통 인코딩 처리 | 모든 요청에 UTF-8 적용 등 |
| ✅ CORS 처리 | 클라이언트 도메인 접근 허용 헤더 설정 |
| ✅ 헤더 및 파라미터 조작 | 필터 레벨에서 파라미터 변경, 헤더 추가 등 |
Filter는 Controller에 도달하기 전에 작동하므로,
모든 요청에 공통적으로 적용하고 싶은 로직을 담는 데 적합하다.
Spring Security는 결국 Filter 기반 구조를 확장한 보안 프레임워크다.
서블릿의 javax.servlet.Filter를 기반으로 하여,
인증(Authentication), 인가(Authorization) 같은 보안 로직을 수십 개의 필터로 나누어 처리한다.
이 필터들은 내부적으로 FilterChainProxy라는 메인 필터에 의해 연결되어 작동한다.

| 필터 이름 | 역할 |
|---|---|
SecurityContextPersistenceFilter | 세션에서 인증 정보 로드 및 저장 |
UsernamePasswordAuthenticationFilter | 로그인 요청 처리 (form 기반) |
BearerTokenAuthenticationFilter | JWT 토큰 인증 |
ExceptionTranslationFilter | 인증/인가 실패 예외 처리 |
FilterSecurityInterceptor | 권한(ROLE) 체크 수행 |
이 구조는 일반 Filter처럼 chain.doFilter()를 중심으로 감싸는 구조이며,
필요하면 내가 만든 JWT 필터를 addFilterBefore() 등을 통해 끼워 넣을 수도 있다.
javax.servlet.Filter는 Spring이 아닌 Java EE(Jakarta EE)의 표준이다.spring-boot-starter-web만으로 Filter를 바로 사용할 수 있다.chain.doFilter()를 기준으로 요청/응답을 전후 처리한다.결국, Spring Security도 Filter의 확장이다.
기초 개념을 이해하고 직접 Filter를 구현해보면,
Spring Security의 흐름과 인증 처리 로직도 훨씬 명확하게 다가온다.