Programming/SpringSecurity
[Security] JWT 기반 인증 vs 세션 기반 인증
OriginMaster
2025. 2. 26. 20:34
반응형
JWT 기반 인증과 세션 기반 인증은 각각 다른 방식으로 사용자의 인증 정보를 관리합니다. 아래 표를 통해 주요 차이점을 정리하고, 각각의 장단점을 설명하겠습니다.
🔹 JWT 기반 인증 vs. 세션 기반 인증 비교표
비교 항목 JWT 기반 인증 세션 기반 인증
인증 방식 | 토큰 (JWT) 기반 인증 | 서버 세션 저장 방식 |
저장 위치 | 클라이언트 (로컬 스토리지, 쿠키, 메모리) | 서버 메모리 또는 DB |
상태(State) | Stateless (무상태) | Stateful (유상태) |
서버 부담 | 낮음 (세션 저장 필요 없음) | 높음 (서버에 세션 저장 필요) |
보안 방식 | 서명된 토큰 검증 (HS256, RS256 등) | 세션 ID 검증 (세션 쿠키) |
토큰 크기 | 비교적 큼 (Base64 인코딩된 JSON) | 작음 (세션 ID만 저장) |
확장성 (Scalability) | 높음 (서버 간 공유 필요 없음) | 낮음 (서버 간 세션 공유 필요) |
사용자 로그아웃 | 클라이언트에서 토큰 삭제 필요 | 서버에서 세션 삭제 가능 |
인증 유지 방식 | 토큰이 만료되기 전까지 유효 | 서버가 세션을 유지하는 동안 유효 |
만료 후 갱신 방식 | 리프레시 토큰 필요 | 세션 연장 가능 |
보안 취약점 | 탈취 시 토큰이 변조될 위험 | 세션 하이재킹 위험 |
🔹 세션 기반 인증 (Stateful Authentication)
✅ 동작 방식
- 사용자가 로그인하면 세션 ID를 생성하고, 서버에 저장.
- 클라이언트는 세션 ID를 쿠키에 저장하고, 이후 요청마다 포함하여 보냄.
- 서버는 받은 세션 ID를 저장된 값과 비교하여 사용자를 인증.
🔹 장점
✔ 서버에서 세션을 직접 관리할 수 있어 보안적으로 우수함.
✔ 세션 만료/로그아웃을 즉시 반영 가능.
✔ CSRF 보호 기능을 기본적으로 제공함.
🔻 단점
❌ 서버 메모리를 소비하기 때문에 많은 사용자가 접속하면 부담 증가.
❌ 서버 확장(Scaling)이 어려움 → 여러 서버가 세션을 공유해야 함.
❌ 클라이언트가 쿠키를 차단하면 인증 불가능.
🔹 JWT 기반 인증 (Stateless Authentication)
✅ 동작 방식
- 사용자가 로그인하면 JWT 토큰을 생성하여 클라이언트에 반환.
- 클라이언트는 JWT를 **헤더(Authorization: Bearer <토큰>)**에 포함하여 요청을 보냄.
- 서버는 토큰을 검증하여 사용자 인증.
🔹 장점
✔ 서버에 인증 상태를 저장하지 않아 스케일링(확장성)이 뛰어남.
✔ 로드밸런싱 환경에서도 문제없이 사용 가능 (각 서버가 인증 정보를 공유할 필요 없음).
✔ 서명이 포함되어 있어 변조 방지 기능이 있음.
🔻 단점
❌ 토큰이 탈취되면 만료 전까지 막을 방법이 없음.
❌ 로그아웃 시 서버에서 강제 만료 불가능 (리프레시 토큰을 써야 함).
❌ JWT 토큰 크기가 커서 네트워크 부하가 증가할 수 있음.
🔹 JWT vs. 세션, 어떤 걸 선택해야 할까?
✅ JWT를 선택하는 경우
- REST API 서버 (Stateless 방식)
- 확장성이 필요한 대규모 서비스
- 마이크로서비스 아키텍처 (MSA)
✅ 세션 기반 인증을 선택하는 경우
- 일반적인 웹 애플리케이션 (Spring Security + Form Login)
- 보안이 중요한 내부 시스템 (은행, 기업 내부 시스템)
- CSRF 보호가 필요한 경우
🚀 결론
- API 서버(특히 모바일 앱, MSA 환경)는 JWT 기반 인증이 유리함.
- 일반적인 웹 애플리케이션(브라우저 중심)은 세션 기반 인증이 더 적합함.
🔥 즉, 선택은 프로젝트의 특성에 따라 달라집니다! 🔥
반응형