- Spring Security 에서 제공하는 세션 생성 정책(SessionCreationPolicy) 의 개념
- ALWAYS, IF_REQUIRED, NEVER, STATELESS 의 차이 명확하게 구분하기
- 실제 비즈니스 요구사항에 맞추어 적절한 정책 선택법
- 코드 설정법, 실무에서 자주 발생하는 문제
- 세션 관리 정책과 REST API 설계의 관계
세션 생성 정책(SessionCreationPolicy)
Spring Security 는 인증 / 인가를 처리할 때 세션을 어떻게 생성하고 활용할 지 결정할 수 있는
SessionCreationPolicy 를 제공하고 있다
1. 기본 개념
- HTTP는 본질적으로 무상태성(Stateless) 프로토콜이다
- 하지만 로그인 유지, 사용자 상태 저장 등의 이유로 서버는 세션을 활용한다
- Spring Security는 기본적으로 필요할때만 세션을 생성하여 활용함
2. SessionCreationPolicy 의 종류
| 정책 | 설명 | 사용 예시 |
| ALWAYS | 요청이 올때마다 세션을 항상 생성한다 | 테스트 환경 세션 기반 상태 추적이 필수인 시스템 |
| IF_REQUIRED | 필요한 경우에만 세션을 생성한다 (Security 기본값임) |
일반적인 웹 애플리케이션 |
| NEVER | Spring Security는 세션을 생성하지 않지만, 기존 세션이 있다면 사용한다 |
외부 시스템이 세션을 관리하는 경우 |
| STATELESS | 세션을 전혀 생성하지 않으며, 기존 세션도 사용하지 않는다 |
REST API, JWT 기반 인증 (세션이 필요없음) |
3. 코드 설정 예시
Spring Security에서는 HttpSecurity 객체를 통해 설정한다
import org.springframework.security.config.http.SessionCreationPolicy;
@Bean
@Order(1)
public SecurityFilterChain meFilterChain(HttpSecurity http) throws Exception {
http
//세션 생성 정책 설정하기
.sessionManagement(session -> session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)); // REST API, JWT 일때
return http.build();
}
4. 정책 선택 기준
- 세션 기반 웹 애플리케이션 : IF_REQUIRED (로그인시 세션 생성, 일반적으로 가장 많이 사용함)
- API 서버(JWT, OAuth2 등 토큰 기반 인증) : STATELESS (모든 요청을 독립적으로 처리함)
- 외부 세션 관리 시스템 존재 : NEVER
- 테스트 환경, 강제 세션 추적 필요 : ALWAYS
팁
- STATELESS 정책에서는 반드시 JWT, API key 등 별도의 인증 수단을 도입해야한다
- 만에 하나라도 세션 기반 인증과 토큰 기반 인증을 혼합하는 경우, 정책을 신중히 선택해야한다
- 로드 밸런서나 서버 확장 환경에서는 세션 클러스터링 문제를 고려해야함
- 보안 로그 추적이 필요한 경우 ALWAYS는 과도하게 세션을 생성할 수 있으므로 피해야한다고 함
정리
| 구분 | 특징 | 주요 사용 사례 |
| ALWAYS | 무조건 세션을 생성함 | 세션 추적 강제 필요 |
| IF_REQUIRED | 필요할때 세션을 생성함(기본값) | 전통적 웹 애플리케이션 |
| NEVER | 세션 생성은 하지 않지만 기존 세션은 사용 | 외부 세션 관리 시스템 |
| STATELESS | 세션을 전혀 사용하지 않음 | REST API, JWT 기반 인증 |
'Spring Boot > Security 쿠키,세션 기반 인증,인가' 카테고리의 다른 글
| 세션 관리 설정과 커스터마이징 : 세션 만료 후 처리 전략 (0) | 2026.05.08 |
|---|---|
| 세션 관리 설정과 커스터마이징 : 세션 타임아웃 설정 (0) | 2026.05.08 |
| 세션 관리 핵심 컴포넌트 : 세션 이벤트와 리스너 (0) | 2026.05.07 |
| 세션 관리 핵심 컴포넌트 : 세션 관리 필터 (0) | 2026.05.06 |
| 세션 관리 핵심 컴포넌트 : SecurityContextHolder 와 SecurityContext (0) | 2026.05.06 |