JWT란? JSON Web Token의 구조와 사용법
JWT는 웹 애플리케이션과 API 인증에 널리 사용됩니다. 그 구조를 이해하고 안전하게 활용하는 방법을 배워봅시다.
JWT란 무엇인가?
JWT(JSON Web Token)는 당사자 간에 정보를 안전하게 전달하기 위한 개방형 표준(RFC 7519)입니다. 디지털 서명이 포함된 JSON 데이터를 컴팩트한 토큰으로 표현합니다.
JWT는 주로 다음과 같은 용도로 사용됩니다:
- 인증(Authentication) — 사용자가 로그인 후 서버가 JWT를 발행하고, 이후 요청에서 토큰을 검증
- 정보 교환(Information Exchange) — 서명으로 데이터 변조를 감지할 수 있어 신뢰할 수 있는 데이터 교환이 가능
- 인가(Authorization) — 사용자의 권한 정보를 토큰에 포함하여 접근 제어에 활용
JWT의 구조
JWT는 점(.)으로 구분된 세 부분으로 구성됩니다:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
1. 헤더(Header)
서명 알고리즘과 토큰 타입을 지정합니다.
{
"alg": "HS256",
"typ": "JWT"
}
2. 페이로드(Payload)
사용자 정보와 메타데이터(클레임)를 포함합니다.
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022,
"exp": 1516242622
}
표준 클레임에는 다음이 포함됩니다:
sub— 주체(Subject)iat— 발행 시각(Issued At)exp— 만료 시각(Expiration Time)iss— 발행자(Issuer)aud— 수신자(Audience)
3. 서명(Signature)
헤더와 페이로드를 결합하고 비밀 키로 서명합니다. 토큰의 변조 감지에 사용됩니다.
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret
)
왜 JWT가 필요한가?
기존의 세션 기반 인증에서는 서버 측에서 세션 정보를 유지해야 했습니다. JWT를 사용하면 다음과 같은 과제를 해결할 수 있습니다:
- 확장성 문제 — 세션 저장소가 불필요하여 서버의 수평 확장이 용이
- 마이크로서비스 간 인증 — 각 서비스가 독립적으로 토큰을 검증 가능
- 모바일 앱 연동 — 쿠키에 의존하지 않는 인증 방식
JWT의 장점
- 무상태 인증 — 서버 측 세션 관리가 불필요하며, 요청마다 토큰만 검증
- 크로스 도메인 지원 — Authorization 헤더로 전송하여 CORS 제약에 강함
- 컴팩트 — URL이나 HTTP 헤더에 포함하기 쉬운 크기로 네트워크 부하가 적음
- 자기 완결형 — 토큰 자체에 사용자 정보를 포함하여 데이터베이스 조회를 줄임
JWT 분석 방법
JWT 분석은 본 사이트의 「JWT Encoder / Decoder」로 간단하게 할 수 있습니다. 모든 처리는 브라우저 내에서 완료되며, 토큰이 외부 서버로 전송되지 않습니다. 가입 불필요・완전 무료입니다.
도구 사용법
- JWT Encoder / Decoder를 열기
- JWT 토큰을 입력란에 붙여넣기
- 헤더・페이로드・서명이 자동으로 디코딩되어 정리된 JSON으로 표시
exp클레임에서 만료 시각 확인- 필요에 따라 서명 검증 수행
자주 묻는 질문
Q. JWT는 암호화되어 있나요?
A. 표준 JWT(JWS)는 서명되어 있지만 암호화되어 있지 않습니다. 페이로드는 Base64URL 디코딩으로 누구나 읽을 수 있습니다. 기밀 데이터는 페이로드에 포함하지 마세요. 암호화가 필요한 경우 JWE(JSON Web Encryption)를 사용합니다.
Q. JWT의 만료 시각은 어디에서 확인할 수 있나요?
A. 페이로드 내의 exp(Expiration Time) 클레임에서 확인할 수 있습니다. 값은 Unix 타임스탬프 형식(에포크 초)입니다. 본 사이트의 Unix 타임스탬프 변환 도구로 사람이 읽을 수 있는 날짜로 변환할 수 있습니다.
Q. JWT 토큰은 변조할 수 있나요?
A. 페이로드의 내용은 변경할 수 있지만, 올바른 비밀 키를 모르면 유효한 서명을 생성할 수 없습니다. 서버 측에서 서명을 검증하여 변조를 감지합니다.
관련 용어
- JWT(JSON Web Token) — 컴팩트하고 자기 완결형인 토큰 형식. RFC 7519로 표준화
- JWS(JSON Web Signature) — 서명이 포함된 JWT. 가장 일반적인 형식
- JWE(JSON Web Encryption) — 암호화된 JWT. 페이로드의 기밀성을 보호
- 클레임(Claims) — 토큰에 포함된 정보(사용자 ID, 권한, 만료 시각 등)
- 서명(Signature) — 토큰 데이터의 변조를 감지하는 메커니즘
- Base64URL — URL 안전한 Base64 인코딩. JWT 각 부분의 인코딩에 사용