1. JWT란?
- JSON Web Token의 약자로, 당사자 간 정보를 안전하게 전송하기 위한 개방형 표준(RFC 7519)
- 주로 인증(Authentication) 에 사용
구조 (Header.Payload.Signature)
| 파트 |
역할 |
| Header |
토큰 타입, 서명 알고리즘 정보 |
| Payload |
실제 데이터(클레임). Base64 인코딩만 되어 있어 민감 정보 포함 금지 |
| Signature |
위변조 방지 서명 |
동작 흐름
로그인 요청 → JWT 발급 → 이후 요청마다 Authorization: Bearer <token> 포함 → 서버 서명 검증
장/단점
- ✅ Stateless, 확장성, 자체 포함
- ❌ 탈취 시 만료 전 무효화 불가, Payload 노출 가능, 토큰 크기 큼
- 💡 Access Token(단기) + Refresh Token(장기) 조합으로 보완
2. JWT vs 다른 인증 방식
주요 인증 방식
| 방식 |
특징 |
| 세션 + 쿠키 |
인증 정보를 서버에 저장, 쿠키는 sessionId만 전달 |
| JWT (Bearer Token) |
인증 정보를 토큰 자체에 포함, 서버 저장 불필요 |
| API Key |
서버 간 통신, 외부 API 연동에 주로 사용 |
| OAuth 2.0 |
제3자 인증 위임 (카카오/구글 로그인 등) |
세션 vs JWT 핵심 차이
|
세션 |
JWT |
| 서버 부하 |
DB 조회 발생 |
서명 검증만 (DB 조회 없음) ✅ |
| 수평 확장 |
세션 공유 문제 ❌ |
어디서든 검증 가능 ✅ |
| 강제 로그아웃 |
즉시 가능 ✅ |
만료 전까지 어려움 ❌ |
| CSRF |
취약 ❌ |
헤더 수동 전송으로 안전 ✅ |
| XSS |
HttpOnly 쿠키로 방어 ✅ |
localStorage 저장 시 취약 ❌ |