🔑 세션 기반 인증 vs 토큰 기반 인증, 뭐가 다를까?
웹 서비스에서 사용자를 인증하는 방식은 크게 두 가지로 나눌 수 있습니다.
바로 세션 기반 인증과 토큰 기반 인증(JWT 등) 입니다.
두 방식 모두 로그인 후 사용자의 인증 상태를 유지하지만,
저장 위치와 처리 방식이 다르다는 점이 핵심 차이입니다.
1️⃣ 세션 기반 인증
서버에 사용자 상태(Session)를 저장하고, 클라이언트는 세션 ID만 쿠키로 보관하는 방식
- 로그인 시 서버에서 세션 생성
- 브라우저는
sessionId를 쿠키로 저장
- 요청마다 세션 ID를 서버에 전달 → 서버가 세션 상태 확인
특징
- 서버 메모리에 세션 저장
- 보안성 상대적으로 높음 (서버 관리)
- 확장성(Scale-out)에는 불리
2️⃣ 토큰 기반 인증 (JWT)
서버가 인증 후 토큰(JWT)을 발급하고, 클라이언트가 토큰 자체를 보관·전송하는 방식
- 로그인 시 JWT 발급 (서명 포함)
- 클라이언트는 토큰을 저장 (LocalStorage/쿠키)
- 요청마다 HTTP 헤더에 토큰을 넣어 전송
- 서버는 토큰 검증만 수행 (별도 저장 필요 없음)
특징
- 서버에 상태 저장 불필요 (Stateless)
- 확장성과 분산 서비스에 유리
- 토큰 탈취 시 위험 → 만료/재발급 관리 필요
3️⃣ 비교 정리
| 구분 | 세션 기반 인증 | 토큰 기반 인증 |
|---|
| 저장 위치 | 서버 | 클라이언트 |
| 확장성 | 불리 | 유리 |
| 보안성 | 세션 관리에 의존 | 토큰 탈취 위험 존재 |
| 사용 예시 | 전통적인 웹 서비스 | 모바일, API, 마이크로서비스 |
🧠 정리
- 세션 기반은 서버 저장 방식, 토큰 기반은 클라이언트 저장 방식
- 세션은 안정적이지만 확장성에 약함
- 토큰은 확장성이 뛰어나지만, 탈취 방지 대책이 필요