JWT is a scam and your app doesn't need it
이 글은 JWT(JSON Web Token)를 세션 관리 목적으로 사용하는 것에 대한 비판적인 시각을 제시하며, **상태(State)를 관리해야 하는 애플리케이션에서는 JWT보다 상태 기반(Stateful) 세션 관리가 더 적합하다**고 주장합니다.
### 핵심 요약
1. **JWT의 함정:** JWT는 자체적으로 정보를 담고 있어 '무상태(Stateless)'처럼 보이지만, 실제로는 서버 측에서 상태를 관리해야 하는 애플리케이션(예: 세션 만료, 사용자 권한 변경)에서는 복잡성과 보안상의 위험을 증가시킵니다.
2. **상태 관리의 중요성:** 사용자의 세션이나 권한 변경과 같은 상태 정보는 서버에서 명확하게 관리되어야 하며, 이를 위해 세션 기반 접근 방식이 더 안전하고 관리하기 쉽습니다.
3. **실질적인 대안:** JWT 대신 **불투명 토큰(Opaque Tokens)**이나 서버 측 세션 관리를 사용하여 상태를 명시적으로 관리하는 것이 권장됩니다.
4. **성능 및 오버헤드:** JWT를 사용하더라도, 모든 요청마다 토큰을 검증하고 상태를 확인하는 과정에서 발생하는 오버헤드가 존재합니다.
### 주요 논점 상세
* **상태(State)의 문제:** JWT는 토큰 자체에 정보를 담지만, 토큰이 발급된 후 서버는 해당 토큰의 유효성을 별도로 관리해야 합니다. 이 '상태 관리'의 책임이 분산되면서 오류 발생 가능성이 커집니다.
* **보안 및 제어:** 세션 기반 시스템은 세션 만료, 로그아웃, 권한 변경 등의 상태 변화를 서버에서 즉각적으로 제어할 수 있어 보안상 더 강력합니다.
* **실제 권장 사항:** 글쓴이는 클라이언트 측에서 모든 것을 처리하기보다, 서버가 세션 상태를 명확하게 통제하는 것이 애플리케이션의 안정성과 보안에 필수적이라고 강조합니다.
**결론적으로, 이 글은 JWT가 모든 상황에 만병통치약이 아니며, 상태 관리가 중요한 애플리케이션에서는 전통적인 세션 관리 방식을 유지하거나 불투명 토큰을 사용하는 것이 더 나은 설계임을 역설하고 있습니다.**
### 핵심 요약
1. **JWT의 함정:** JWT는 자체적으로 정보를 담고 있어 '무상태(Stateless)'처럼 보이지만, 실제로는 서버 측에서 상태를 관리해야 하는 애플리케이션(예: 세션 만료, 사용자 권한 변경)에서는 복잡성과 보안상의 위험을 증가시킵니다.
2. **상태 관리의 중요성:** 사용자의 세션이나 권한 변경과 같은 상태 정보는 서버에서 명확하게 관리되어야 하며, 이를 위해 세션 기반 접근 방식이 더 안전하고 관리하기 쉽습니다.
3. **실질적인 대안:** JWT 대신 **불투명 토큰(Opaque Tokens)**이나 서버 측 세션 관리를 사용하여 상태를 명시적으로 관리하는 것이 권장됩니다.
4. **성능 및 오버헤드:** JWT를 사용하더라도, 모든 요청마다 토큰을 검증하고 상태를 확인하는 과정에서 발생하는 오버헤드가 존재합니다.
### 주요 논점 상세
* **상태(State)의 문제:** JWT는 토큰 자체에 정보를 담지만, 토큰이 발급된 후 서버는 해당 토큰의 유효성을 별도로 관리해야 합니다. 이 '상태 관리'의 책임이 분산되면서 오류 발생 가능성이 커집니다.
* **보안 및 제어:** 세션 기반 시스템은 세션 만료, 로그아웃, 권한 변경 등의 상태 변화를 서버에서 즉각적으로 제어할 수 있어 보안상 더 강력합니다.
* **실제 권장 사항:** 글쓴이는 클라이언트 측에서 모든 것을 처리하기보다, 서버가 세션 상태를 명확하게 통제하는 것이 애플리케이션의 안정성과 보안에 필수적이라고 강조합니다.
**결론적으로, 이 글은 JWT가 모든 상황에 만병통치약이 아니며, 상태 관리가 중요한 애플리케이션에서는 전통적인 세션 관리 방식을 유지하거나 불투명 토큰을 사용하는 것이 더 나은 설계임을 역설하고 있습니다.**