AI Agents · 강의

속도 제한 및 할당량 관리

사용자별, 조직별, 엔드포인트별 할당량을 설정해 한 테넌트가 OpenAI 예산을 모두 소진하지 못하게 해보세요.

레슨 3/415개 단계

속도 제한 및 할당량 관리은(는) CoddyKit의 무료 AI Agents 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Agents 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.

이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.

왜 제한이 필요한가요?

제한이 없으면 악의적인 클라이언트 하나가 다음과 같은 일을 할 수 있습니다.

  • OpenAI 예산을 모두 소진합니다
  • 다른 사용자가 이용할 자리를 빼앗습니다
  • 서비스를 DDoS 공격에 노출합니다

속도 제한과 할당량은 비용, 지연 시간, 공정성을 보호합니다.

속도 제한과 할당량 비교

  • 속도 제한 — 초당/분당 요청 수(단기)
  • 할당량 — 일/월별 총예산(장기)

둘 다 필요합니다.

토큰 버킷 알고리즘

고전적인 알고리즘은 다음과 같습니다. 각 사용자에게 고정된 속도로 다시 채워지는 "버킷"이 있습니다. 각 요청은 토큰 하나를 사용합니다. 토큰이 없으면 서비스를 제공하지 않습니다.

Redis Token Bucket Example

def allow(user_id, rate=10, capacity=30):
    key = f'rate:{user_id}'
    now = time.time()
    pipe = redis.pipeline()
    pipe.hgetall(key)
    state, _ = pipe.execute()
    tokens = float(state.get('tokens', capacity))
    last = float(state.get('last', now))
    tokens = min(capacity, tokens + (now - last) * rate)
    if tokens < 1:
        return False
    tokens -= 1
    redis.hset(key, mapping={'tokens': tokens, 'last': now})
    redis.expire(key, 60)
    return True

FastAPI Integration with slowapi

# pip install slowapi
from slowapi import Limiter
from slowapi.util import get_remote_address

limiter = Limiter(key_func=get_remote_address)
app.state.limiter = limiter

@app.post('/agents/qa')
@limiter.limit('10/minute')
def qa(req: AgentRequest):
    ...

Different Limits Per Tier

class User:
    def __init__(self, is_pro):
        self.is_pro = is_pro

class State:
    def __init__(self, is_pro):
        self.user = User(is_pro)

class Req:
    def __init__(self, is_pro):
        self.state = State(is_pro)

def limit_for(req):
    return '100/minute' if req.state.user.is_pro else '10/minute'

def qa(req):
    limit = limit_for(req)
    print(f'user is_pro={req.state.user.is_pro} -> rate limit {limit}')
    return limit

qa(Req(is_pro=True))
qa(Req(is_pro=False))

비용 기반 할당량

요청 수만이 아니라 비용도 제한하십시오.

def check_budget(user_id, predicted_cost):
    key = f'cost:{user_id}:{date.today()}'
    spent = float(redis.get(key) or 0)
    if spent + predicted_cost > daily_budget(user_id):
        raise HTTPException(429, 'Daily budget exceeded')

# After the call:
redis.incrbyfloat(key, actual_cost)
redis.expireat(key, midnight_tomorrow_ts)

동시성 상한

사용자별로 처리 중인 요청 수도 제한하십시오.

key = f'inflight:{user_id}'
redis.sadd(key, request_id)
if redis.scard(key) > 3:
    raise HTTPException(429, 'Too many concurrent requests')
# Remove from set when the request finishes.

전역 속도 제한

자체 서비스가 하위 LLM API를 과도하게 호출하지 않도록 보호하십시오.

global_key = 'rate:global:llm'
if redis.incr(global_key) > 60:   # 60 calls per second
    raise HTTPException(503, 'Service overloaded')
redis.expire(global_key, 1)

Return Useful Errors

headers = {
    'X-RateLimit-Limit': '60',
    'X-RateLimit-Remaining': '0',
    'X-RateLimit-Reset': str(reset_time),
    'Retry-After': '30'
}
return JSONResponse({'error': 'rate-limited'}, status_code=429, headers=headers)

분산 속도 제한

여러 API 서버를 실행한다면 속도 제한을 공유해야 합니다. Redis가 표준 백엔드이며, Cloudflare와 Kong에는 관리형 대안이 있습니다.

버스트 허용량

실제 사용량은 순간적으로 집중됩니다. 작은 버스트를 허용하십시오(예: 속도가 초당 10회라면 한 번에 30개의 요청 허용). 토큰 버킷 구현은 더 높은 capacity를 사용하여 이를 자연스럽게 처리합니다.

알림

다음과 같은 경우에 알림을 보내십시오.

  • 전역 속도 제한 도달이 분당 X회를 초과할 때
  • 어떤 사용자가 지속적으로 제한에 도달할 때(업그레이드가 필요하거나 버그가 있을 가능성이 높습니다)
  • 일일 예산이 80%에 가까워질 때

이중 계층 보호

왜 속도 제한 BOTH AND 할당량을 사용합니까?

요약

속도 제한에는 토큰 버킷을, 할당량에는 비용 카운터를 사용하고, 사용자별 동시성 상한과 전역 장애 차단기를 적용하며, Retry-After가 포함된 유용한 429 응답을 반환합니다.

무료로 시작

AI 튜터와 함께 AI Agents을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
60
레슨
239

자주 묻는 질문

“속도 제한 및 할당량 관리” 강의는 무료인가요?

네 — “속도 제한 및 할당량 관리” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Agents 강의 전체를 잠금 해제할 수 있습니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.

“속도 제한 및 할당량 관리”에서 뭘 배우나요?

사용자별, 조직별, 엔드포인트별 할당량을 설정해 한 테넌트가 OpenAI 예산을 모두 소진하지 못하게 해보세요. 브라우저에서 직접 실행하는 실습 코드로 AI Agents을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AI Agents을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AI Agents은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“속도 제한 및 할당량 관리” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AI Agents 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AI Agents 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. API 뒤에서 에이전트 제공
  2. 비동기 작업 흐름 및 백그라운드 작업
  3. 속도 제한 및 할당량 관리
  4. 에이전트를 위한 블루-그린 및 카나리 배포
← AI Agents(으)로 돌아가기