API 오류 429 Too Many Requests: 요청 제한, Retry-After 및 안전한 백오프 설정
LLM API의 HTTP 429 오류 해결 완벽 가이드: RPM/TPM 제한 분석, Retry-After 헤더 처리, Full Jitter 지수 백오프 코드 구현.
HTTP 429 Too Many Requests 오류는 클라이언트가 API 제공업체의 요청 빈도 또는 토큰 처리량 한도를 초과했을 때 발생합니다. 무작위적인 즉각 재시도는 문제를 해결하지 못하며, 오히려 재시도 폭풍(Retry Storm)을 유발하여 계정 차단 시간을 연장시킵니다.
애플리케이션의 안정성을 복구하려면 제한 유형(RPM, TPM, 잔액 부족)을 명확히 구분하고, Retry-After 헤더를 올바르게 파싱하며, 랜덤 지터를 포함한 지수 백오프(Full Jitter Exponential Backoff) 알고리즘을 적용해야 합니다.
HTTP 429 오류 발생 원인: 속도 제한의 구조
최신 대규모 언어 모델(LLM) API에서는 주로 다음 세 가지 원인으로 429 오류가 발생합니다:
- RPM (Requests Per Minute): 분당 HTTP 요청 수 제한. 큐 없이 여러 워커가 동시에 병렬 요청을 보낼 때 주로 발생합니다.
- TPM (Tokens Per Minute): 1분 동안의 입력 및 출력 토큰 총량 제한. 대용량 컨텍스트나 긴 프롬프트를 전송할 때 발생하기 쉽습니다.
- 할당량 및 잔액 소진: 계정 잔액이 0이거나 설정된 지출 한도(Spend Limit)에 도달하여 발생하는 차단.
잔액 부족이나 고정 구독 한도가 원인인 경우, 무한 재시도는 네트워크 자원만 낭비할 뿐입니다. 로그를 복잡하게 분석하지 않고 원인을 즉시 파악할 수 있도록 BetterToken 은 투명한 대시보드를 제공합니다. 요청별 HTTP 상태 코드, 입력·출력·캐시 토큰의 정밀한 소비 내역, 종량제(Pay-as-you-go) 잔액을 실시간으로 확인하여 5시간 주기 차단 걱정 없이 안정적으로 운영할 수 있습니다.
429 오류 진단 매트릭스
Retry-After 헤더 파싱 방법
RFC 6585 규격에 따르면 Retry-After 헤더는 두 가지 형식으로 대기 시간을 전달합니다:
- 상대적 초 단위 (정수 또는 실수, 예:
Retry-After: 12) - HTTP-Date 타임스탬프 (예:
Retry-After: Sun, 23 Aug 2026 03:05:00 GMT)
Full Jitter 지수 백오프 구현
Retry-After 헤더가 없는 경우, 랜덤 지터가 포함된 지수 백오프를 사용하는 것이 표준입니다. 시도 횟수 에 대한 대기 시간 계산 공식은 다음과 같습니다:
멱등성 및 부작용 방지
단순 읽기 작업(GET)은 재시도해도 안전합니다. 그러나 LLM 추론과 같은 POST 작업의 경우:
- 에이전트 작업 중복 실행 방지: 네트워크 타임아웃 발생 시, 무작정 재전송하기 전에 토큰이 차감되었거나 작업이 실행 중인지 확인하십시오.
- 클라이언트 요청 ID 사용:
X-Request-ID헤더를 전송하여 서버 로그에서 각 호출을 추적하십시오. - 401/403 오류를 429로 처리하지 말 것: 인증 오류는 대기로 해결되지 않으며 API 키를 수정해야 합니다.
복구 검증 및 점진적 재개
전체 트래픽을 재개하기 전에:
- 최소 토큰(
max_tokens: 5)으로 단일 프로브 요청을 전송합니다. - HTTP 200 수신 및
x-ratelimit-remaining-requests헤더를 확인합니다. - 지표 대시보드에서 429 오류율을 모니터링하며 동시성을 단계적으로 높입니다.
엄격한 분당 제한으로 인한 갑작스러운 429 오류를 방지하고 요청 상태를 투명하게 관리하려면 BetterToken API 로 전환하여 전용 API 키를 생성하고 대시보드에서 실시간 토큰 소비량을 모니터링하십시오.