피드로 돌아가기
Dev.toBackend
원문 읽기
Zero-dep Sliding Window 기반 Framework-agnostic Rate Limiter 구현
Why I Stopped Writing 15 * 60 * 1000 in Every Project
AI 요약
Context
express-rate-limit의 Fixed Window 알고리즘으로 인한 Boundary Burst 문제와 특정 프레임워크 의존성 해결 필요성 대두. 밀리초(ms) 단위의 설정 방식이 유발하는 가독성 저하와 유지보수 비용 증가를 해결하기 위한 설계 변경 추진.
Technical Solution
- Sliding Window Log 알고리즘 채택을 통한 Fixed Window의 시간 경계 지점 요청 폭주 문제 해결
- (req, res, next) 기반의 Universal Contract 설계를 통한 Express, Fastify, Koa 및 Vanilla HTTP 호환성 확보
- 메모리 내 Map 객체를 활용한 요청 타임스탬프 저장 및 매 요청 시 Cutoff 기반의 Pruning 로직으로 메모리 효율 최적화
- '15m', '1h' 등 Human-readable Time Window 파싱 로직 도입을 통한 설정 직관성 및 가독성 향상
- IETF draft-8 표준 RateLimit 헤더 및 Legacy 헤더 자동 생성을 통한 클라이언트 호환성 강화
- 빈번한 Use Case를 템플릿화한 Preset 시스템 구축으로 설정 복잡도 제거 및 배포 속도 개선
실천 포인트
1. 분산 환경이 아닌 단일 프로세스 앱에서 단순한 Rate Limiting이 필요한지 검토
2. Fixed Window 도입 시 발생하는 Boundary Burst 가능성 체크
3. 설정값의 가독성을 위해 ms 단위 대신 문자열 기반 시간 표기법 적용 고려
4. IETF 표준 헤더 준수 여부를 통한 API 클라이언트의 재시도 전략 최적화