// 간단한 캐싱 예제let cache = {};
asyncfunctiongetData(url) {
if (cache[url]) {
return cache[url];
}
const response = awaitfetch(url);
const data = await response.json();
cache[url] = data;
return data;
}
5) API 키를 분리
한 프로젝트에서 여러 API 키를 사용하여 요청을 분산합니다(가능한 경우).
5. 예제 코드
Python Flask에서 Rate Limit을 구현하는 예제:
from flask import Flask, request, jsonify
from time import time
app = Flask(__name__)
requests_store = {}
LIMIT = 5# 허용 요청 수
TIME_WINDOW = 60# 시간 제한 (초)@app.route('/api', methods=['GET'])defapi():
client_ip = request.remote_addr
now = time()
if client_ip notin requests_store:
requests_store[client_ip] = []
requests_store[client_ip] = [t for t in requests_store[client_ip] if now - t < TIME_WINDOW]
iflen(requests_store[client_ip]) < LIMIT:
requests_store[client_ip].append(now)
return jsonify({"message": "요청 성공"})
else:
return jsonify({"error": "429 Too Many Requests"}), 429if __name__ == '__main__':
app.run(debug=True)
6. 관련 HTTP 상태 코드
403 Forbidden: 접근이 거부되었을 때.
503 Service Unavailable: 서버가 요청을 처리할 준비가 되지 않았을 때.