Rate Limit
비즈고 API는 안정적인 서비스 제공을 위해 API 호출 횟수를 제한합니다.
기본 제한
| 구분 | 제한 |
|---|---|
| 메시지 발송 | 200 TPS (초당 트랜잭션) |
| 메시지 리포트 조회 | 5 TPS |
TPS(Transactions Per Second): 초당 처리 가능한 요청 수
한도 초과 시 응답
HTTP 429 Too Many Requests
{
"common": {
"authCode": "A020",
"authResult": "Rate limit exceeded"
}
}
대응 방법
1. 발송 속도 제어
대량 발송 시 초당 200건을 넘지 않도록 발송 간격을 조절합니다.
// 초당 200건 제한을 고려한 배치 발송 예시
const BATCH_SIZE = 100;
const DELAY_MS = 500; // 0.5초마다 100건 = 초당 200건
for (let i = 0; i < destinations.length; i += BATCH_SIZE) {
const batch = destinations.slice(i, i + BATCH_SIZE);
await sendBatch(batch);
if (i + BATCH_SIZE < destinations.length) {
await new Promise(r => setTimeout(r, DELAY_MS));
}
}
2. 429 감지 후 재시도
if (response.status === 429) {
const retryAfter = response.headers.get('Retry-After') || 1;
await new Promise(r => setTimeout(r, retryAfter * 1000));
// 재시도
}
3. 한도 상향 요청
기본 TPS로 부족한 경우 담당 영업 담당자에게 상향을 요청할 수 있습니다.
Best Practice
- 피크타임 분산: 가능하면 발송 시간을 분산해 특정 시간대에 집중되지 않도록 합니다.
- 큐 기반 처리: 발송 요청을 큐에 넣고 TPS에 맞게 순차 처리합니다.
- 모니터링: 429 응답 비율을 모니터링해 발송 패턴을 최적화합니다.
→ 지수 백오프 재시도 구현: 재시도 전략