@EnableWebSecurity 어노테이션

2025. 12. 16. 09:25Spring Security

🔎 @EnableWebSecurity 어노테이션

@EnableWebSecurity 어노테이션은 Spring Security를 사용하는 데 있어 가장 기본적이면서도 중요한 설정이며, 단순히 보안을 '활성화'하는 것을 넘어 Spring Security의 핵심 인프라를 웹 애플리케이션에 통합하는 복잡한 작업을 수행합니다.

1. Spring Security Configuration의 로딩 및 활성화

@EnableWebSecurity는 내부적으로 Spring Framework의 @Import 메커니즘을 사용합니다. 이 어노테이션이 붙으면, WebSecurityConfiguration 또는 Spring Boot 환경에서는 @Configuration 클래스에 있는 WebSecurityConfigurerAdapter 대체 로직을 불러옵니다.

  • WebSecurityConfiguration 로딩: 이 클래스는 Spring Security의 핵심 설정을 담고 있으며, 보안 인프라를 구성하는 데 필요한 여러 디폴트 빈(Bean)들을 컨테이너에 등록하는 책임을 가집니다.

2. 핵심 빈(Bean) 및 인프라 구축

@EnableWebSecurity가 활성화하는 구성 클래스들은 Spring Security가 작동하는 데 필수적인 다음과 같은 핵심 컴포넌트들을 컨테이너에 등록합니다.

A. FilterChainProxy 빈 등록 및 통합

가장 핵심적인 역할입니다.

  1. FilterChainProxy 생성: 이 클래스는 javax.servlet.Filter (또는 jakarta.servlet.Filter) 인터페이스를 구현하며, Spring Security의 모든 필터 체인의 진입점(Entry Point) 역할을 합니다.
  2. 서블릿 컨테이너 통합: Spring Boot 또는 서블릿 환경에서 FilterChainProxy가 실제 웹 요청을 가로채도록 등록합니다. 이 과정은 일반적으로 DelegatingFilterProxy를 통해 이루어지거나, Spring Boot의 자동 구성이 직접 FilterChainProxy를 서블릿 필터 체인에 배치함으로써 수행됩니다.
  3. 역할: 모든 HTTP 요청은 이 프록시를 통과하며, 프록시는 요청 URL에 가장 적합한 SecurityFilterChain을 찾아 해당 필터 체인을 실행합니다.

B. AuthenticationManager 구축

AuthenticationManager를 구축하고 컨테이너에 등록할 수 있는 환경을 마련합니다.

  • 빌더 준비: Spring Security는 개발자가 @Bean SecurityFilterChain 메서드 내에서 HttpSecurity를 통해 인증 방식을 정의할 때, 내부적으로 AuthenticationManagerBuilder를 사용하여 최종적인 AuthenticationManager를 구성하도록 준비합니다.
  • 디폴트 프로바이더 연결: 앞서 설명했듯이, 개발자가 UserDetailsService 빈을 등록하면, 이를 사용하는 DaoAuthenticationProviderAuthenticationManager에 연결되도록 인프라를 준비합니다.

C. WebSecurity 설정 활성화

특정 요청을 보안 필터 체인 자체에서 완전히 제외할 수 있는 기능을 제공하는 WebSecurity 객체와 관련된 설정도 준비합니다.

  • 용도: 정적 리소스(CSS, JS, 이미지 파일)에 대한 요청은 보안 검사 없이 빠르게 통과시키고 싶을 때 사용됩니다.

3. 개발자 정의 SecurityFilterChain 빈 수집 및 등록

@EnableWebSecurity는 개발자가 @Bean으로 정의한 하나 또는 여러 개의 SecurityFilterChain 인스턴스를 수집하여 FilterChainProxy에게 전달하는 메커니즘을 활성화합니다.

  • 개발자는 HttpSecurity 빌더를 사용하여 정의한 모든 보안 규칙(인증, 권한 부여, 세션 관리 등)을 담은 SecurityFilterChain을 생성하고, @EnableWebSecurity가 활성화한 인프라가 이 체인들을 FilterChainProxy의 내부 목록에 순서대로 등록합니다.

요약: @EnableWebSecurity가 하는 일

역할 상세 내용
인프라 활성화 Spring Security의 핵심 설정 클래스(WebSecurityConfiguration 등)를 @Import하여 필요한 모든 기본 빈들을 컨테이너에 로딩합니다.
요청 진입점 준비 FilterChainProxy를 생성하고, 이를 서블릿 컨테이너의 필터 체인에 통합하여 모든 HTTP 요청을 가로채도록 합니다.
인증 기반 마련 AuthenticationManager를 구성하고 관리할 수 있는 환경을 준비하며, UserDetailsService와 같은 기본 인증 Provider의 연결을 지원합니다.
규칙 등록 개발자가 정의한 모든 SecurityFilterChain 빈들을 수집하여 FilterChainProxy에게 전달하여 실제 보안 규칙이 요청에 적용되도록 만듭니다.

 

결론적으로, @EnableWebSecurity는 Spring Security의 모든 핵심 기능을 구동하기 위한 '엔진 시동' 버튼이자 '배관 공사'를 담당하는 어노테이션이라고 할 수 있습니다.

'Spring Security' 카테고리의 다른 글

HttpSecurity  (0) 2025.12.16
SecurityFilterChain  (0) 2025.12.16
ch15 Implementing an OAuth 2 resource server  (0) 2024.12.17
ch14 Implementing an OAuth 2 authorization server  (0) 2024.12.16
ch13 What are OAuth 2 and OpenID Connect?  (0) 2024.03.03