속도 제한
FreeFileTools API의 속도 제한과 애플리케이션에서 이를 처리하는 방법을 이해하세요.
무료 티어 제한
| 제한 | 값 |
|---|---|
| 시간당 요청 수 | 50 |
| 요청당 최대 파일 크기 | 25 MB |
| 속도 제한 윈도우 | Rolling 1 hour |
속도 제한은 API Key별로 적용됩니다. 각 키에는 독립적인 카운터가 있으며 1시간 단위로 롤링 리셋됩니다.
속도 제한 초과 시
속도 제한을 초과하면 API는 429 Too Many Requests 응답을 반환합니다:
json
{
"error": "Rate limit exceeded",
"message": "You have exceeded the rate limit of 50 requests per hour. Please try again later.",
"retryAfter": 1742
}retryAfter 필드는 다음 요청 전에 대기할 시간(초)을 나타냅니다.
속도 제한 응답 헤더
모든 API 응답에는 속도 제한 사용량을 추적하는 데 도움이 되는 헤더가 포함됩니다:
| 헤더 | 설명 |
|---|---|
X-RateLimit-Limit | 시간당 허용되는 최대 요청 수 (50) |
X-RateLimit-Remaining | 현재 윈도우에서 남은 요청 수 |
Retry-After | 재시도 전 대기 시간(초) (429 응답에서만) |
응답 헤더 예제
http
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42제한 내에서 유지하기 위한 팁
1.
남은 요청 수 확인
X-RateLimit-Remaining 헤더를 모니터링하여 남은 요청 수를 파악하세요.
2.
지수 백오프 구현
429 응답을 받으면 API에 연속 요청을 보내는 대신 점진적으로 대기 시간을 늘려 재시도하세요.
3.
결과 캐시
동일한 파일을 반복 처리하는 경우 불필요한 API 호출을 피하기 위해 로컬에 결과를 캐시하세요.
4.
현명하게 배치 처리
배치 처리 시 모든 요청을 한꺼번에 보내지 말고 시간에 걸쳐 분산하세요.
예제: JavaScript에서 속도 제한 처리
javascript
async function apiCall(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = parseInt(response.headers.get("Retry-After") || "60");
console.log(`Rate limited. Waiting ${retryAfter} seconds...`);
await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
continue;
}
return response;
}
throw new Error("Max retries exceeded");
}