본문으로 건너뛰기

속도 제한

ArchiCore API는 공정한 사용을 보장하기 위해 속도 제한을 구현합니다.

등급별 제한

등급요청/일요청/분프로젝트
무료100103
Pro10,00010025
Enterprise무제한1,000무제한

속도 제한 헤더

모든 API 응답에는 속도 제한 정보가 포함됩니다:

HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1640000000
헤더설명
X-RateLimit-Limit허용된 최대 요청 수
X-RateLimit-Remaining윈도우 내 남은 요청 수
X-RateLimit-Reset제한 리셋 Unix 타임스탬프

속도 제한 초과

속도 제한을 초과하면:

HTTP/1.1 429 Too Many Requests
Retry-After: 60
{
"success": false,
"error": "속도 제한 초과",
"code": "RATE_LIMIT_EXCEEDED",
"retryAfter": 60
}

모범 사례

1. 헤더 확인

요청 전에 항상 X-RateLimit-Remaining을 확인:

async function makeRequest(url) {
const response = await fetch(url, { headers });

const remaining = response.headers.get('X-RateLimit-Remaining');
if (parseInt(remaining) < 10) {
console.warn('속도 제한 낮음:', remaining);
}

return response.json();
}

2. 지수 백오프 구현

async function requestWithRetry(url, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, { headers });

if (response.status !== 429) {
return response.json();
}

const retryAfter = response.headers.get('Retry-After') || 60;
await sleep(retryAfter * 1000 * Math.pow(2, i));
}

throw new Error('최대 재시도 횟수 초과');
}

3. 응답 캐시

API 호출을 줄이기 위해 응답을 캐시:

const cache = new Map();

async function getCached(key, fetchFn, ttl = 60000) {
const cached = cache.get(key);
if (cached && Date.now() - cached.timestamp < ttl) {
return cached.data;
}

const data = await fetchFn();
cache.set(key, { data, timestamp: Date.now() });
return data;
}

4. 배치 작업

가능한 경우 배치 엔드포인트 사용:

// 여러 요청 대신
for (const id of projectIds) {
await client.projects.get(id); // ❌ 여러 요청
}

// 배치 엔드포인트 사용
await client.projects.getBatch(projectIds); // ✓ 단일 요청

제한 증가

더 높은 제한이 필요하신가요? Pro로 업그레이드 하거나 Enterprise 플랜에 대해 문의하세요.