JWT(JSON Web Token)는 RFC 7519 로 정의된 공개 표준입니다. HTTP 요청, OIDC 플로우, 마이크로서비스 호출 사이에서 “이 사용자가 누구인지”, “어떤 권한을 가졌는지” 같은 Claims 를 전달하는 데 쓰입니다. 일반적인 JWT 는 Base64URL 로 인코딩된 Header, Payload, Signature 세 부분을 `.` 으로 이어 붙인 문자열입니다. Header 에는 알고리즘과 타입, Payload 에는 Claims, Signature 에는 Header.Payload 에 대한 키 기반 서명이 들어갑니다.
**JWT 는 암호화가 아닙니다.** 가장 자주 생기는 오해가 이 부분입니다. 기본 JWT Payload 는 평문이라 누구나 Base64URL 디코딩으로 내용을 읽을 수 있습니다. JWT 가 제공하는 것은 내용 숨김이 아니라 “중간에 바뀌지 않았는지”를 확인하는 기능입니다. 비유하면 읽을 수 없는 티켓이 아니라 위조 방지 도장이 찍힌 티켓에 가깝습니다.
JWT 는 용도에 따라 여러 서명 알고리즘을 나눠 씁니다. HMAC 계열(HS256/HS384/HS512)은 같은 Secret 으로 서명과 검증을 하므로 단일 서비스나 신뢰된 내부 클러스터에 단순하고 빠릅니다. RSA 계열(RS256/RS384/RS512)은 개인키로 서명하고 공개키로 검증해 OIDC 에서 흔히 쓰입니다. RSA-PSS 계열(PS256/PS384/PS512)은 더 새로운 패딩을 쓰며, ECDSA 계열은 서명이 짧고, EdDSA(주로 Ed25519)는 빠르고 결정적인 서명이 특징입니다.
운영 환경에서 JWT 를 안전하게 쓰려면 기본 원칙을 지켜야 합니다. 비밀번호, 주민등록번호, 카드번호, API 키 같은 민감정보를 Payload 에 넣지 마세요. 서버는 Token Header 의 `alg` 를 믿지 말고 허용 알고리즘을 고정해야 합니다. HMAC Secret 은 짧은 문자열이 아니라 충분히 랜덤한 값이어야 하며, 서명뿐 아니라 `exp`, `nbf`, `iss`, `aud` 도 함께 검증해야 합니다. 이 도구는 Claims 상태를 강조해 서명 문제인지, 시간 또는 Claims 문제인지 빨리 구분하도록 돕습니다.
JWT 는 세션을 완전히 대체하는 기술이 아닙니다. 세션은 상태를 서버의 Redis 나 DB 에 두고, JWT 는 상태를 Token 안에 담습니다. 마이크로서비스, Stateless API, 모바일 앱, CORS 가 많은 구조에서는 JWT 가 편리하지만 즉시 강제 로그아웃이나 즉시 폐기가 중요한 업무 시스템에서는 세션이 더 다루기 쉬울 수 있습니다. 이 도구는 JWT 파싱, 서명 검증, Payload 편집, 재서명을 한 번에 확인하는 작업대입니다.