레이트 리미팅
레이트 리미팅은 클라이언트(주로 컴퓨터나 모바일 기기의 앱)가 일정 시간 동안 서비스에 요청을 보낼 수 있는 횟수를 제한하는 방식입니다. 클라이언트가 제한을 초과하면 서비스는 제한 시간이 초기화될 때까지 추가 요청을 거부하거나 지연시킵니다(보통 HTTP 429 Too Many Requests 응답을 반환함). 레이트 리미팅은 서비스가 과부하되는 것을 방지하고, 사용자 간의 공정한 접근을 보장하며, 많은 API가 제공하는 사용 등급을 관리하는 역할을 합니다.
요약하자면, 레이트 리미팅은 특정 시간 동안 보낼 수 있는 요청 횟수를 제한하여, 어느 한 클라이언트가 서비스를 마비시키거나 이용 중인 요금제의 한도를 초과하지 못하도록 방지하는 기능입니다.
레이트 리미팅의 작동 방식
서비스는 정해진 허용량을 기준으로 각 클라이언트의 사용량을 추적합니다.
- 한도 설정: 서비스는 API 키나 IP 주소와 연동하여 초당, 분당 또는 월간 요청 수 등 할당량을 설정합니다.
- 요청 수 집계: 들어오는 각 요청은 고정 윈도우(정해진 주기에 초기화), 슬라이딩 윈도우(최근 N초 동안의 누적 수), 또는 토큰 버킷(일정한 속도로 충전되는 허용량) 등의 알고리즘을 사용하여 할당량에 반영됩니다.
- 허용 또는 거부: 클라이언트가 한도 이내인 경우 요청이 진행되며, 한도를 초과한 경우 서비스는 요청을 처리하지 않고 429 응답을 반환합니다.
- 클라이언트에 신호 전달: 서비스의 응답 헤더는 이러한 상태를 전달하빈다. 예를 들어, “RateLimit-Remaining”과 같은 응답 헤더는 남은 할당량을 표시할 수 있으며, “Retry-After”는 클라이언트에게 재시도하기까지 얼마나 기다려야 하는지 알려줍니다.
- 초기화: 시간 창이 경과하면 할당량이 충전되고 요청이 다시 허용됩니다.
핵심 개념은 속도 제한이 오류가 아니라 일종의 ‘약정’이라는 점입니다. 429 오류는 서비스가 클라이언트에게 속도를 늦춰 달라고 요청하는 것이지, 무언가 고장 났다는 신호가 아닙니다.
속도 제한 vs. 스로틀링 및 할당량
- 레이트 리미팅과 스로틀링은 종종 같은 의미로 혼용되지만, 두 개념은 구별할 수 있습니다. 레이트 리미팅은 엄격한 상한선을 설정하고, 이 한도를 초과하는 요청을 429 오류 코드로 거부하는 반면, 스로틀링은 초과 요청을 완전히 거부하기보다는 처리 속도를 늦추거나 대기열에 넣는 방식입니다.
- 레이트 리미팅은 대개 초 또는 분 단위의 짧은 기간 동안 적용되는 상한선인 반면, 할당량은 일반적으로 일 또는 월 단위의 더 긴 기간에 걸쳐 적용되는 더 큰 허용량입니다. API는 종종 이 두 가지를 동시에 적용합니다.
- 429 응답은 클라이언트가 할당 한도를 초과했음을 의미하며, Retry-After(설정된 경우) 또는 백오프 정책에 따라 일시 중지한 후 다시 시도해야 함을 나타냅니다. 반면 503 응답은 클라이언트 할당량 문제가 아닌, 과부하, 유지보수 또는 기타 서버 측 문제로 인해 서버를 사용할 수 없음을 의미합니다.
레이트 리미팅이 중요한 경우
- 모든 API를 기반으로: 올바르게 동작하는 클라이언트는 Retry-After를 준수하고, 지수 백오프에 지터를 적용합니다. 즉, 재시도할 때마다 대기 시간을 점점 늘리고, 여러 클라이언트가 동시에 재시도하는 것을 방지하기 위해 대기 시간에 무작위성을 추가합니다. 또한 RateLimit-Remaining을 확인하여 제한 한도에 도달하기 전에 요청 속도를 늦춥니다.
- 대용량 및 에이전틱 워크로드: 에이전틱 검색 시스템은 한도에 빠르게 도달할 수 있으므로, 요청 대기열 관리와 백오프 처리가 필수적입니다.
- 크롤링: 사이트가 지속적으로 429 오류를 반환하면, 검색 크롤러는 정상적인 응답이 재개될 때까지 해당 사이트에 대한 크롤 예산을 줄입니다.
- 검색 API: 검색 API는 요금제별로 레이트 리밋(일반적으로 초당 및 월간 요청 횟수)을 공개하므로, 요금제를 선택할 때는 예상 쿼리 처리량에 맞춰 해당 제한을 고려해야 합니다. 429 오류에 대한 원활한 처리는 트래픽이 급증할 때 응답 파이프라인의 안정성을 유지해 주며, 더 높고 예측 가능한 한도는 주로 처리량과 클라이언트 측 대기열에 영향을 미치지만, latency에 미치는 영향은 대개 간접적이며 워크로드에 따라 달라집니다.
레이트 리밋은 클라이언트와 API 간 계약의 일부입니다. 레이트 리밋을 거스르기보다는 이에 맞추어 설계하는 것이야말로 통합 시스템이 성장함에 따라 안정성을 유지하는 핵심입니다.
관련 용어
처리량, 레이턴시, HTTP 429, Retry-After, 지수 백오프, 쿼터, API 키, 크롤 예산, 검색 API.