[정보] 잡동사니

[정보] http 429 응답코드 해결법

  • -
반응형

🚦 HTTP 429 응답코드란? 해결 방법 총정리

HTTP 429 Too Many Requests 응답 코드는 클라이언트가 짧은 시간 안에 너무 많은 요청을 서버에 보냈을 때 발생합니다. 이는 서버가 트래픽을 조절하고, 서비스의 안정성을 유지하기 위해 적용하는 Rate Limiting(요청 제한) 메커니즘 때문입니다.

 

 

 

 

 

 

🧐 1. HTTP 429 상태 코드 원인

  • 🚀 API 요청 과부하: 일정 시간 내 너무 많은 API 요청 전송
  • 🔄 봇 또는 스크래핑: 자동화된 크롤링이 과도하게 실행될 경우
  • 🔄 잘못된 클라이언트 구현: 적절한 딜레이 없이 요청을 연속적으로 보냄
  • 서버 측 Rate Limiting: API 제공자가 클라이언트 요청 수를 제한함

 

 

 

 

 

 

 

🔧 2. HTTP 429 해결 방법

✅ 1) 요청 속도 조절 (Rate Limit 고려)

API 요청 시 일정한 간격을 두고 요청해야 합니다. 예를 들어, 0.5~1초의 간격을 추가하면 429 오류를 방지할 수 있습니다.


import time
import requests

url = "https://api.example.com/data"

for i in range(10):
    response = requests.get(url)
    if response.status_code == 429:
        print("429 오류 발생! 대기 후 재시도 중...")
        time.sleep(5)  # 5초 대기 후 재시도
    else:
        print(response.json())  # 정상 응답
    time.sleep(1)  # 1초 간격 요청

 

 

 

 

✅ 2) Retry-After 헤더 확인

서버가 Retry-After 헤더를 제공하는 경우, 해당 시간이 지나면 요청을 다시 보내야 합니다.


import requests
import time

url = "https://api.example.com/data"
response = requests.get(url)

if response.status_code == 429:
    retry_after = int(response.headers.get("Retry-After", 5))  # 기본 5초 대기
    print(f"429 오류 발생! {retry_after}초 후 다시 요청")
    time.sleep(retry_after)
    response = requests.get(url)  # 재시도

 

 

 

 

✅ 3) API 키 변경 또는 업그레이드

일부 API는 무료 사용자에게 요청 제한을 적용할 수 있습니다. 제한을 완화하려면:

  • 🔑 새 API 키 생성 (가능한 경우)
  • 📈 유료 플랜 업그레이드 (제한 증가)
  • 🔀 다중 API 키 활용 (로테이션 적용)

 

 

 

 

✅ 4) IP 변경 (IP 기반 Rate Limiting 대응)

일부 서버는 같은 IP에서 너무 많은 요청이 오면 차단할 수 있습니다. 이를 해결하는 방법:

  • 🔄 VPN 또는 프록시 사용
  • 🔄 다중 IP를 가진 서버 활용
  • 🔄 IP 로테이션 적용 (프록시 변경)

 

 

 

 

✅ 5) 백엔드에서 캐싱 적용

동일한 요청이 반복적으로 발생하면, 백엔드에서 캐싱을 적용하여 불필요한 API 호출을 줄일 수 있습니다.


from cachetools import TTLCache

cache = TTLCache(maxsize=100, ttl=300)  # 5분 캐싱

def get_data(url):
    if url in cache:
        return cache[url]
    response = requests.get(url)
    if response.status_code == 200:
        cache[url] = response.json()
    return response.json()

 

 

 

 

🛠️ 3. 429 오류 방지를 위한 Best Practice

  • 🕒 요청 간격을 두고 실행
  • 📌 Retry-After 헤더 활용
  • 📊 API 요청량 모니터링
  • 📡 IP 로테이션 고려
  • 💾 캐싱 적용하여 중복 요청 방지

 

 

 

 

 

🔗 관련 문서 및 링크

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.