0Pricing
PHP Academy · 강의

요청 제한 및 API 버전 관리

RateLimiter로 요청을 제한하고 API 버전을 깔끔하게 관리합니다.

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

요청률을 제한하는 이유

요청률 제한은 API를 악용, DoS 공격 및 폭주하는 클라이언트로부터 보호합니다. 모든 사용자에게 리소스가 공정하게 분배되도록 합니다.

라라벨 기본 요청 제한

throttle 미들웨어를 적용하여 시간 범위별 요청 수를 제한합니다.

<?php
Route::middleware("throttle:60,1")->group(function () {
    // 60 requests per 1 minute per user/IP
    Route::apiResource("posts", PostController::class);
});

사용자 지정 요청 제한기

서비스 제공자에서 사용자 지정 로직을 사용하는 이름 있는 요청 제한기를 정의합니다.

<?php
// In AppServiceProvider::boot():
RateLimiter::for("api", function (Request $request) {
    return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});

// Apply:
Route::middleware("throttle:api")->group(fn() => ...);

단계별 요청 제한

인증된 사용자의 요금제에 따라 서로 다른 제한을 반환합니다.

<?php
RateLimiter::for("api", function (Request $request) {
    return match($request->user()?->plan) {
        "pro"  => Limit::perMinute(300)->by($request->user()->id),
        "free" => Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()),
        default => Limit::perMinute(30)->by($request->ip()),
    };
});

요청 제한 응답 헤더

요청이 제한되면 Laravel은 다음 헤더와 함께 HTTP 429를 반환합니다: X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After.

API 버전 관리 전략

일반적인 접근 방식은 다음 세 가지입니다.

  1. URL 접두사: /api/v1/users
  2. 쿼리 매개변수: /api/users?version=1
  3. Accept 헤더: Accept: application/vnd.myapp.v1+json

URL 접두사는 Laravel API에서 가장 일반적으로 사용됩니다.

URL 접두사를 사용한 버전 관리

버전 접두사 아래에 경로를 그룹화합니다.

<?php
Route::prefix("v1")->group(function () {
    Route::apiResource("users", \App\Http\Controllers\Api\V1\UserController::class);
});

Route::prefix("v2")->group(function () {
    Route::apiResource("users", \App\Http\Controllers\Api\V2\UserController::class);
});

버전별 컨트롤러

다음과 같이 하위 디렉터리에서 버전별로 컨트롤러를 구성합니다: App\Http\Controllers\Api\V1\ 및 App\Http\Controllers\Api\V2\.

이전 버전 사용 중단

구버전 응답에 Deprecation 또는 Sunset 헤더를 추가하여 클라이언트에 곧 제거될 예정임을 알립니다.

<?php
// Middleware for v1 routes:
$response->headers->set("Deprecation", "version="v1"");
$response->headers->set("Sunset", "2026-01-01");

API 리소스와 버전 관리

버전별 API 리소스인 V1\UserResource와 V2\UserResource를 사용하여 버전마다 서로 다른 응답 구조를 구성합니다.

요청 제한 테스트

테스트 간 간섭을 피하려면 테스트에서 요청 제한기를 모의 처리합니다.

<?php
RateLimiter::shouldReceive("tooManyAttempts")->andReturn(false);

요약

기본 요청 제한에는 throttle:60,1을 적용합니다. 사용자 지정 단계별 제한에는 RateLimiter::for()를 사용합니다. URL 접두사와 버전별 컨트롤러 및 리소스로 API 버전을 관리합니다.

빠른 확인

요청 제한을 초과하면 Laravel은 어떤 HTTP 상태 코드를 반환합니까?

자주 묻는 질문

“요청 제한 및 API 버전 관리” 강의는 무료인가요?

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

“요청 제한 및 API 버전 관리”에서 뭘 배우나요?

RateLimiter로 요청을 제한하고 API 버전을 깔끔하게 관리합니다. 브라우저에서 직접 실행하는 실습 코드로 PHP Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“요청 제한 및 API 버전 관리” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. API 경로 및 리소스 컨트롤러
  2. API 리소스 및 JSON 응답
  3. Laravel Sanctum으로 인증하기
  4. 요청 제한 및 API 버전 관리
← PHP Academy(으)로 돌아가기