피드로 돌아가기
The Token Bucket Algorithm: Build Server-Side API Rate Limiting in ~40 Lines
Dev.toDev.to
Backend

Token Bucket 알고리즘 기반의 효율적인 API Rate Limiting 설계

The Token Bucket Algorithm: Build Server-Side API Rate Limiting in ~40 Lines

Mean2026년 7월 1일5intermediate

Context

무분별한 클라이언트 요청으로 인한 Database 부하 및 특정 Tenant의 자원 독점 문제 발생. 단순한 요청 차단을 넘어 Burst Traffic을 허용하면서도 지속적인 전송률을 제어할 수 있는 정교한 제한 메커니즘 필요.

Technical Solution

  • Lazy Refill 방식을 통한 리소스 최적화: 별도 타이머 없이 요청 시점에 경과 시간을 계산하여 Token을 보충하는 구조 설계
  • Capacity와 Refill Rate 분리: 평균 요청 속도 제어와 일시적 트래픽 폭증(Burst) 허용이라는 두 가지 요구사항을 동시 충족
  • Redis Lua Script를 통한 원자성 보장: 분산 환경에서 발생 가능한 Race Condition을 방지하기 위해 '조회-계산-차감' 로직을 서버 측 원자적 연산으로 처리
  • RFC 9457 표준 기반의 에러 응답: 429 상태 코드와 Retry-After 헤더를 제공하여 클라이언트의 재시도 전략을 가이드하는 구조 설계
  • 가중치 기반 비용 책정: 엔드포인트별 부하 정도에 따라 Token 소모량을 다르게 설정하는 가변 비용 체계 적용 가능성 확보

- 분산 시스템 환경에서 In-memory Map 대신 Redis와 Lua Script를 사용하여 상태 일관성 확보 - 429 응답 시 Retry-After 헤더를 포함하여 클라이언트의 지수 백오프(Exponential Backoff) 유도 - Redis Key에 TTL을 설정하여 비활성 사용자의 데이터가 메모리를 점유하지 않도록 관리 - API 엔드포인트의 복잡도에 따라 Token cost를 차등 부여하여 시스템 전체 부하 최적화

원문 읽기