요청 폭주와 서비스 남용을 막으면서, 여러 API 서버가 하나의 제한 상태를 안전하게 공유하는 구조를 설계합니다.
시스템 디자인 아틀라스 편집팀·마지막 기술 검토 2026.08.23·다이어그램 5개
3분 요약
개념 이해
면접 답변
실무 확장
진도 저장 ✓
⚡30초 핵심 요약
레이트 리미터는 일정 시간 동안 허용할 요청 수를 제한합니다. 단일 서버에서는 메모리 카운터로 충분하지만, 여러 서버가 동시에 요청을 처리하면 공유 상태와 원자적 갱신이 필요합니다. 이 설계에서는 API Gateway 뒤에 분산 레이트 리미터를 두고 Redis Lua Script로 토큰 차감을 원자적으로 처리합니다.
예시 목표 처리량 (설계 가정)1,200,000 req/s
판정 지연 목표 (설계 가정)P99 < 10ms
일관성 우선순위중복 허용보다 과금 보호
01 · REQUIREMENTS
무엇을 제한할 것인가?
# 요구사항
사용자, API Key, IP, 조직, 엔드포인트별로 서로 다른 정책을 적용하고, 제한 판정은 애플리케이션 요청보다 먼저 끝나야 합니다.
F1다중 정책
사용자·조직·API별 제한량과 윈도우를 설정합니다.
F2빠른 판정
정상 요청 경로에 추가되는 지연을 최소화합니다.
F3분산 공유
여러 서버가 동일한 사용량 상태를 확인합니다.
F4정확한 응답
429와 남은 횟수·재시도 시각을 전달합니다.
02 · HIGH-LEVEL DESIGN
고수준 아키텍처
# 아키텍처
요청은 Gateway에서 인증된 뒤 레이트 리미터로 전달됩니다. 정책과 사용량은 분리해 캐시하며, 판정 결과와 오류율은 관측 시스템으로 전송합니다.
분산 레이트 리미터 · 요청 판정 흐름 SVG DIAGRAM · 확대 가능
◉ClientWeb · Mobile · SDK
⇄API Gateway인증 · 정책 키 추출
⚡Rate Limiter정책 조회 · 토큰 차감 · 429 응답
Token BucketLua Script
▦Redis Cluster공유 카운터 · 정책 캐시
▤Application허용된 요청 처리
↗Observability허용률 · 거부율 · P99
설계 포인트 — Redis 장애 시 모든 요청을 차단할지(Fail Closed), 임시로 허용할지(Fail Open)는 API의 위험도와 비용 구조에 따라 정책별로 결정합니다.
03 · REQUEST FLOW
요청은 어떻게 판정되는가?
# 처리 흐름
1제한 키 생성
userId + endpoint + policyVersion으로 키를 만듭니다.
2정책 조회
로컬 캐시에서 용량과 보충률을 확인합니다.
3원자적 차감
Lua Script로 토큰 확인과 감소를 한 번에 수행합니다.
4응답·관측
허용 또는 429를 반환하고 메트릭을 기록합니다.
04 · ALGORITHM
알고리즘 비교
# 트레이드오프
서비스 특성에 따라 버스트 허용 여부와 메모리 비용이 달라집니다. 기본안은 Token Bucket이며, 엄격한 균등 처리에는 Leaky Bucket을 고려합니다.