본문 바로가기
Backend/보안

Spring Security - 요청 흐름: 필터 체인 중심의 구조 분석

by 개발자-제이 2025. 4. 8.
반응형

 

1. Spring Security 없이 요청 흐름

Spring Security가 적용되지 않은 순수한 Spring Web MVC 환경에서는 다음과 같은 요청 흐름이 이루어진다.

  1. 클라이언트가 HTTP 요청을 보낸다.
  2. 해당 요청은 WAS(Web Application Server, 예: Tomcat)의 서블릿 필터 체인을 거친다.
  3. 필터를 통과한 요청은 Spring MVC의 핵심 진입점인 DispatcherServlet에 전달된다.
  4. 이후 요청에 매핑된 컨트롤러가 호출되어 비즈니스 로직이 수행된다.

이와 같은 구조는 보안 처리 없이 가장 기본적인 요청 흐름이다. 그러나 이 방식은 인증이나 인가(Authorization) 기능을 내장하고 있지 않기 때문에, 보안이 필요한 서비스에는 적합하지 않다.

 

2. Spring Security가 적용되면?

Spring Security 의존성을 프로젝트에 추가하는 순간, 위의 기본 요청 흐름은 근본적으로 변화하게 된다.

스프링은 내부적으로 여러 보안 필터를 자동으로 등록하며, 요청이 컨트롤러에 도달하기 전에 보안 검사를 수행하도록 한다.

이 과정을 통해 사용자 인증, CSRF 보호, 세션 관리, 권한 체크 등 다양한 보안 기능이 수행된다. Spring Security는 서블릿 필터의 구조를 활용하여, 요청을 사전에 가로채고 필요한 보안 처리를 수행한다.

 

3. 요청 처리 흐름 재정리

Spring Security가 적용된 경우의 요청 흐름을 도식화하면 다음과 같다.

Spring Security 요청 흐름

위 Spring Security 요청 흐름을 요약하면 아래와 같다. 

Spring Security 요청 흐름 요약

  1. 사용자 요청 → WAS로 진입
  2. WAS 필터 체인에서
    → DelegatingFilterProxy가
    → FilterChainProxy 호출
  3. FilterChainProxy
    → URL에 맞는 SecurityFilterChain 선택
  4. SecurityFilterChain에서
    → 인증, 인가, CSRF 등 보안 필터 실행
  5. 인증 성공 시
    → DispatcherServlet으로 요청 전달
    → Controller에서 비즈니스 로직 처리

이 중 SecurityFilterChain 내부에는 수많은 필터가 존재하며, 각 필터는 인증(Authentication), 인가(Authorization), 예외 처리 등 서로 다른 책임을 가진 로직이 포함된다. 

또한, SecurityFilterChain도 정의에 따라 여러개가 존재할 수 있다.

 

4. 주요 구성요소 및 용어 설명

용어 설명
DelegatingFilterProxy WAS에 등록되는 실제 서블릿 필터로, Spring ApplicationContext에서 관리하는 빈에게 요청을 위임
FilterChainProxy DelegatingFilterProxy가 위임한 대상이며, 실제 SecurityFilterChain을 보유하고 필터 체인을 실행
SecurityFilterChain 특정 요청에 대해 적용될 여러 시큐리티 필터들의 모음 (CSRF, 인증, 인가, 세션 관리 등 포함)

이러한 구조는 필터 기반 아키텍처를 통해 확장성과 보안성을 동시에 확보하는 데 중점을 둔다.

 

5. 부가 설명: 시큐리티 필터란?

Spring Security의 필터는 다음과 같은 책임을 가지고 순차적으로 작동한다

  • UsernamePasswordAuthenticationFilter: 로그인 폼 제출 시 인증 처리
  • SecurityContextPersistenceFilter: 인증 정보 저장 및 재사용
  • ExceptionTranslationFilter: 인증 또는 인가 실패 시 예외 처리
  • FilterSecurityInterceptor: 실제 접근 제어 수행 (권한 검사)

이 외에도 CsrfFilter, AnonymousAuthenticationFilter, SessionManagementFilter 등 다양한 필터가 함께 동작한다. 필터의 순서와 우선순위는 매우 중요하며, 잘못된 필터 구성은 보안 취약점을 유발할 수 있다.

 

6. 정리

Spring Security는 서블릿 필터 체인 기반의 구조를 통해 요청을 사전에 감시하고, 인증(Authentication)과 인가(Authorization)를 수행한다.

이러한 구조 덕분에 Controller 레벨에서 직접 보안 로직을 작성할 필요 없이, 설정만으로도 보안 정책을 구현할 수 있다.

핵심 구성요소로는 DelegatingFilterProxyFilterChainProxySecurityFilterChain이 있으며, 각각은 WAS와 Spring Security의 연결, 필터 흐름 제어, 실제 보안 필터 집합이라는 역할을 맡고 있다.

반응형