피드로 돌아가기
Defend External APIs: Redis Token Bucket in Laravel
Dev.toDev.to
Backend

Redis Token Bucket 기반 외부 API 호출 제어로 429 에러 및 IP 차단 원천 봉쇄

Defend External APIs: Redis Token Bucket in Laravel

Prajapati Paresh2026년 6월 9일3intermediate

Context

병렬 Queue Worker Pool의 동시 요청 급증으로 인한 외부 벤더 API Threshold 초과 발생. 단순 요청 증가가 429 Too Many Requests 응답 및 서버 IP 차단으로 이어져 전체 데이터 동기화 파이프라인이 중단되는 구조적 결함 보유.

Technical Solution

  • 분산 환경 내 토큰 상태 동기화를 위한 Redis 기반 중앙 집중형 Token Balance Pool 구축
  • 단순 Time-window 방식의 전면 차단 대신 일정한 Refill Rate를 통한 부드러운 트래픽 흐름 제어
  • 최대 30개의 Burst Capacity를 허용하여 일시적인 트래픽 급증에 유연하게 대응하는 구조 설계
  • 토큰 부재 시 최대 5초간 Worker를 Block 하여 불필요한 Queue 재시도 횟수 감소
  • 토큰 획득 성공 시에만 HTTP Mutation을 수행함으로써 외부 벤더의 Rate Limit 규정 준수 보장
  • 실패 시 15초 후 재시도하는 Graceful Back-off 전략을 통해 시스템 안정성 확보

- 분산 환경의 Rate Limiting 구현 시 로컬 메모리가 아닌 Redis 등 공유 저장소 사용 여부 확인 - Fixed Window 방식과 Token Bucket 방식의 Burst 처리 차이점을 고려하여 알고리즘 선택 - 외부 API 호출 전 Atomic한 토큰 획득 프로세스가 선행되었는지 검토 - API 제한 초과 시 즉각적인 실패가 아닌 적절한 Block 및 지수적 백오프(Exponential Back-off) 적용 여부 점검

원문 읽기