스로틀링, 캐싱 및 사용량 계획
버스트 및 정상 상태 스로틀링 한도로 백엔드를 보호하고 응답 캐싱을 활성화하며 파트너용 API 키가 포함된 사용량 계획을 생성합니다.
스로틀링, 캐싱 및 사용량 계획은(는) CoddyKit의 무료 AWS Solutions Architect 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AWS Solutions Architect 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.
제한이 필수적인 이유
제한이 없다면 잘못 작동하는 단일 클라이언트나 트래픽 급증으로 인해 백엔드 서비스(Lambda 동시성, RDS 연결 또는 다운스트림 API)가 과부하될 수 있습니다. API Gateway의 제한은 초당 요청 수를 제한하고 안정적인 처리율을 초과하는 짧은 급증을 허용합니다. 제한된 요청은 429 Too Many Requests 응답을 즉시 받으며 백엔드에 도달하지 않으므로 다운스트림 리소스를 과부하로부터 보호합니다.
계정 수준 및 스테이지 수준 제한
제한은 여러 수준에서 적용됩니다. 계정 수준 제한은 초당 10,000개 요청(RPS)이며 5,000개 요청의 버스트를 허용합니다(소프트 제한이므로 늘릴 수 있음). 스테이지 수준에서는 스테이지의 모든 method에 적용되는 기본 제한 속도(RPS)와 버스트 제한을 설정할 수 있습니다. method 수준에서는 특정 엔드포인트에 대해 스테이지 기본값을 재정의할 수 있습니다. 예를 들어 읽기 요청이 많은 GET 엔드포인트에 쓰기 요청이 많은 POST 엔드포인트보다 높은 제한 속도를 부여할 수 있습니다.
aws apigateway update-stage \
--rest-api-id 'abc123' \
--stage-name 'prod' \
--patch-operations \
'op=replace,path=/*/*/throttling/rateLimit,value=1000' \
'op=replace,path=/*/*/throttling/burstLimit,value=2000'토큰 버킷 알고리즘
API Gateway의 제한에는 토큰 버킷 알고리즘이 사용됩니다. 토큰은 burstLimit(순간 최대 용량)에 도달할 때까지 버킷에 누적됩니다. 요청 하나가 토큰 하나를 소비합니다. 토큰은 rateLimit(안정적인 RPS)에 따라 다시 채워집니다. 버킷이 비어 있으면 요청이 제한됩니다. 예를 들어 burst=5000, rate=1000 RPS인 경우 시작 시 5,000개의 동시 요청을 처리할 수 있고 버킷은 초당 1,000개의 토큰으로 다시 채워집니다. 따라서 짧은 트래픽 급증을 흡수하면서 장기적인 처리율 제한을 적용할 수 있습니다.
API Gateway 응답 캐싱
응답 캐싱(REST API 스테이지에서 사용 가능)은 백엔드 응답을 API Gateway가 관리하는 캐시에 저장하므로 동일한 요청을 백엔드 호출 없이 캐시에서 제공할 수 있습니다. 이를 통해 백엔드 부하와 지연 시간을 줄이고 읽기 요청이 많은 API에서 Lambda 호출 비용을 크게 절감할 수 있습니다. 캐시의 키는 요청(method, 경로, 쿼리 문자열 및 구성에 따른 헤더)로 설정됩니다. 캐시 TTL은 0~3600초 범위에서 구성할 수 있으며 기본값은 300초입니다.
aws apigateway update-stage \
--rest-api-id 'abc123' \
--stage-name 'prod' \
--patch-operations \
'op=replace,path=/cacheClusterEnabled,value=true' \
'op=replace,path=/cacheClusterSize,value=0.5' \
'op=replace,path=/*/*/caching/ttlInSeconds,value=300'캐시 키 사용자 지정
기본적으로 캐시 키는 전체 요청 URL입니다. 캐시 키에 포함할 요소를 사용자 지정할 수 있습니다. 특정 쿼리 문자열 매개변수(예: pageSize, filter)는 포함하고 관련 없는 매개변수(예: 타임스탬프)는 제외할 수 있습니다. 특정 헤더를 캐시 키에 포함할 수도 있습니다. 민감한 헤더는 캐시 키에서 제외하여 개인 데이터가 공유 캐시 항목에 섞이지 않도록 하십시오. 캐시 키를 조정하여 캐시 적중률을 최대화하는 동시에 논리적으로 서로 다른 요청이 서로 다른 캐시 응답을 받도록 하십시오.
캐시 무효화
클라이언트는 Cache-Control: max-age=0 헤더를 포함하여 특정 요청의 캐시를 무효화할 수 있습니다. 콘솔 또는 API에서 전체 스테이지 캐시를 비울 수도 있습니다. 클라이언트의 캐시 무효화 허용 여부를 구성할 수 있습니다. 클라이언트가 의도적으로 캐싱을 우회하지 못하도록 프로덕션에서는 이 기능을 제한하십시오. 선택적으로 비우기 권한을 부여하려면 리소스 정책을 연결하거나, 호출자에게 비우기 권한이 있는지 확인하는 Lambda 권한 부여자를 사용하십시오.
# Flush entire stage cache
aws apigateway flush-stage-cache \
--rest-api-id 'abc123' \
--stage-name 'prod'사용량 계획: 클라이언트별 속도 제한
사용량 계획은 API 클라이언트 그룹에 대한 제한 속도와 할당량 제한을 정의합니다. API 스테이지를 사용량 계획에 연결한 다음 API 키를 계획에 연결하십시오. 각 API 키는 계획의 제한을 독립적으로 적용합니다. 사용량 계획을 사용하면 단계별 액세스를 제공할 수 있습니다. 예를 들어 무료 계획은 100 RPM/일일 10,000건의 요청, Pro 계획은 1,000 RPM/일일 100,000건의 요청을 허용할 수 있습니다. 이는 서로 다른 클라이언트에 서로 다른 속도 제한이 필요한 수익화된 API와 파트너 통합에 사용하는 모델입니다.
# Create a usage plan
aws apigateway create-usage-plan \
--name 'ProTier' \
--throttle 'rateLimit=1000,burstLimit=2000' \
--quota 'limit=100000,period=DAY' \
--api-stages 'apiId=abc123,stage=prod'API 키와 클라이언트 식별
API 키는 클라이언트가 x-api-key 요청 헤더에 포함하는 불투명한 문자열 토큰입니다. API Gateway는 키를 검증하고 해당 요청을 연결된 사용량 계획과 연관시킵니다. API 키는 보안 메커니즘이 아닙니다. 속도 제한과 할당량 적용을 위해 클라이언트를 식별할 뿐입니다. 보안을 위해 API 키를 항상 적절한 권한 부여(IAM, Lambda 권한 부여자 또는 Cognito)와 함께 사용하십시오. 사용량 계획에 연결되지 않은 API 키에는 속도 제한이 적용되지 않습니다.
# Create an API key and associate with usage plan
aws apigateway create-api-key \
--name 'PartnerABC-Key' \
--enabled
aws apigateway create-usage-plan-key \
--usage-plan-id 'uvw321' \
--key-id 'xyz789' \
--key-type API_KEY사용량 계획의 할당량 제한
사용량 계획은 초당 제한 속도뿐 아니라 할당량 제한도 지원합니다. 할당량 제한은 일정 기간(DAY, WEEK 또는 MONTH) 동안 허용되는 최대 요청 수입니다. 클라이언트가 할당량을 모두 사용하면 할당량이 재설정될 때까지 이후 요청에 429가 반환됩니다. 할당량 제한은 무료 등급 적용, API 악용 방지, API 사용량과 결제의 연계에 유용합니다. 할당량 카운터는 최종적 일관성을 사용하므로 클라이언트가 차단되기 전에 할당량을 약간 초과할 수 있습니다.
스로틀링 및 캐싱을 위한 CloudWatch 지표
다음 CloudWatch 지표로 API Gateway의 상태를 모니터링하십시오.
- Count: 전체 API 호출 수
- 4XXError: 429 스로틀링을 포함한 클라이언트 오류
- 5XXError: 백엔드 오류
- Latency: 종단 간 요청 시간
- IntegrationLatency: 백엔드 응답을 기다리는 시간
- CacheHitCount / CacheMissCount: 캐시 효율성
사용자에게 영향을 주기 전에 스로틀링 문제를 감지할 수 있도록 4XXError 급증에 대한 경보를 설정하고, 캐시 구성 문제를 식별할 수 있도록 CacheMissCount에도 경보를 설정하십시오.
캐싱과 스로틀링을 활성화할 시점
응답이 자주 변경되지 않는 읽기 중심 API에는 캐싱을 사용하십시오. 예를 들면 제품 카탈로그 조회, 참조 데이터, 정적 구성이 있습니다. 사용자별 데이터나 매우 동적인 데이터에는 캐싱이 오히려 비효율적입니다. 백엔드 서비스를 과부하로부터 보호하려면 내부 API에서도 항상 스로틀링을 사용하십시오. 두 기능을 함께 사용하십시오. 일반적인 데이터는 캐시하여 백엔드 부하를 줄이고, 단일 클라이언트가 API를 독점하지 못하도록 적극적으로 요청을 제한하십시오. SAA-C03 시험에서는 캐싱이 비용과 지연 시간을 줄이고, 스로틀링이 가용성을 보장한다는 점을 기억하십시오.
빠른 확인
이 레슨에서 다룬 AWS Solutions Architect(SAA-C03) 개념에 대한 이해도를 확인하십시오.
레슨 요약
이 레슨에서는 다음을 배웠습니다. 계정, 스테이지, 메서드 수준의 스로틀링은 구성 가능한 속도 및 버스트 제한이 있는 토큰 버킷 알고리즘을 사용하여 백엔드를 보호합니다. 응답 캐싱은 구성 가능한 TTL 동안 백엔드 응답을 저장하여 읽기 중심 엔드포인트의 백엔드 부하와 지연 시간을 줄입니다. 또한 API 키가 포함된 사용량 계획은 클라이언트별 제한 속도와 할당량을 적용하여 파트너 및 공개 API에 단계별 액세스 제어를 제공합니다. 다음으로 컨테이너화된 워크로드를 위한 ECS 클러스터, 작업 정의, 서비스를 살펴보겠습니다.
자주 묻는 질문
“스로틀링, 캐싱 및 사용량 계획” 강의는 무료인가요?
네 — “스로틀링, 캐싱 및 사용량 계획” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AWS Solutions Architect 강의 전체를 잠금 해제할 수 있습니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.
“스로틀링, 캐싱 및 사용량 계획”에서 뭘 배우나요?
버스트 및 정상 상태 스로틀링 한도로 백엔드를 보호하고 응답 캐싱을 활성화하며 파트너용 API 키가 포함된 사용량 계획을 생성합니다. 브라우저에서 직접 실행하는 실습 코드로 AWS Solutions Architect을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AWS Solutions Architect을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AWS Solutions Architect은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“스로틀링, 캐싱 및 사용량 계획” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AWS Solutions Architect 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AWS Solutions Architect 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- REST API, HTTP API 및 WebSocket API 비교
- 통합: Lambda, HTTP 및 모의 통합
- 권한 부여: IAM, Lambda 권한 부여자 및 Cognito
- 스로틀링, 캐싱 및 사용량 계획