API 요청 간격 설계: Retry-After와 재시도 한도
요청 사이에 sleep을 넣는 것만으로 계정 정지나 호출 제한을 피할 수는 없습니다. 제공자의 한도와 재시도 안내를 따라야 합니다.
어떤 상황에서 적용하나요?
429 응답의 Retry-After는 초 단위 숫자 또는 HTTP 날짜일 수 있습니다. 아래 예제는 숫자 형태만 처리하고 최대 대기 시간을 제한합니다. 실제로 대기하거나 외부 요청을 보내지 않습니다.
검증 범위: 아래 코드는 외부 서비스에 요청하지 않는 로컬 예제입니다. 실제 서비스 연결은 별도로 검증해야 합니다.
최소 예제로 동작 확인하기
def retry_delay(header, maximum=120):
try:
seconds = int(header)
except (TypeError, ValueError):
return None
if seconds < 0:
return None
return min(seconds, maximum)
assert retry_delay("30") == 30
assert retry_delay("999") == 120
assert retry_delay("not-a-number") is None
print(retry_delay("30"))
결과는 어떻게 확인하나요?
출력은 30입니다. None은 곧바로 재전송하라는 뜻이 아니라, 다른 날짜 형식인지 확인하거나 작업을 중단해 운영 정책에 따라 판단해야 한다는 뜻입니다.
실제 업무에 적용할 때 확인할 점
POST 같은 쓰기 요청은 응답이 끊겼더라도 서버에서 이미 처리됐을 수 있습니다. 멱등성 키나 결과 조회 없이 무조건 반복하면 중복 게시가 생깁니다. 재시도 횟수, 총 대기 시간, 취소 조건을 함께 정하세요.
공식 자료와 다음 단계
관련 공식 문서에서 사용하는 버전의 기능과 제한을 확인하세요.
학습 경로: API·운영 가이드 · 인증 오류 확인
작성: 로그 · 2026-10-17 수정: 확인되지 않은 경험담과 성능 보장 표현을 제거하고 예제·적용 조건·공식 근거를 보완했습니다.
댓글
댓글 쓰기