무한 재시도 루프로 인한 자가 DDoS 사고
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- 백엔드 개발자, 시스템 아키텍트, DevOps 엔지니어
- 중간~고급 수준의 실무 경험자 (재시도 로직 설계, 서비스 확장성 고려사항 이해 필요)
핵심 요약
- 무한 재시도 루프로 인해 자가 DDoS 발생
for _ in range(3)
대신 지수적 백오프(Exponential Backoff) 적용 필요- 내부 요청에도 제한(Rate Limit) 필수
no more than 10% of total requests can be retries
- 재시도 로그 명시 및 재시도율 모니터링으로 문제 조기에 탐지
log retries explicitly
+monitor retry rates
섹션별 세부 요약
1. 사고 발생 배경
- 마이크로서비스 A에서 서비스 B에 대한 요청에 재시도 로직 추가
for _ in range(3): try: call_service_b() except: time.sleep(1)
- 서비스 B 자체 오류로 인한 재시도 폭증
- 5K RPS 3 retries 6 인스턴스 = 90초 내 자가 DDoS
2. 핵심 오류 요인
- 지수적 백오프 누락
- 단순
time.sleep(1)
대신2^N 초 간격
적용 필요 - 제한 없음
- 내부 요청에도 rate limit 설정 미비
- 모니터링 부재
- 재시도율 급증 시 깊은 문제 탐지 실패
3. 해결 방안
- 지수적 백오프 + 제한 적용
exponential backoff + error rate logging
- 재시도 예산(Retry Budget)
- 총 요청의 10% 이하로 재시도 제한
- 회로 차단기(Circuit Breaker) 추가
- 시스템 실패 시 자동 복구 방안
결론
- 재시도 로직 설계 시 반드시
지수적 백오프
,제한
,회로 차단기
,재시도율 모니터링
적용 - 내부 요청에도 rate limit 필수
예: retry budget = 10% of total requests
- 로그 명시 및 모니터링 도구 연동으로 사전 예방 가능