다시 시도할 오류는 시간이 지나면 나아질 수 있는 것뿐이야. RateLimitError(429), APIConnectionError, 5xx server 오류는 일시적일 수 있어. 400, 401, 404, 422 는 요청이나 인증을 고쳐야 하므로 그대로 다시 보내도 해결되지 않아.
tenacity 로 조건과 한도를 함께 적어
@retry(retry=retry_if_exception_type((openai.RateLimitError, openai.APIConnectionError)), wait=wait_exponential_jitter(initial=1, max=20), stop=stop_after_attempt(5)) 는 출발점으로 쓸 만한 설정이야. 어떤 exception 을 다시 시도할지, 얼마나 기다릴지, 몇 번 뒤에 멈출지를 한곳에 드러내.
정확한 exception class 를 잡아
SDK 는 APIError 아래에 APIStatusError, RateLimitError, APIConnectionError 등을 둬. 무조건 except Exception 으로 잡으면 개발자가 중단하려는 신호까지 삼켜 디버깅이 어려워져. 처리할 class 를 정확히 골라.
재시도 기록을 남겨
다시 시도할 때마다 횟수와 실제 대기 시간을 기록해. 운영 환경에서 응답이 느려졌을 때 여러 번 재시도 중이었다는 사실을 바로 확인할 수 있어.