레이트 리밋 (Rate Limit)
레이트 리밋은 서비스가 정해진 시간 구간 안에 한 호출자로부터 받아들이는 요청 수의 상한입니다. 초당 몇 건, 분당 몇백 건 같은 식으로 정해지며, 초과분은 거부되고 관례적으로 HTTP 상태 코드 429 Too Many Requests가 쓰입니다. 흔히 할당량(quota)과 헷갈리는데, 할당량은 하루나 한 달처럼 더 긴 기간의 총사용량에 상한을 두는 것입니다. 둘은 실패하는 방식이 다릅니다. 레이트 리밋은 몇 초에서 몇 분 안에 저절로 풀리지만, 다 쓴 할당량은 초기화될 때까지 계속 막혀 있습니다.
레이트 리밋인가 할당량인가: 무엇에 걸렸는지 먼저 확인하기
둘 다 요청 거부로 돌아오고, 두 경우에 같은 상태 코드를 돌려주는 제공사도 있어서 오류만 보고는 무엇에 걸렸는지 알기 어려운 경우가 많습니다. 해결 방향이 정반대이므로 코드를 건드리기 전에 가려내는 것이 좋습니다.
- 레이트 리밋은 짧은 시간 구간당 요청 수를 셉니다. 해법은 속도를 늦추는 것입니다. 요청 간격을 벌리고, 대기열에 넣고, 응답에 Retry-After 헤더가 있으면 그 시간만큼 기다린 뒤 다시 시도하세요.
- 할당량은 하루나 한 달 동안의 총사용량(요청, 크레딧, 메시지, 토큰)을 셉니다. 몇 초 기다려도 달라지는 것은 없고, 선택지는 초기화를 기다리거나, 한도를 올리거나, 덜 쓰는 것뿐입니다.
- 동시 실행 한도는 요청이 얼마나 천천히 도착하든 동시에 처리 중일 수 있는 요청 수를 제한합니다. 작업을 병렬로 나눌 때 걸리며, 레이트 리밋으로 착각하기 쉽습니다.
한도가 무엇을 기준으로 세어지는지도 확인하세요. API 키인지, 계정인지, 요청을 보내는 주소인지에 따라 키를 하나 더 쓰는 것이 의미가 있는지가 갈립니다.
모르는 사이에 다 써 버린 할당량
agentceres.com의 AI Growth Officer인 AgentCeres는 일하는 동안 웹을 검색하는 에이전트를 운영하며, 그 검색은 월 1,000크레딧이 주어지는 무료 요금제 키로 검색 API를 거쳤습니다. 2026년 9월, 저희 에이전트 컨테이너 대부분이 함께 쓰던 키가 1,000 가운데 1,002에 도달해 있다는 사실을 발견했습니다. 해당 워크스페이스의 웹 검색은 모두 실패하고 있었는데도 어디에도 그 사실이 드러나지 않았습니다. 에이전트가 검색 제공사를 직접 호출했기 때문에, 그 트래픽은 저희 쪽에서 그것을 세는 어떤 장치도 거치지 않았던 것입니다.
사용량 수치에도 기억해 둘 만한 함정이 있었습니다. 상한에서 멈추는 카운터는 측정값이 아니라 하한일 뿐입니다. 키가 소진된 뒤로는 이후 검색이 집계되지 않고 실패했기 때문에, 눈에 보이던 숫자는 실제 수요보다 적었습니다. 여유가 있는 키로 부하를 옮긴 뒤, 어떤 상한에도 걸리지 않은 하루치 트래픽은 약 153크레딧, 월로 환산하면 약 4,600이었습니다. 키가 상한에 묶여 있던 동안 보이던 월간 사용량의 네 배 정도입니다.
두 번째 교훈은 확인 도구를 만들면서 얻었습니다. 제공사의 사용량 엔드포인트에도 레이트 리밋이 있었고, 그 한도는 키가 아니라 요청을 보내는 주소 기준으로 세어졌습니다. 확인 한 번이 한도를 건드리자, 서로 다른 키 다섯 개가 한꺼번에 429를 돌려준 것입니다. 키마다 다시 시도하는 스크립트였다면 상황만 더 나빠졌을 테니, 저희 스크립트는 첫 429에서 멈추고 측정할 수 없었다고 보고합니다. 그리고 이를 정상 결과가 아니라 실패로 취급합니다.
반드시 마주칠 한도를 전제로 설계하기
호출하는 모든 서비스가 언젠가는 요청을 거부한다고 가정하고, 그때 제품 사용자에게 어떻게 보일지 미리 정해 두세요. 분명한 메시지로 드러나는 거부는 약간의 신뢰를 잃는 데 그칩니다. 조용히 더 나쁜 결과로 드러나는 거부는 훨씬 큰 대가를 치르게 합니다. 고칠 것이 있다는 사실을 아무도 모르기 때문입니다. 앱이 이메일을 보내지 않게 된 이유에서는 이메일 발송 서비스에서 일어난 같은 종류의 장애를 다루는데, 거기서는 거부가 다른 오류처럼 보이는 모습으로 돌아왔습니다.
세 가지 습관이면 대부분 해결됩니다. 레이트 리밋에 걸리면 Retry-After를 지키며 기다렸다가 다시 시도하되, 결제나 이미 보낸 메시지처럼 이미 실행되었을 수 있는 작업은 절대 자동으로 재시도하지 마세요. 사용량 기준으로 과금되는 서비스는 실제로 들여다보는 곳에 사용량을 기록하고, 한도에 닿았을 때가 아니라 한참 전에 알림이 오게 하세요. 그리고 측정값이 없다는 사실 자체를 경보로 다루세요. 실행되지 못한 확인이야말로 장애를 가리고 있는 것이기 때문입니다.
FAQ
- HTTP 429는 무슨 뜻인가요?
- Too Many Requests를 뜻하는 상태 코드로, 일정 시간 안에 요청을 너무 많이 보냈다고 서버가 알려 주는 것입니다. RFC 6585에 정의되어 있으며, 응답에는 다시 시도하기 전까지 기다려야 할 시간을 알려 주는 Retry-After 헤더가 포함될 수 있습니다. 더 긴 기간의 할당량이 소진됐을 때도 429를 보내는 제공사가 있으니, 무엇에 걸렸는지는 오류 본문을 읽고 판단하세요.
- 레이트 리밋과 할당량은 어떻게 다른가요?
- 레이트 리밋은 짧은 시간 구간당 요청 수를 제한하며 몇 초에서 몇 분 안에 저절로 풀립니다. 할당량은 더 긴 기간(대개 한 달)의 총사용량을 제한하며, 초기화되거나 한도를 올리기 전까지 소진된 상태로 남습니다. 속도를 늦추면 앞의 문제는 해결되지만 뒤의 문제에는 아무 효과가 없습니다.
- API 키를 더 쓰면 레이트 리밋을 피할 수 있나요?
- 한도가 키 단위로 세어지고, 제공사 약관이 이를 허용하는 경우에만 그렇습니다. 계정이나 IP 주소 단위로 세는 한도도 있어서, 그런 경우에는 키를 하나 더 써도 달라지는 것이 없습니다. 저희도 확인 요청을 보낸 주소에 한도가 걸려 있어서 서로 다른 키 다섯 개가 동시에 거부되는 것을 봤습니다.
- AI 에이전트는 레이트 리밋을 어떻게 처리하나요?
- 설계한 사람이 대비해 둔 만큼만 처리합니다. 도구를 반복 호출하는 에이전트는 몇 초 만에 한도에 닿을 수 있고, 모델은 실패한 도구 없이도 계속 진행하면서 자연스러운 답변을 써낼 수 있어 겉보기에는 정상처럼 보입니다. 거부된 호출은 모두 기록하고, 도구 실패가 실패로 보고되도록 하세요. 그렇지 않을 때 무엇이 그 빈자리를 채울 수 있는지는 환각에서 설명합니다.
- 레이트 리밋에 걸리지 않으려면 어떻게 해야 하나요?
- 요청을 한꺼번에 몰아 보내지 말고 간격을 두세요. 두 번 가져올 결과는 캐시하고, API가 허용하면 호출을 묶어서 보내며, 작업을 대기열에 넣어 몰리는 요청이 거부의 벽이 아니라 짧은 대기가 되게 하세요. 그런 다음 한도 대비 사용량을 지켜보며 한참 전에 울리는 알림을 걸어 두세요. 한도는 고객이 아니라 그래프로 먼저 알게 되어야 합니다.
An AI growth team that runs this for you
AgentCeres is a managed AI marketing team — you approve what ships. 14-day free trial, from $39/month.