🔐 Token이란?
- 인증(Authentication)과 인가(Authorization)를 위해 사용되는 디지털 문자열
- 사용자의 신원과 권한을 증명하며, 요청의 유효성을 검증할 수 있게 해 줌
✅ Token을 사용하는 이유
| 이유 | 설명 |
|---|---|
| 🧠 서버 부담 감소 | 인증 상태 정보를 서버가 아닌 클라이언트에 저장 |
| 🌍 다양한 플랫폼 대응 | 웹, 앱 등 다양한 환경에서 인증 처리 가능 |
| 🔁 Stateless 구조 | 서버가 상태를 기억할 필요 없음 → 확장성↑ |
| ✍️ 서명(Signature) 포함 | 위조 여부 검증 가능 (변조 방지) |
🔁 Token 인증 동작 순서

사용자가 로그인 → 서버에서 Token 발급
클라이언트는 Token을 저장하고 요청 시마다 Header에 포함
서버는 Token의 유효성만 검사 → DB 접근 ❌
⚠️ Token의 단점
| 항목 | 설명 |
|---|---|
| 📦 큰 용향 | Header + Payload + Signature → 쿠키/세션보다 큼 |
| 🔓 Payload는 암호화되지 않음 | Base64로 인코딩된 것일 뿐 → 누구나 디코딩 가능 |
| 🕵️ 탈취 시 치명적 | 탈취당한 Token으로 누구나 인증 우회 가능 |
| ⏳ 만료 시간 필요 | 보안 강화를 위해 일반적으로 15~30분 설정 |
🪪 JWT(JSON Web Token)란?
- 인증 정보를 JSON 형태로 담고, 이를 서명(Signature)하여
안전하게 주고받을 수 있도록 만든 Token
✅ JWT의 구조
HEADER.PAYLOAD.SIGNATURE
xxxxx.yyyyy.zzzzz
| 구성 요소 | 설명 |
|---|---|
| 📁 Header | 토큰의 타입(JWT)과 알고리즘(예: HS256) |
| 📦 Payload | 인증 관련 정보(Claims) |
| 🔏 Signature | 서버의 Secret Key로 서명하여 변조 여부 검증 |
1. Header 예시
{
"alg": "HS256",
"typ": "JWT"
}
alg: 해시 알고리즘 (예: HMAC SHA256)typ: 토큰 타입 (JWT)2. Payload 예시 (Claims)
{
"sub": "1234567890",
"name": "Sparta",
"exp": 1682563600
}
> Claims의 종류
| 종류 | 설명 | 예시 |
|---|---|---|
| 🗂️ Registered Claims | 표준 정의된 값 | iss, exp, sub, iat, jti 등 |
| 🌐 Public Claims | 누구나 정의 가능 | 예: name, email |
| 🔒 Private Claims | 특정 시스템 간 정의된 값 | 예: userRole, groupId 등 |
3. Signature 구성
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret
)
→ 서명을 통해 변조 여부 검증
→ 서버가 가진 Secret Key로만 생성 가능
💡 추가 설명 팁
Header와 Payload는 Base64Url 인코딩 → 복호화 가능Signature는 복호화 불가, 서버의 Secret Key로만 검증 가능🔄 Token vs Session 간략 비교
| 항목 | Token (JWT) | Session |
|---|---|---|
| 저장 위치 | 클라이언트(로컬스토리지, 앱 등) | 서버(메모리, DB) |
| Stateless | ✅ (확장성↑) | ❌ (서버 상태 기억 필요) |
| 복호화 가능성 | Payload만 가능 | 없음 |
| 탈취 시 대처 | ❗ 어려움 (만료 기다리거나 블랙리스트 관리 필요) | 세션 삭제로 즉시 무효화 가능 |
| 유효성 검사 | 서명(Signature) 기반 | 세션 ID 기반 (서버 조회) |
🧠 요약 정리
| 항목 | 내용 |
|---|---|
| 🔐 Token | 인증 정보를 담은 문자열, 클라이언트가 보관 |
| 💬 JWT | JSON 형식 + 서명 포함된 Token |
| ⚙️ 구조 | Header.Payload.Signature |
| ✍️ 서명(Signature) | 변조 방지 기능 (서버만 생성 가능) |
| ⏳ 보안 고려 | 만료 시간 설정 필수, Payload에는 민감 정보 X |
| 🔍 서버 확장성 | 뛰어남 (Stateless 구조) |