ChatGPT API 요청 제한 및 Feign Retry 해결 방법



ChatGPT API 요청 제한 및 Feign Retry 해결 방법

AI 모듈을 활용하여 장문 텍스트 요약 기능을 개발하면서 OpenAI ChatGPT API를 사용하게 되었습니다. 그러나 API에는 요청 제한이 있어 이를 적절히 관리하지 않으면 오류가 발생할 수 있습니다. 이번 글에서는 API 요청 제한 문제를 해결하기 위한 접근 방법과 전략을 정리했습니다.

 

👉 ✅ 상세 정보 바로 확인 👈

 

API 요청 제한의 이해

요청 제한 종류

OpenAI ChatGPT API는 다음과 같은 요청 제한을 두고 있습니다:
RPM (Requests Per Minute): 분당 요청 수
RPD (Requests Per Day): 일일 요청 수
TPM (Tokens Per Minute): 분당 토큰 수



각 티어별로 이러한 요청 제한이 다르며, 예를 들어 무료 티어는 RPM이 3, RPD가 200, TPM이 40,000입니다. 이러한 제한을 초과하면 요청이 차단되므로, 효과적인 관리가 필요합니다.

해결 방안

  1. 요금제 올리기: 상위 티어로 업그레이드하면 요청 수가 증가하지만, 근본적인 해결책은 아닙니다.
  2. 슬라이딩 윈도우 알고리즘: Redis를 활용하여 요청 개수를 정확히 계산하는 방법입니다. 이 방식은 동시성 문제를 초래할 수 있어 복잡성을 증가시킵니다.
  3. 재시도 전략: 요청이 실패했을 때 일정 시간 대기 후 재시도합니다. 지수 백오프 전략을 적용하여 재시도 간격을 늘립니다.

 

👉 ✅ 상세 정보 바로 확인 👈

 

재시도 전략 구현

Feign Client의 재시도 기능

Feign Client는 기본적으로 IOException이 발생할 때만 재시도를 수행합니다. 하지만 429, 500, 503 상태 코드와 같은 요청 제한 오류에서도 재시도를 할 수 있도록 하는 방법을 찾았습니다.

내부 로직 분석

Feign Client의 HTTP 요청 처리방식과 에러 핸들링 로직을 분석하여, ErrorDecoder를 커스터마이즈하여 429와 500 이상의 상태 코드에서 RetryableException을 던지도록 설정했습니다. 이를 통해 재시도 로직이 정상적으로 작동하게 하였습니다.

구현 방법

  1. ErrorDecoder 커스터마이징: OpenAiErrorDecoder 클래스를 생성하여 특정 상태 코드에서 RetryableException을 반환하도록 설정했습니다.
  2. Retryer Bean 등록: Retryer.Default를 사용하여 초기 대기 시간, 최대 대기 시간, 최대 재시도 횟수를 설정했습니다.

java
@Bean
public Retryer retryer() {
return new Retryer.Default(5, 32, 5);
}

  1. 지수 백오프 방식 구현: OpenAiRetryer 클래스를 만들어 지수 증가 방식을 통해 재시도 간격을 설정했습니다.

성공률 검증

재시도 전략을 도입한 후 jMeter를 사용하여 API 요청 성공률을 테스트했습니다. 요청을 1,000건 보내었을 때, 재시도 도입 전에는 58.2%의 성공률을 보였으나, 재시도 도입 후 100% 성공률을 기록했습니다. 이는 평균 응답 시간이 길어지는 결과를 초래했지만, 성공 확률이 크게 향상되었습니다.

향후 고도화 방안

재시도 전략 외에도 API Key 변경이나 모델 변경을 통해 안정적인 API 요청을 할 수 있습니다. 요청 실패 시 API Key를 변경하거나, 모델을 변경하여 요청을 성공적으로 처리할 수 있도록 하는 방법은 요청 제한 문제를 더 효과적으로 해결할 수 있습니다.

이러한 전략을 통해 OpenAI ChatGPT API의 요청 제한 문제를 효과적으로 관리할 수 있습니다.

자주 묻는 질문

질문1: OpenAI API 요청 제한이란 무엇인가요?

OpenAI API 요청 제한은 분당 및 일일 요청 수, 분당 토큰 수와 같은 제한으로, 이를 초과하면 요청이 차단됩니다.

질문2: Feign Client의 재시도 기능은 어떻게 작동하나요?

Feign Client는 기본적으로 IOException 발생 시 재시도를 하며, 커스터마이징을 통해 특정 HTTP 오류 상태 코드에서도 재시도를 하도록 설정할 수 있습니다.

질문3: 지수 백오프란 무엇인가요?

지수 백오프는 재시도 간격을 지수적으로 증가시키는 방식으로, 초기 대기 시간 후 재시도할 때마다 대기 시간을 늘려주는 전략입니다.

질문4: 요청 제한을 해결하기 위한 다른 방법은 무엇이 있나요?

API 요청 제한을 해결하기 위해 API Key 변경, 요금제 업그레이드, 모델 변경 등의 방법을 고려할 수 있습니다.

질문5: 재시도 전략 도입 후 성공률은 어떻게 변화했나요?

재시도 전략 도입 후 API 요청의 성공률이 약 72% 증가했습니다.

이전 글: 2015 호주 오픈 슈퍼시리즈 배드민턴 남자복식 우승