본문으로 건너뛰기 Rate Limiting 뜻과 의미 | 기술 용어 사전 | pkglog
네트워크

Rate Limiting

다른 이름: 속도 제한 , API Rate Limiting , Throttling

정의

일정 시간 동안 허용하는 요청 수를 제한해 API 남용을 막고 다운스트림 시스템을 보호하는 기법. Fixed/Sliding Window, Token Bucket, Leaky Bucket 등의 알고리즘으로 구현하며, 초과 시 보통 429 Too Many Requests와 Retry-After 헤더를 반환. Nginx limit_req, API 게이트웨이, 애플리케이션 미들웨어 등 여러 계층에서 적용 가능

상세 설명

📋 기술 스펙

  • Fixed Window: 고정 시간 구간마다 카운터 초기화, 구현 간단하지만 경계에서 순간 폭주 가능
  • Sliding Window Log/Counter: 최근 시간 구간을 이동시키며 카운트, 더 정확하지만 메모리/연산 비용 증가
  • Token Bucket: 일정 속도로 토큰을 채우고 요청마다 소비, 버스트 허용
  • Leaky Bucket: 요청을 큐에 넣고 일정한 속도로만 처리, 출력 속도를 균일하게 유지
  • 분산 환경: Redis INCR+EXPIRE 또는 Lua 스크립트로 원자적 카운팅

💡 실무 활용

  • 공개 API의 요금제별 호출 한도 (예: 분당 100회)
  • 로그인/OTP 엔드포인트의 무차별 대입 공격 방지
  • 내부 마이크로서비스 간 과부하 방지
  • Nginx/API 게이트웨이 계층의 1차 방어선

장점

  • 서비스 안정성: 트래픽 폭주로부터 백엔드 보호
  • 비용 통제: 과도한 리소스 사용 차단
  • 공정성: 사용자/키별 균등한 자원 배분

⚠️ 단점 및 제약

  • 분산 환경 동기화 비용: 중앙 스토어(Redis) 의존
  • 알고리즘 선택에 따른 트레이드오프: 정확도 vs 메모리/연산
  • 클록 스큐, 리셋 시점의 thundering herd 등 엣지 케이스 처리 필요

🔧 호환성

Nginx, Envoy, Kong 등 API 게이트웨이 / Redis 기반 커스텀 구현 / Express, Spring 등 미들웨어 라이브러리