JWT(JSON Web Token)는 「서버가 발급한 서명된 JSON」을 토큰으로 쓰는 인증 방식입니다.
세션처럼 서버에 상태를 저장 안 해도 되어, 마이크로서비스·SPA·모바일 앱과 잘 맞습니다.
구조.
xxx.yyy.zzz 형태의 세 부분.
header(알고리즘), payload(사용자 정보·만료시각 등 클레임), signature(서명).
Base64 인코딩되어 있어 「누구나 읽을 수 있지만, 서명 검증으로 위변조는 불가」.
기본 흐름.
1) 사용자가 로그인 → 서버가 JWT 발급.
2) 클라이언트가 Authorization: Bearer xxx 헤더로 매 요청에 포함.
3) 서버가 서명·만료 검증 → 사용자 식별.
DB 조회 없이 토큰만으로 인증.
파이썬 라이브러리 — PyJWT.
import jwt.
token = jwt.encode({"user_id": 123, "exp": ...}, secret, algorithm="HS256").
data = jwt.decode(token, secret, algorithms=["HS256"]).
위변조·만료된 토큰은 자동 예외.
주의사항.
한번 발급한 토큰은 만료 전엔 무효화 어려움(블랙리스트로 해결).
payload에 민감정보 넣지 말 것(누구나 읽힘).
짧은 만료시간 + refresh token 패턴이 표준.
HTTPS 필수.
한 줄 요약
JWT는 서명된 JSON을 토큰으로 쓰는 stateless 인증입니다.
서버에 세션 저장이 필요 없고, 마이크로서비스·SPA·모바일에 적합.
짧은 만료 + refresh token 패턴이 표준.
더 알아볼 것
- JWT vs 세션 비교
- refresh token 회전
- JWT 보안 — 알고리즘 고정