JWT는 클라이언트와 서버 간에 인증 정보를 안전하게 전달하기 위한 토큰 기반의 인증 방식입니다.
주로 로그인 이후 인증 상태를 유지하는 용도로 사용되며, 자체적으로 정보를 담고 있어 별도의 저장소없이 검증이 가능합니다.
항목 | 세션 기반 인증 | JWT 기반 인증 |
---|---|---|
저장 위치 | 서버 메모리/DB 세션 저장 | 클라이언트(주로 브라우저)에 JWT 저장 |
확장성 | 서버에 저장공간 필요 → 확장 어려움 | 무상태(stateless) → 수평 확장 용이 |
처리 방식 | 서버가 세션 ID로 사용자 상태 확인 | 서버가 JWT 자체를 검증해 사용자 확인 |
보안 | 세션 탈취 위험 | 토큰 탈취 시 유출 위험, 짧은 만료 시간으로 대응 가능 |
✔️ 즉, JWT는 서버가 상태를 저장하지 않기 때문에 확장성과 유지보수 측면에서 유리합니다. 클라우드 기반/ 마이크로서비스 환경에서 특히 강력한 인증 방식으로 주목받고 있습니다.
JWT는 세 부분으로 구성되어 있으며, 각 부분은 .
으로 구분됩니다.
xxxxx.yyyyy.zzzzz
(header).(payload).(signature)
{
"alg": "HS256",
"typ": "JWT"
}
alg
: 서명 알고리즘 (예: HMAC SHA256, RS256 등)typ
: 토큰의 타입 (대부분 JWT){
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
iss
(issuer), exp
(만료 시간), sub
(subject), iat
(issued at)HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
+
→ -
, /
→ _
, 패딩 문자 =
제거📌 Base64는 단순한 인코딩이지 암호화가 아님 → 누구든 디코딩 가능
→ 중요한 정보는 절대 payload에 담지 말 것!