피드로 돌아가기
Dev.toSecurity
원문 읽기
JWT 중복 갱신으로 인한 강제 로그아웃 문제 해결 전략
The JWT Refresh Race Condition Nobody Talks About (And How I Fixed It)
AI 요약
Context
Proactive 타이머와 Reactive 인터셉터가 동시에 작동하는 JWT 갱신 구조. 동일한 Refresh Token으로 중복 요청이 발생하여 Token Rotation 정책에 의해 세션이 파괴되는 현상. 원인 불명의 무작위 로그아웃을 유발하는 레이스 컨디션 문제.
Technical Solution
- Proactive 타이머와 Reactive 인터셉터 간의 상태 공유를 위한 단일 Lock 메커니즘 도입
acquireLock()함수를 통한 현재 갱신 프로세스 진행 여부 확인 및 중복 요청 차단- 이미 갱신이 진행 중인 경우
enqueue()를 통해 요청을 대기 큐에 등록하는 방식 - 토큰 갱신 완료 후
flushQueue()를 호출하여 대기 중인 모든 요청을 일괄 처리하는 구조 axios-refresh-sync패키지를 통해 백엔드 종류와 저장소 방식에 상관없이 적용 가능한 추상화 설계setTokens및getTokens콜백 함수를 제공하여 localStorage나 Cookie 등 다양한 저장소 대응
Key Takeaway
비동기 환경에서 동일한 자원을 갱신하는 서로 다른 트리거가 존재할 경우, 상태 동기화를 위한 중앙 집중식 Lock 설계가 필수적임.
실천 포인트
Token Rotation을 사용하는 JWT 환경에서 타이머 기반 갱신과 401 인터셉터를 함께 사용할 때 반드시 요청 큐잉(Queueing) 로직을 구현할 것