피드로 돌아가기
Token Revocation Without Killing Performance
Dev.toDev.to
Security

50k RPS 환경에서 sub-ms 지연시간을 달성한 2계층 Token Revocation 설계

Token Revocation Without Killing Performance

Akarshan Gandotra2026년 5월 4일8advanced

Context

Stateless 특성의 JWT는 즉각적인 토큰 무효화가 불가능하여 보안 취약점이 발생함. 기존 Redis 직접 조회 방식은 네트워크 Round-trip으로 인한 Latency 증가와 Single Point of Failure 위험을 초래하여 50,000 RPS 및 sub-millisecond 응답 시간 제약을 충족하지 못함.

Technical Solution

  • Redis(Propagation Layer)와 Local Memory(Decision Layer)를 분리한 2계층 구조 설계
  • ZSET을 활용하여 만료 시간을 Score로 관리함으로써 현재 유효한 무효화 리스트의 Snapshot 제공
  • Redis Stream을 통한 실시간 무효화 이벤트 전파로 Local Cache의 증분 업데이트 수행
  • Stream Tip 캡처 후 ZSET을 읽는 역순 초기화 로직을 통해 Snapshot과 Stream 사이의 Race Condition 방지
  • Hot-path에서 I/O 없이 Local Map Lookup만 수행하여 응답 속도를 나노초 단위로 최적화
  • Fail-open 전략을 채택하여 Local Cache 미존재 시 기본적으로 허용함으로써 가용성 우선 확보

- 분산 환경에서 상태 동기화 시 Snapshot 읽기와 Event 구독 사이의 간극을 메우는 순서 보장 로직 검토 - High-traffic 경로의 DB 조회를 제거하기 위해 Local Cache와 Pub/Sub 구조의 결합 고려 - 메모리 기반 캐시 도입 시 Unbounded Growth 방지를 위한 크기 제한 및 TTL 전략 수립 - 인프라 장애 시 서비스 지속성을 위해 Fail-open 또는 Fail-closed 전략 중 비즈니스 우선순위에 따른 선택

원문 읽기