JWT
JWT (JSON Web Token
)는 웹 개발에서 인증과 정보 교환을 위해 널리 사용되는 표준입니다. JWT는 세 부분으로 구성되어 있습니다: Header, Payload, Signature. 각 부분은 Base64-URL 방식으로 인코딩되며, 점(.)으로 구분됩니다.
Header
: 토큰의 유형(JWT)과 사용된 해시 알고리즘(예: HMAC SHA256 또는 RSA)을 명시합니다.
Payload
: 토큰에 포함될 클레임(claim)들을 포함합니다. 클레임은 토큰에 대한 성명 또는 속성으로, 사용자의 식별 정보나 토큰의 유효 기간 등을 포함할 수 있습니다.
Signature
: Header의 인코딩 값과 Payload의 인코딩 값을 합친 후, 제공된 비밀 키로 해시하여 생성됩니다. 이 서명은 토큰의 무결성을 보장하고, 토큰이 중간에 변경되지 않았음을 검증하는 데 사용됩니다.
JWT의 작동 방식:
- 사용자가 로그인을 시도하고 서버는 사용자의 인증 정보를 검증합니다.
- 인증이 성공하면, 서버는 사용자의 정보를 기반으로 JWT를 생성하고, 이를 사용자에게 전송합니다.
- 사용자는 이 JWT를 저장하고, 이후 서버로 요청을 보낼 때마다 JWT를 포함시켜 인증을 진행합니다.
- 서버는 요청이 들어올 때마다 JWT의 유효성을 검사하고, 유효하다면 요청을 처리합니다.
JWT의 장점:
- 분산 환경에서의 유연성: JWT는 자가 포함(self-contained) 방식이기 때문에, 서버는 클라이언트로부터 받은 JWT만으로 사용자의 인증 및 권한을 검증할 수 있습니다. 이는 분산 시스템이나 마이크로서비스 아키텍처에서 유용합니다.
- 높은 보안성: 정보가 암호화되며, 서명을 통해 데이터의 무결성이 보장됩니다.
- 효율적인 인증 처리: 세션을 유지할 필요가 없으므로, 서버의 자원을 절약할 수 있고, 확장성 있는 시스템 설계가 가능합니다.
JWT의 단점:
- 악의적인 사용 시 견제 불가 : 이미 발급된 JWT는 만료시키지 못한다. 세션은 악의적인 사용을 시도할 경우 지워버리면 끝이지만 JWT는 유효기간이 만료될 때까지는 사용이 가능하다.
RefreshToken
을 따로 두어 AccessToken은 짧게 시간을 설정하는 방식으로 커버한다.
- JWT의 길이가 길어, 요청이 많다면 서버의 자원낭비가 심하다.
JWT의 구성

