많은 개발자가 사용자 로그인 세션 관리에 JWT(JSON Web Token)를 사용하고 있지만, 최근 이 방식이 부적절하며 보안상 취약할 수 있다는 지적이 나왔습니다. JWT는 본래 5분 이하의 짧은 수명 토큰을 전제로 설계되었으며, 사용자를 장시간 로그인 상태로 유지하는 세션 용도로는 적합하지 않다는 것이 핵심 주장입니다. 진정한 의미의 안전한 무상태(stateless) 인증은 구현하기 어렵고, 결국 토큰을 안전하게 관리하려면 일부 상태 저장소가 필요하다는 점도 지적됩니다.
이 주장의 근거는 여러 가지입니다. 첫째, JWT 사양 자체가 매우 짧은 수명 토큰을 위해 설계되었으므로, 일반적인 로그인 세션처럼 긴 수명을 요구하는 상황에는 맞지 않습니다. 둘째, 안전한 무상태 인증은 현실적으로 불가능하며, 토큰 무효화 등을 위해서는 결국 서버 측에 상태(state)를 저장해야 합니다. 만약 상태 저장소가 필요하다면, 단순 토큰 상태보다는 모든 세션 데이터를 저장하는 것이 더 효율적이고 유연합니다. 또한, JWT는 과거 'none' 알고리즘 허용 등 보안 취약점이 발견된 이력이 있으며, 사양 자체의 복잡성으로 인해 잘못 구현될 가능성이 높다는 비판도 있습니다. 구글(Google)과 같은 대기업도 브라우저 사용자 세션에는 JWT 대신 일반 쿠키 세션을 사용하며, JWT는 주로 서버 간 통신이나 SSO(Single Sign-On) 전송 수단으로만 제한적으로 활용한다고 언급됩니다.
이러한 주장은 웹 애플리케이션 보안 및 인증 방식에 대한 중요한 재고를 요구합니다. 개발자들은 편리하다는 이유로 JWT를 무분별하게 사용하기보다, 각 인증 방식의 설계 목적과 보안 특성을 정확히 이해하고 적절한 도구를 선택해야 합니다. 사용자 로그인 세션 유지에는 일반 쿠키 기반 세션이 더 안전하고 효율적인 대안이 될 수 있으며, 짧은 수명의 서명 토큰이 필요한 특정 경우에는 PASETO(Platform-Agnostic Security Tokens)와 같이 보안을 강화한 대안을 고려하는 것이 바람직합니다. 이는 단순히 기술 선택의 문제를 넘어, 사용자 데이터 보호와 서비스의 안정성을 확보하는 데 필수적인 고려사항입니다.