Rate limiting은 클라이언트가 시간 창 안에서 할 수 있는 요청 수를 제한합니다 — 시스템을 남용과 과부하로부터 보호하고 공정한 사용을 보장합니다. 여러 알고리즘과 고려사항을 가진 흔한 시스템 디자인 구성 요소입니다.
rate limiting을 하는 이유
✓ 남용 방지 → 공격(브루트포스, 스크래핑, DoS), 과도한 사용 방지
✓ 과부하 방지 → 시스템이 압도되지 않게 보호 (안정성)
✓ 공정한 사용 → 한 클라이언트가 자원을 독점하지 못하게; 계층별 제한 (무료 vs 유료)
✓ 비용 통제; 다운스트림 서비스 보호
→ API와 서비스의 흔한 요구사항.
rate limiting 알고리즘
FIXED WINDOW → 고정 시간 창마다 요청 카운트 (예: 분당 100); 단순
✗ 창 경계에서 버스트 허용 (경계에서 최대 2배)
SLIDING WINDOW → 롤링 시간 창 → 더 부드럽고 경계 버스트 없음 (더 정확)
TOKEN BUCKET → 토큰이 일정 비율로 채워짐; 각 요청이 토큰 소비 → 평균 비율을
제한하면서 버킷 크기까지 버스트 허용 (인기 있고 유연)
LEAKY BUCKET → 요청이 일정 비율로 처리됨 (출력을 부드럽게)
