JWT(JSON Web Token)는 인증 정보를 담은 토큰입니다. 로그인에 성공하면 서버가 JWT를 발급하고, 이후 클라이언트는 매 요청마다 이 토큰을 보내서 "나 로그인한 사람이야"를 증명합니다.
JWT는 3개의 부분으로 구성되어 있고, 점(.)으로 구분됩니다:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJobdksDAsImV4cCI6MTcwOTY1ODAwM.abc123signatureeee
├── Header ─────────┤├── Payload ────────────────────────────┤├── Signature ─────┤
Header: 토큰 타입(JWT)과 해싱 알고리즘(HS256 등)
{
"alg": "HS256",
"typ": "JWT"
}
Payload: 실제 데이터. 사용자 정보, 만료 시간 등
{
"sub": "hong",
"role": "USER",
"iat": 1709654400,
"exp": 1709658000
}
sub (subject): 사용자 식별자role: 사용자 역할iat (issued at): 발급 시간exp (expiration): 만료 시간Signature: Header + Payload를 비밀키로 서명한 값. 토큰이 위변조되지 않았음을 검증
1. [클라이언트] POST /api/auth/login { username, password }
2. [서버] 비밀번호 확인 → JWT 토큰 생성 → 응답으로 전달
3. [클라이언트] 토큰을 저장 (localStorage 등)
4. [클라이언트] 이후 모든 요청에 헤더로 토큰 첨부
Authorization: Bearer eyJhbG...
5. [서버] 토큰 검증 → 유효하면 요청 처리
세션 방식:
- 서버가 로그인 상태를 메모리에 저장
- 서버가 여러 대면 세션 동기화 필요
- 서버 재시작 시 세션 소실
JWT 방식:
- 서버가 상태를 저장하지 않음 (Stateless)
- 토큰 자체에 정보가 담겨있음
- 서버 확장이 쉬움
- REST API에 적합