요청 제한 알고리즘
고정, 슬라이딩, 토큰 및 동시성 제한 방식을 비교합니다.
요청 제한 알고리즘은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
요청을 제한하는 이유
요청 속도 제한은 클라이언트가 일정한 시간 구간에 보낼 수 있는 요청 수를 제한합니다. 이를 통해 API를 악용, 폭주하는 클라이언트 및 갑작스러운 트래픽 급증으로부터 보호하고 사용자 간 용량을 공정하게 유지할 수 있습니다.
// e.g. allow 100 requests per minute per API key기본 제공 요청 속도 제한
.NET 7부터 ASP.NET Core는 Microsoft.AspNetCore.RateLimiting에 네 가지 기본 제공 알고리즘을 갖춘 주요 요청 속도 제한 미들웨어를 제공합니다.
// Algorithms: Fixed Window, Sliding Window,
// Token Bucket, Concurrency고정 구간
고정 구간 알고리즘은 고정된 시간 블록마다 N개의 요청을 허용합니다. 블록이 끝나면 카운터가 0으로 재설정됩니다.
간단하지만 구간 경계에서 요청이 몰리면 실제 허용 속도가 잠시 두 배가 될 수 있습니다.
// 10 requests per 60s window
// All 10 used at 0:59, 10 more at 1:00 -> 20 in 2 seconds이동 구간
이동 구간 알고리즘은 시간 구간을 여러 세그먼트로 나누고 만료된 세그먼트를 앞으로 이동해 경계 문제를 완화합니다. 따라서 제한이 연속된 모든 시간 구간에 적용됩니다.
// 10 requests per 60s, 6 segments of 10s each
// The count slides as each segment expires토큰 버킷
토큰 버킷은 토큰을 담은 버킷을 유지합니다. 각 요청은 토큰 하나를 소비하고 토큰은 일정한 속도로 다시 채워집니다. 장기 평균을 제한하면서 버킷 크기만큼의 짧은 요청 폭주를 허용합니다.
// Bucket = 10 tokens, refill 5 tokens / 10s
// Burst of 10 allowed, then 5 every 10 seconds동시성 제한
동시성 제한은 다른 방식으로 작동합니다. 시간 단위별 요청 수가 아니라 동시에 처리되는 요청 수를 제한합니다. 비용이 큰 작업을 보호하는 데 적합합니다.
// At most 5 concurrent requests in flight
// The 6th waits in the queue or is rejected대기열
각 제한기는 제한을 초과한 요청을 즉시 거부하는 대신 대기열에 넣을 수 있습니다. QueueLimit은 대기열 크기를 설정하고 QueueProcessingOrder는 공정성(가장 오래된 요청 우선 또는 가장 새로운 요청 우선)을 설정합니다.
// QueueLimit = 2, OldestFirst
// Over-limit requests wait if a slot exists, else get 503/429알고리즘 선택
목표에 맞는 알고리즘을 선택합니다:
- 고정 구간: 가장 단순하며 많은 경우에 충분합니다.
- 이동 구간: 더 매끄럽고 경계에서의 요청 폭주를 방지합니다.
- 토큰 버킷: 제어된 요청 폭주를 허용합니다.
- 동시성: 속도가 아니라 동시에 처리되는 부하를 제한합니다.
// Bursty clients -> token bucket
// Expensive endpoint -> concurrency분할
제한은 분할 키별로 적용됩니다. 일반적으로 사용자, API 키 또는 IP를 사용하므로 한 클라이언트의 과도한 요청이 모든 사용자의 할당량을 소진시키지 않습니다. 하나의 공유 분할을 사용하면 모든 트래픽이 함께 제한됩니다.
// Partition by user id, IP, or API key
// Each partition gets its own independent counter클라이언트가 받는 결과
거부된 요청은 HTTP 429 요청이 너무 많음을 반환합니다. 정상적으로 동작하는 API는 클라이언트가 언제 다시 시도할 수 있는지 알려 주는 Retry-After 헤더도 반환합니다.
// HTTP/1.1 429 Too Many Requests
// Retry-After: 30요청 속도 제한, 처리 속도 조절 및 할당량 비교
서로 관련된 개념입니다. 요청 속도 제한은 단기간의 빈도를 제한하고, 할당량은 장기간의 총량(일별 또는 월별)을 제한하며, 처리 속도 조절은 요청을 거부하는 대신 느리게 처리합니다. 이 미들웨어는 요청 속도 제한에 중점을 둡니다.
// rate limit: 100/min quota: 10000/day빠른 확인
알고리즘에 대한 이해도를 확인합니다.
복습
요청 속도 제한의 개념을 배웠습니다:
- 네 가지 알고리즘: 고정 구간, 이동 구간, 토큰 버킷, 동시성
- 토큰 버킷은 요청 폭주를 허용하고, 동시성 제한은 동시에 처리되는 부하를 제한합니다.
- 제한은 분할 키별로 적용되며, 대기열은 초과 요청을 완화합니다.
- 거부된 요청은 429와 함께
Retry-After를 받습니다.
다음 학습 내용: 미들웨어 구성
자주 묻는 질문
“요청 제한 알고리즘” 강의는 무료인가요?
네 — “요청 제한 알고리즘” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“요청 제한 알고리즘”에서 뭘 배우나요?
고정, 슬라이딩, 토큰 및 동시성 제한 방식을 비교합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“요청 제한 알고리즘” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 요청 제한 알고리즘
- 요청 제한 미들웨어 구성
- 출력 캐싱 기초
- 캐시 정책과 무효화