지수 백오프(Exponential Backoff)의 한계
네트워크 장애나 서비스 과부하 시 클라이언트가 재시도(retry)를 수행할 때, 단순한 고정 지연(fixed delay)이나 선형 증가(linear backoff)는 충분하지 않습니다. 지수 백오프는 재시도 간격을 기하급수적으로 증가시켜 서버 부하를 단계적으로 경감시키지만, 동시에 수백 개의 클라이언트가 동일한 시점에 실패하면 모두 정확히 같은 시간에 재시도를 보냅니다. AWS 아키텍처 블로그에서 정의한 이 현상을 '우레떼 문제(thundering herd)'라고 합니다.
Jitter의 역할과 세 가지 구현 전략
Jitter(무작위 지연)는 각 클라이언트의 재시도 시간을 의도적으로 분산시킵니다. AWS SDK 문서에 따르면 Full Jitter는 delay = random(0, base_delay × 2^attempt) 형태로, 지수 백오프 상한선 내에서 완전한 범위의 무작위값을 선택합니다. Equal Jitter는 최소 대기 시간을 보장하되 상한의 절반을 무작위로 선택하고, Decorrelated Jitter는 이전 지연값을 기반으로 다음 상한선을 동적으로 조정합니다. Google Cloud와 AWS 모두 Full Jitter를 권장하며, 이는 서버 트래픽을 가장 균등하게 분산시킵니다.
실무 구현 시 필수 파라미터
AWS 표준 모드는 일시적 오류(transient)에 50ms 기본 지연, 쓰로틀링 오류(throttling)에 1,000ms 기본 지연을 적용하며 20초 상한선을 설정합니다. Google Cloud는 1초 초기 지연, 2배 승수, 30~60초 상한선을 권장합니다. 엔지니어는 시도 횟수 제한, 총 재시도 시간 상한(일반적으로 120~900초), 그리고 서비스별 Retry-After 헤더 준수를 반드시 구현해야 하며, 멀티홉(다층 재시도)으로 인한 재시도 폭증을 방지해야 합니다.