목차
<aside> 💡
요약
✅ 정의 및 개념 요약
✅ 시스템 유형별 효과
✅ 왜 Jitter가 중요한가?
✅ 구현 예시 요약
const jitterDelay = Math.random() * delay;
✅ Best Practices
✅ 관련 패턴
Circuit Breaker와 병행 시 더 효과적
(지속 실패 차단 + 재시도 지연 조절)
결론
지수 백오프는 실패 시 기본 전략이지만, Jitter는 필수 보완 요소다. 특히 대규모 분산 환경이나 주기적 작업에서는 시스템 회복력과 효율성 모두를 향상시킨다.
</aside>
지수 백오프는 재시도할 때마다 대기시간을 기하급수적으로 늘려가는 패턴이다. 예를 들어 1초, 2초, 4초…와 같이 점점 대기 간격을 늘린다. 이는 급격한 재시도로 인한 대상 시스템 과부하를 완화하기 위한 전략이다. AWS 권장사항에 따르면 너무 오랫동안 재시도하지 않도록 대기 시간에 상한값(캡)을 두는 제한된 지수 백오프(capped exponential backoff)를 사용해야 한다.
지터(Jitter)는 백오프 대기시간에 임의성을 추가하여 재시도 타이밍을 분산시키는 기법이다. 모든 클라이언트가 동일한 지수 백오프로 재시도하면 동시 대규모 재시도(Thundering Herd)가 발생해 부하가 급증할 수 있다. 이를 방지하기 위해 지터는 “0~지수백오프값 사이”에서 무작위로 대기시간을 선택하여 재시도를 흩뿌린다. 예를 들어, 기본 백오프가 2초라면 한 클라이언트는 1.7초, 다른 클라이언트는 2.3초를 기다리게 하는 식이다.
AWS는 지터를 다양한 상황에 적용할 것을 권장한다. 예를 들어, 주기적으로 실행되는 내부 작업들도 여러 서버에서 동일한 타이밍으로 동작할 경우 부하가 집중될 수 있는데, 지터를 추가하면 동일한 작업량을 더 적은 서버 용량으로 처리할 수 있었다고 보고했다. 즉, 지터는 재시도뿐만 아니라 모든 주기적 타이머나 예약 작업에 적용하여 급격한 트래픽 급증을 완화하고 다운스트림 확장을 쉽게 해준다.
외부 다수의 클라이언트가 비동기적으로 요청을 보내는 환경을 의미하며, 대표적으로 웹 프론트엔드나 모바일 백엔드가 이에 해당한다. 이러한 시스템은 불규칙한 요청 흐름과 대기열(queue) 형성이 흔하며, 동일한 부하 수준에서도 반응 시간이 비안정적이다.
Marc Brooker에 따르면, 동일한 조건에서 닫힌 시스템 대비 열린 시스템의 평균 지연 및 꼬리 지연(99.9th percentile latency)이 훨씬 더 크며, 예측이 어렵다고 분석하였다
예를 들어, 특정 부하 하에서: