JWT(Token)은 JSON Web Token의 약자로, 인증과 정보 교환을 위해 사용되는 액세스 토큰입니다. JWT는 웹 표준으로써, 특히 웹 애플리케이션과 서버 간의 통신에서 사용됩니다. JWT는 간단하고 안전한 방식으로 정보를 전달하기 위해 설계되었습니다.
JWT의 구성 요소
JWT는 세 개의 구성 요소로 이루어져 있습니다: Header, Payload, Signature입니다.
1. Header
Header는 JWT의 유형과 암호화 알고리즘을 지정합니다. Header는 Base64로 인코딩되어 있으며, 일반적으로 다음과 같은 형식을 가지고 있습니다:
{"alg": "HS256", "typ": "JWT"}
2. Payload
Payload는 토큰에 포함되는 클레임(claim) 정보를 담고 있습니다. 클레임은 토큰에 대한 정보를 제공하는 이름-값 쌍입니다. 일반적으로 다음과 같은 종류의 클레임이 포함될 수 있습니다:
Registered claims: 토큰에 대한 기본 정보를 제공하는 클레임으로, 예를 들어 발급자(iss), 만료 시간(exp), 주제(sub) 등이 있습니다.
Public claims: 사용자 정의 클레임으로, 충돌을 피하기 위해 URI 형식으로 작성되어야 합니다.
Private claims: 사용자 정의 클레임으로, 서버와 클라이언트 간의 협의에 따라 사용됩니다.
3. Signature
Signature는 토큰의 무결성을 검증하기 위해 사용됩니다. Signature는 Header와 Payload, 그리고 비밀 키(secret key)를 사용하여 생성됩니다. 서버는 이 비밀 키를 사용하여 토큰의 유효성을 검증할 수 있습니다.
JWT의 장점
간편한 사용: JWT는 간단한 문자열로 표현되며, 다양한 플랫폼에서 사용할 수 있습니다.
확장성: JWT는 클레임을 통해 사용자 정의 데이터를 포함할 수 있으며, 필요에 따라 확장할 수 있습니다.
분산 환경에서의 사용: JWT는 서버의 상태를 저장하지 않고도 사용자의 인증을 처리할 수 있습니다. 이는 서버의 확장성과 성능을 향상시킵니다.
보안: JWT는 서명을 통해 무결성을 검증할 수 있으며, 비밀 키를 사용하여 토큰의 유효성을 검증할 수 있습니다.
JWT의 단점
토큰 크기: JWT는 토큰에 정보를 포함하기 때문에, 토큰의 크기가 커질 수 있습니다. 이는 네트워크 대역폭을 낭비할 수 있습니다.
토큰 만료 관리: JWT는 토큰의 만료 시간을 포함하고 있으며, 만료된 토큰은 더 이상 유효하지 않습니다. 따라서 토큰의 만료 관리가 필요합니다.
중앙 집중화: JWT는 토큰을 발급한 서버에서만 유효성을 검증할 수 있습니다. 이는 중앙 집중화된 인증 서버가 필요하다는 의미입니다.
JWT의 사용 예시
JWT는 다양한 분야에서 사용될 수 있습니다. 예를 들어, 웹 애플리케이션에서 사용자 인증을 처리하거나, API 서버에서 클라이언트의 요청을 인증하는 데 사용될 수 있습니다. JWT는 토큰 기반 인증의 일종으로, 세션 기반 인증과 비교하여 다음과 같은 장점을 가지고 있습니다:
서버의 상태를 저장하지 않으므로, 서버의 확장성과 성능을 향상시킵니다.
클라이언트와 서버 간의 상태를 유지할 필요가 없으므로, 서버의 부담을 줄입니다.
클라이언트가 토큰을 가지고 있으므로, 다중 서버 환경에서도 사용자 인증을 처리할 수 있습니다.