Spring Boot에서 Filter를 사용해야 하는 이유와 Spring Security의 이해

Sang_WJ·2025년 5월 2일
post-thumbnail

Spring Boot로 웹 백엔드 개발을 공부하면서 가장 먼저 마주한 기능 중 하나는 Filter다.
단순한 전/후처리 정도로만 여겨졌던 Filter가 사실은 Spring Security 같은 보안 프레임워크의 핵심 기반이라는 것을 알게 되면서 생각이 많이 확장되었다.
이 글에서는 내가 이해한 내용을 정리해본다.


☕ Filter는 어디서 왔을까?

javax.servlet.FilterSpring이 만든 기능이 아니라,
Java Servlet 스펙에 정의된 표준 인터페이스이다.
즉, 톰캣, 제티 같은 서블릿 컨테이너에서 요청(Request)과 응답(Response)을 가로채서 처리할 수 있도록 만들어진 구조다.


🚀 Spring Boot에서 Filter를 사용할 수 있는 이유

Spring Boot에서는 spring-boot-starter-web 의존성만 추가하면 다음과 같은 기능이 자동 포함된다.

  • 서블릿 API (javax.servlet.*)
  • 내장 톰캣
  • Spring MVC

그래서 별도로 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를 사용하는 이유

Filter는 다음과 같은 상황에서 유용하게 사용된다:

사용 목적설명
✅ 요청 로깅어떤 요청이 들어왔고, 어떤 응답이 나갔는지 기록
✅ 응답 시간 측정요청이 들어온 시점부터 응답까지 걸린 시간 계산
✅ JWT 인증Authorization 헤더에서 토큰 추출 및 검증
✅ 공통 인코딩 처리모든 요청에 UTF-8 적용 등
✅ CORS 처리클라이언트 도메인 접근 허용 헤더 설정
✅ 헤더 및 파라미터 조작필터 레벨에서 파라미터 변경, 헤더 추가 등

Filter는 Controller에 도달하기 전에 작동하므로,
모든 요청에 공통적으로 적용하고 싶은 로직을 담는 데 적합하다.


🔐 Spring Security는 필터 체인 기반 보안 프레임워크

Spring Security는 결국 Filter 기반 구조를 확장한 보안 프레임워크다.
서블릿의 javax.servlet.Filter를 기반으로 하여,
인증(Authentication), 인가(Authorization) 같은 보안 로직을 수십 개의 필터로 나누어 처리한다.

이 필터들은 내부적으로 FilterChainProxy라는 메인 필터에 의해 연결되어 작동한다.

spring security와 filter

🔗 예시: 주요 Security 필터

필터 이름역할
SecurityContextPersistenceFilter세션에서 인증 정보 로드 및 저장
UsernamePasswordAuthenticationFilter로그인 요청 처리 (form 기반)
BearerTokenAuthenticationFilterJWT 토큰 인증
ExceptionTranslationFilter인증/인가 실패 예외 처리
FilterSecurityInterceptor권한(ROLE) 체크 수행

이 구조는 일반 Filter처럼 chain.doFilter()를 중심으로 감싸는 구조이며,
필요하면 내가 만든 JWT 필터를 addFilterBefore() 등을 통해 끼워 넣을 수도 있다.


🧠 핵심 정리

  • javax.servlet.Filter는 Spring이 아닌 Java EE(Jakarta EE)의 표준이다.
  • Spring Boot에서는 spring-boot-starter-web만으로 Filter를 바로 사용할 수 있다.
  • Filter는 chain.doFilter()를 기준으로 요청/응답을 전후 처리한다.
  • Spring Security는 수십 개의 필터로 구성된 보안 필터 체인을 기반으로 작동한다.
  • Filter를 먼저 이해하면 Spring Security의 구조도 자연스럽게 이해된다.

결국, Spring Security도 Filter의 확장이다.
기초 개념을 이해하고 직접 Filter를 구현해보면,
Spring Security의 흐름과 인증 처리 로직도 훨씬 명확하게 다가온다.

profile
성장의 흔적을 남기는 블로그입니다.

0개의 댓글