시작하기무료로 시작하기

지터를 적용한 지수 백오프 구현하기

가끔 일시적인 오류를 반환하는 불안정한 타사 결제 API와 연동하는 상황입니다. 이미 부하가 걸린 서비스에 과도한 요청이 몰리지 않도록, 풀 지터를 적용한 지수 백오프(Exponential Backoff with Full Jitter) 재시도 전략을 구현해 보겠습니다. 이 전략은 재시도 사이의 대기 시간을 점점 늘리면서 무작위성을 더해, 여러 클라이언트가 동시에 재시도하는 현상(Thundering Herd)을 방지합니다.

flaky_call(payload) 함수가 준비되어 있습니다. 이 함수는 처음 3번 호출에서는 TransientError로 실패하고, 4번째 호출에서 성공합니다. time, random, TransientError는 이미 불러와져 있습니다.

이 연습은 강의의 일부입니다

AWS에서 애플리케이션 개발하기

강의 보기

연습 안내

  • try 블록 안에서 payload를 인자로 flaky_call을 호출하고 그 결과를 반환하세요.
  • base와 현재 attempt 횟수를 사용해 이번 시도의 지수 상한값(Cap)을 계산하세요.
  • random.uniform()을 사용해 0과 cap 사이의 무작위 대기 시간을 선택하여 풀 지터를 적용하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

def retry_with_backoff(payload, max_attempts=5, base=0.2):
    last_error = None
    for attempt in range(max_attempts):
        try:
            # Try the call
            return ____(payload)
        except TransientError as err:
            last_error = err
            # Cap grows exponentially with each attempt
            cap = ____ * (2 ** attempt)
            # Pick a random wait between 0 and cap (full jitter)
            wait = random.____(0, cap)
            time.sleep(wait)
    # All attempts failed; surface the last error
    raise last_error


result = retry_with_backoff({"order_id": 42})
print(result)
코드 편집 및 실행