주요 업데이트
할당량 초과 응답은 이제 OpenAI, GitHub 및 Cloudflare가 전송하는 것과 동일하게 Retry-After 헤더와 함께 HTTP 429를 반환합니다. 가격 페이지에 대역폭(Bandwidth) 행이 추가되었습니다(모든 공개 플랜은 무제한입니다). 또한 위치 지정(geo-targeting) 기능이 없는 플랜에서 exitCountries를 요청하면 매개변수와 해결 방법을 명시하는 명확한 403 응답을 받게 됩니다.
새로운 기능
할당량 제한 응답이 402 대신 HTTP 429를 사용합니다
플랜 제한(크레딧 또는 대역폭)에 도달하면 모든 응답에 Retry-After가 포함된 429 Too Many Requests 응답이 반환되며, 본문의 resets_at는 결제 주기 종료일을 가리킵니다. 분당 rate limit(속도 제한)과 충돌하지 않도록 reason 필드는 초과한 제한(plan_limit_credits 또는 plan_limit_bandwidth)을 알려줍니다.
변경된 이유는 무엇일까요? 402("결제 필요")가 의미상 맞는 것 같지만, 실제로는 Stripe에서 결제 실패를 보고하는 방식이며, 여러 HTTP 클라이언트 및 proxy에서 이를 잘못 처리합니다. OpenAI, GitHub, Twilio 및 Cloudflare는 모두 고유한 오류 코드와 함께 429로 초과된 할당량을 거부합니다. 업계 표준을 따르는 것이 올바른 방향입니다. 이제 세상의 모든 재시도 라이브러리가 우리 응답을 처리하는 방법을 알게 되었습니다.
Retry-After 값은 대기 후 재시도(sleep-and-retry) 처리를 위해 최대 24시간으로 제한됩니다. 실제 초기화 시간을 알고 싶다면 JSON 본문에서 resets_at을 읽으십시오.
가격 페이지의 대역폭: 무제한
/prices 비교표에 대역폭 행이 추가되었습니다. 모든 공개 플랜은 무제한 대역폭을 제공하며, 이제 표에 이 내용이 명시됩니다. 잠재 고객이 질문할 때까지 필요성을 느끼지 못하다가 막상 수치를 찾지 못하는 종류의 정보입니다. 이제 페이지에서 확인할 수 있습니다.
대역폭이 제한된 맞춤형 플랜은 동일한 행에 GB 수치를 표시합니다.
올바른 오류로 위치 지정(geo-targeting) 제한
플랜에 위치 지정(geo-targeting) 기능이 포함되어 있지 않은 상태에서 요청에 exitCountries을 보내면, 매개변수 이름과 해결 방법을 명시한 메시지와 함께 403로 응답합니다. 이전에는 위치 지정이 허용된 것처럼 요청이 통과되었습니다. 이제는 입구에서 명확하게 실패 처리됩니다.
exitCountries이 없는 요청은 영향을 받지 않습니다. 이 기능은 해당 기능을 실제로 요청할 때만 작동합니다.
제한 및 결제 관련 대시보드 소규모 수정
세 가지 편의성 개선 사항:
- Limits 탭. 저장된 하위 탭(Overview / API keys / Limits & Features)이 화면을 그리기 전에 복원되므로 새로고침 시 잘못된 탭이 깜빡이는 현상이 사라졌습니다.
- API Keys. 검색창이 단순 입력 대신 표준 검색 패턴을 사용합니다.
- Billing. Payment Method 아래의 메타 줄이 이제 올바른 스타일로 렌더링됩니다(이전에는 스타일 없이 표시됨).
내부 작동 방식
이제 플랜 제한 적용 모드를 실시간으로 전환할 수 있습니다. 6개의 데이터 평면(data-plane) 제한(제품당 동시성, 분당 속도, 일일 브라우저, 크레딧, 대역폭, 기능)과 관리 평면(management-plane)의 키 생성 확인 기능 각각에 대해 우리 팀이 제어하는 설정 패널에서 끄기(off), 신호(signal), 적용(enforce) 간에 전환할 수 있습니다. 재배포는 필요하지 않습니다. 백그라운드 갱신기가 60초마다 설정을 가져오며, hot path는 동기식으로 유지됩니다.
이것이 왜 중요할까요? 프로덕션 환경에서 제한 기능이 오작동할 때, 새 코드를 배포하는 대신 1분 만에 설정을 되돌릴 수 있습니다. 또한 각 제한별로 실제 트래픽의 반응을 모니터링하며 제재를 점진적으로 적용할 수 있습니다. Signal 모드는 차단 없이 이벤트를 기록하며, enforce 모드는 429 또는 403 응답을 활성화합니다. 우리는 이 중간 단계가 단순한 긴급 토글이 아닌 일급(first-class) 기능으로 작동하기를 원했습니다.
수치
- 할당량 거부에 대한
Retry-After최대 한도: 24시간 (실제 재설정 시간은resets_at) - 런타임 설정 폴링 간격: 60초
- 무제한 대역폭이 제공되는 공개 플랜: 전체
플랜 제한 기능은 지난 한 달간의 핵심 과제였습니다. 다음 단계: 첫 번째 제한(크레딧 및 제품별 동시성이 첫 적용 대상이 될 예정)에 대한 제재 적용, 그리고 메일링 단계 배포 후 이메일 경고 도입.