0Pricing
C# Academy · 강의

요청 제한 미들웨어 구성

엔드포인트와 정책별로 요청 제한을 적용합니다.

요청 제한 미들웨어 구성은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 요청 제한 알고리즘
  2. 요청 제한 미들웨어 구성
  3. 출력 캐싱 기초
  4. 캐시 정책과 무효화
← C# Academy(으)로 돌아가기