JWT(JSON Web Token) 완벽 가이드: 구조, 보안, 그리고 사용 사례
현대 웹 애플리케이션에서 가장 널리 사용되는 인증 방식인 JWT. 도대체 왜 쓰는 걸까요? 이 글에서는 JWT의 구조부터 보안 모범 사례까지 개발자가 알아야 할 모든 것을 다룹니다.
JWT란 무엇인가요?
JWT(JSON Web Token)는 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 컴팩트하고 독립적인 방식을 정의하는 개방형 표준(RFC 7519)입니다. 이 정보는 디지털 서명되어 있으므로 확인하고 신뢰할 수 있습니다.
JWT의 구조
JWT는 점(.)으로 구분된 세 부분으로 구성됩니다.
- Header (헤더): 토큰 유형(JWT)과 해싱 알고리즘(예: HMAC SHA256) 정보
- Payload (페이로드): 클레임(Claims)이라고 불리는 실제 데이터 (사용자 ID, 만료 시간 등)
- Signature (서명): 토큰이 변조되지 않았음을 증명하는 암호화된 문자열
1. Header
{
"alg": "HS256",
"typ": "JWT"
}2. Payload
페이로드에는 Registered claims(표준), Public claims, Private claims가 포함될 수 있습니다.
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}3. Signature
서명은 헤더의 인코딩 값, 페이로드의 인코딩 값, 그리고 비밀 키(Secret Key)를 조합하여 생성됩니다.
언제 JWT를 사용해야 할까요?
- 인증 (Authentication): 사용자가 로그인하면 이후의 모든 요청에 JWT가 포함됩니다. 서버는 세션을 유지할 필요 없이 토큰만 검증하면 되므로 확장성(Scalability)이 뛰어납니다.
- 정보 교환 (Information Exchange): 공개/개인 키 쌍을 사용하여 서명할 수 있으므로 보낸 사람을 확인할 수 있습니다.
보안 주의사항
- 민감한 정보 제외: 페이로드는 누구나 디코딩하여 볼 수 있습니다. 비밀번호나 주민등록번호 같은 민감한 정보는 절대 넣지 마세요.
- HTTPS 사용: 토큰 탈취를 방지하기 위해 반드시 SSL/TLS 암호화 통신을 사용해야 합니다.
- 짧은 만료 시간: 토큰이 탈취되더라도 피해를 최소화하기 위해 만료 시간(exp)을 짧게 설정하고, Refresh Token 전략을 사용하세요.
결론
JWT는 현대 웹 개발, 특히 마이크로서비스 아키텍처와 SPA(Single Page Application)에서 필수적인 기술입니다. 구조를 정확히 이해하고 보안 수칙을 준수한다면 안전하고 효율적인 인증 시스템을 구축할 수 있습니다.