웹훅 재시도 정책, 어떻게 설계해야 안전할까?
웹훅은 수신 서버의 일시적 장애나 네트워크 문제로 실패할 수 있어 재시도 로직이 필수입니다. 이 도구는 단건 요청의 예상 실패율과 재시도 횟수를 기반으로 최종적으로 모든 시도가 실패할 확률을 계산하고, 지수 백오프(exponential backoff) 방식의 재시도별 대기 시간을 보여줍니다.
최종 실패율은 (단건 실패율)^(재시도 횟수+1)로 계산됩니다. 예를 들어 단건 실패율이 10%이고 4회까지 재시도한다면, 모든 시도가 실패할 확률은 0.1^5 = 0.001%로 매우 낮아집니다. 재시도 횟수를 늘릴수록 성공률은 올라가지만, 백오프 배수만큼 대기 시간도 기하급수적으로 늘어나므로 균형이 필요합니다.
백오프 배수를 두는 이유는 장애 상황에서 모든 클라이언트가 동시에 재시도를 몰아서 보내면 수신 서버의 부하가 오히려 커지기 때문입니다. 대기 시간을 점진적으로 늘려 서버가 복구할 시간을 벌어주는 것이 안정적인 설계의 핵심입니다.
자주 묻는 질문
재시도 횟수를 무조건 늘리면 좋은가요?
성공률은 올라가지만 마지막 재시도까지의 총 대기 시간도 함께 늘어납니다. 실시간성이 중요한 웹훅이라면 3~5회 이내로 제한하는 것이 일반적입니다.
백오프 배수는 왜 필요한가요?
장애 발생 시 모든 재시도가 동시에 몰리면 대상 서버 부하가 더 커집니다. 배수를 두어 대기 시간을 점진적으로 늘리면 서버가 복구할 시간을 벌 수 있습니다.
이 계산은 실제 서비스 실패율과 다를 수 있나요?
네. 실제 실패율은 시간대, 트래픽, 장애 유형에 따라 달라지므로 과거 로그 데이터를 기반으로 입력값을 조정하는 것이 정확합니다.