피드로 돌아가기
Dev.toBackend
원문 읽기
.NET 7 내장 Rate Limiting을 활용한 API 가용성 확보 및 429 대응 전략
Rate Limiting in C# — Don't Let Your API Get Hammered
AI 요약
Context
공개 API 환경에서 무분별한 Request 유입으로 인한 인프라 과부하와 Downstream Dependency의 Fan-out 남용 위험 존재. 특히 단순 Auth 처리만으로는 DoS 벡터 및 Noisy Neighbour 문제를 완전히 해결할 수 없는 아키텍처적 한계 직면.
Technical Solution
- System.Threading.RateLimiting 라이브러리를 통한 외부 의존성 없는 고성능 제한 로직 구현
- 서비스 특성에 따른 4가지 알고리즘(Fixed Window, Sliding Window, Token Bucket, Concurrency) 차등 적용
- HTTP Context 기반 Partition Key 설계를 통한 사용자/엔드포인트별 정밀한 Quota 제어
- RFC 규격 준수를 위한 503 상태 코드를 429 Too Many Requests 및 Retry-After 헤더 제공 방식으로 변경
- Polly Resilience Handler 연동을 통한 Client-side Exponential Backoff 및 Retry 메커니즘 구축
- 단일 노드 기반 In-process Limiter의 한계를 극복하기 위한 Redis 기반 Distributed Limiter 확장 구조 제안
실천 포인트
1. API 특성에 맞는 알고리즘 선택: 단순 쿼터는 Fixed, 부드러운 트래픽 제어는 Sliding, Burst 허용은 Token Bucket, 리소스 집약적 작업은 Concurrency Limiter 검토
2. Partition Key 최적화: NAT/Proxy로 인한 오탐 방지를 위해 IP 주소보다 인증된 User ID를 우선 사용
3. 분산 환경 고려: 멀티 레플리카 배포 시 Pod별 Limit 합산으로 인한 임계치 초과 가능성을 확인하고 Redis 기반 전역 상태 관리 도입 검토
4. 클라이언트 회복력 설계: 서버의 429 응답에 대응하는 Polly 기반의 재시도 전략 수립