| 항목 | 질문 |
|---|---|
| 처리율 제한 장치 설계의 종류 | 클라이언트 측? 서버 측? |
| API 호출 제어 기준 | 주소? 사용자 ID? 기타? |
| 시스템 규모 | 스타트업? 대규모? |
| 동작 환경 | 분산 환경 여부 |
| 독립된 서비스? 앱 코드 포함? | |
| UX | 사용자의 요청이 처리율 제한 장치에 의해 걸러진 경우 사용자에게 알림 여부? |
distributed rate limiting)fault tolerance)| 구분 | API 게이트웨이 | 미들웨어 |
|---|---|---|
| 적용 환경 | 마이크로서비스 아키텍처 | 레거시 모놀리식 아키텍처 |
| 특징 | 현대적인 접근법, 완전 위탁 관리형 서비스(fully managed) 가능 (AWS API Gateway, NGINX, Kong 등) | 웹 프레임워크 내에 직접 구현 |
| 지원 기능 | 인증, 로깅, 라우팅, SSL 종료, IP 관리, 처리율 제한 등 종합 기능 내장 | 단순 처리율 제한 + 비즈니스 로직 연동 |
| 정책 관리 | 중앙화된 정책 관리 / 비즈니스 로직과 분리 | 서비스별 개별 구현, 정책 변경 시 코드 배포 필요 |
| 운영 측면 | 다중 서비스 지원, 운영팀이 실시간 제어 가능 | 각 서비스 코드 내 변경 필요, 배포 주기와 강하게 연동 |
| 장점 | 통합 관리, 확장성, 운영 효율성 | 세밀한 로직 연동, 외부 게이트웨이 불필요 |
| 단점 | 초기 도입/구축 복잡성, 게이트웨이에 대한 의존성 | 중복 구현, 유지보수 비용 증가, 확장성 한계 |
token bucket)leaky bucket)fixed window counter)sliding window log)sliding window counter)INCR와 EXPIRE로 원자적 증가 및 TTL 관리Too Many Requests) 반환X-RateLimit-Limit (총 한도)X-RateLimit-Remaining (남은 요청 수)X-RateLimit-Reset (초기화 시각)Retry-After (재시도까지 대기 시간)INCR + EXPIRE 조합 (원자적 연산)Hard): 절대적인 임계치 제한Soft): 초과 요청은 큐에 대기 또는 일부 기능만 제한계층형 방어 (Defense in Depth)
동적 임계값 조정
응답 헤더 제공 (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
제한 시 429와 함께 안내 메시지, Retry-After 제공
클라이언트가 자체적으로 요청을 조절할 수 있도록 지원
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1640995200
Retry-After: 60
{
"error": "rate_limit_exceeded",
"message": "API rate limit exceeded",
"retry_after_seconds": 60
}
2초 ~ 3초, 4초 ~ 6초 범위 안에서 랜덤 대기 → 동기화 회피