피드로 돌아가기
I Thought the Hard Part Was the Code. Turns Out Production Is Where Security Assumptions Go to Die.
Dev.toDev.to
Security

Redis Sorted Set 기반 Sliding-Window 도입으로 경계 공격 차단 및 인증 보안 강화

I Thought the Hard Part Was the Code. Turns Out Production Is Where Security Assumptions Go to Die.

Ravi Gupta2026년 4월 13일14intermediate

Context

반복되는 인증 로직 제거를 위해 독립적인 AuthShield 마이크로서비스를 구축함. 초기 설계 시 간과했던 Fixed-Window 방식의 Rate Limiting 경계 취약점 및 프로덕션 환경의 배포 제약 사항을 해결해야 하는 상황임.

Technical Solution

  • Fixed-Window의 시간 경계 시점 집중 요청 공격을 차단하기 위한 Sliding-Window 알고리즘 채택
  • Redis Sorted Set을 활용하여 요청 시점의 Timestamp를 Score로 저장하고, 현재 시점 기준 N초 이전 데이터를 zremrangebyscore로 제거하는 구조 설계
  • Redis Pipeline 도입을 통한 데이터 삭제, 카운트, 추가 작업의 원자성 확보 및 네트워크 왕복 시간 단축
  • 클라이언트의 맹목적인 재시도를 방지하기 위해 Retry-After 헤더에 정확한 대기 시간을 계산하여 응답하는 메커니즘 구현
  • 테스트 효율성 제고를 위해 TESTING 환경 변수를 통한 Rate Limiting 조건부 바이패스 전략 적용
  • 서비스 간 결합도를 낮추기 위해 공유 SECRET_KEY 기반의 로컬 JWT 검증 구조를 통한 Backend 간 무상태성 유지

1. Rate Limiting 설계 시 Fixed-Window의 경계 취약점을 고려하여 Sliding-Window 도입 검토

2. Redis 기반의 카운터 구현 시 Race Condition 방지를 위해 Pipeline 또는 Lua Script 사용 여부 확인

3. API 응답에 Retry-After 헤더를 포함하여 클라이언트의 지능적인 백오프 유도

4. 통합 테스트 속도 향상을 위해 테스트 환경 전용 기능 스위치(Feature Flag) 설계 반영

원문 읽기