요청 제한 미들웨어 구성
엔드포인트와 정책별로 요청 제한을 적용합니다.
요청 제한 미들웨어 구성은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
AddRateLimiter
구성은 서비스 컨테이너에서 AddRateLimiter를 사용하는 것부터 시작합니다. 하나 이상의 이름이 지정된 정책과 선택적인 전역 거부 상태 코드를 정의합니다.
builder.Services.AddRateLimiter(options =>
{
options.RejectionStatusCode =
StatusCodes.Status429TooManyRequests;
});고정 구간 정책
AddFixedWindowLimiter는 이름이 지정된 정책을 등록합니다. 허용 요청 수, 구간 길이 및 대기열 동작을 설정합니다.
options.AddFixedWindowLimiter("fixed", limiter =>
{
limiter.PermitLimit = 100;
limiter.Window = TimeSpan.FromMinutes(1);
limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
limiter.QueueLimit = 0;
});이동 구간 정책
AddSlidingWindowLimiter는 평활화 세분성을 제어하는 SegmentsPerWindow를 추가합니다.
options.AddSlidingWindowLimiter("sliding", limiter =>
{
limiter.PermitLimit = 100;
limiter.Window = TimeSpan.FromMinutes(1);
limiter.SegmentsPerWindow = 6;
limiter.QueueLimit = 0;
});토큰 버킷 정책
AddTokenBucketLimiter는 버킷 크기와 토큰 보충 속도를 설정합니다.
options.AddTokenBucketLimiter("token", limiter =>
{
limiter.TokenLimit = 100;
limiter.TokensPerPeriod = 20;
limiter.ReplenishmentPeriod = TimeSpan.FromSeconds(10);
limiter.QueueLimit = 0;
});동시성 정책
AddConcurrencyLimiter는 동시에 처리되는 요청 수를 제한합니다.
options.AddConcurrencyLimiter("concurrent", limiter =>
{
limiter.PermitLimit = 5;
limiter.QueueLimit = 10;
limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
});미들웨어 추가
UseRateLimiter를 사용해 처리 파이프라인에서 요청 속도 제한을 활성화합니다. 라우팅 이후의 이른 단계에 배치합니다.
var app = builder.Build();
app.UseRateLimiter();
app.MapControllers();RequireRateLimiting
RequireRateLimiting으로 엔드포인트에 이름이 지정된 정책을 적용하거나(최소 API), [EnableRateLimiting] 특성을 사용합니다(컨트롤러).
app.MapGet("/search", () => Results.Ok())
.RequireRateLimiting("token");
// Controller equivalent:
// [EnableRateLimiting("token")]특정 엔드포인트에서 비활성화
DisableRateLimiting 또는 [DisableRateLimiting]을 사용해 그룹 또는 전역 제한기에서 엔드포인트를 제외합니다.
app.MapGet("/health", () => Results.Ok())
.DisableRateLimiting();분할을 사용하는 전역 제한기
GlobalLimiter는 모든 요청에 적용됩니다. PartitionedRateLimiter.Create를 사용하면 사용자 또는 IP마다 고유한 카운터를 제공할 수 있습니다.
options.GlobalLimiter = PartitionedRateLimiter.Create<HttpContext, string>(
context =>
{
var key = context.User.Identity?.Name
?? context.Connection.RemoteIpAddress?.ToString()
?? "anon";
return RateLimitPartition.GetFixedWindowLimiter(key, _ =>
new FixedWindowRateLimiterOptions
{
PermitLimit = 100,
Window = TimeSpan.FromMinutes(1)
});
});거부 응답 사용자 지정
OnRejected를 사용하면 요청이 처리 속도 제한을 받을 때 Retry-After 헤더나 이해하기 쉬운 본문을 추가할 수 있습니다.
options.OnRejected = async (context, token) =>
{
if (context.Lease.TryGetMetadata(
MetadataName.RetryAfter, out var retry))
context.HttpContext.Response.Headers.RetryAfter =
((int)retry.TotalSeconds).ToString();
await context.HttpContext.Response
.WriteAsync("Rate limit exceeded.", token);
};경로 그룹에 적용
전체 경로 그룹에 정책을 연결하면 그룹 안의 모든 엔드포인트가 제한을 공유합니다.
var api = app.MapGroup("/api")
.RequireRateLimiting("fixed");
api.MapGet("/products", () => Results.Ok());
api.MapGet("/orders", () => Results.Ok());빠른 확인
미들웨어 설정을 확인합니다.
복습
요청 속도 제한을 구성했습니다:
AddRateLimiter는 고정 구간, 이동 구간, 토큰 버킷 및 동시성 정책을 정의합니다.UseRateLimiter는 미들웨어를 활성화하고,RequireRateLimiting은 정책을 적용합니다.GlobalLimiter와PartitionedRateLimiter를 함께 사용하면 클라이언트별 카운터를 제공합니다.OnRejected는 429 응답을 사용자 지정합니다.
다음 학습 내용: 출력 캐싱
자주 묻는 질문
“요청 제한 미들웨어 구성” 강의는 무료인가요?
네 — “요청 제한 미들웨어 구성” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“요청 제한 미들웨어 구성”에서 뭘 배우나요?
엔드포인트와 정책별로 요청 제한을 적용합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“요청 제한 미들웨어 구성” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 요청 제한 알고리즘
- 요청 제한 미들웨어 구성
- 출력 캐싱 기초
- 캐시 정책과 무효화