재시도 정책 구현 (React Native 및 그 외)

발행: (2026년 3월 23일 오후 04:38 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

What is a Retry Policy?

재시도 정책은 애플리케이션이 실패한 요청을 즉시 사용자에게 오류로 표시하는 대신 자동으로 다시 시도하도록 하는 전략입니다.

사용자 입장에서는 모든 것이 원활하게 동작합니다:

“요청을 보냈다 → 로더가 보였다 → 결과를 받았다.”

그 뒤에서는 앱이 해당 요청을 여러 번 재시도한 뒤 결국 성공했을 수 있습니다.

Why Does This Matter?

네트워크 호출은 항상 신뢰할 수 없습니다. 일시적인 서버 문제(5xx 오류), 네트워크 불안정(타임아웃, 연결 불량), 레이트 리밋, 기타 일시적인 오류 때문에 실패가 발생할 수 있습니다.

즉시 오류를 표시하면 사용자는 직접 다시 시도하거나 흐름을 처음부터 다시 시작해야 하며, 앱에 대한 신뢰를 잃을 수도 있습니다.

재시도 정책은 이러한 일시적인 문제들을 완화하고 전반적인 사용자 경험을 향상시킵니다. 백엔드 서비스, 클라우드 시스템, 분산 시스템, 메시지 큐 등에서 널리 사용되는 보편적인 복원력 패턴입니다. 올바르게 구현하면 사용자는 문제가 발생했다는 사실조차 알지 못하게 됩니다—이것이 목표입니다.

Implementation

// Helper to pause execution
const wait = (ms: number) =>
  new Promise((resolve) => setTimeout(resolve, ms));

type RetryOptions = {
  retries: number;
  delay: number;
  factor?: number; // exponential multiplier
};

async function retryRequest(
  fn: () => Promise<any>,
  { retries, delay, factor = 2 }: RetryOptions
): Promise<any> {
  let attempt = 0;

  while (attempt < retries) {
    try {
      // Try the request; if it succeeds, return the result
      return await fn();
    } catch (error: any) {
      attempt++;
      // If we've exhausted retries, re‑throw the error
      if (attempt >= retries) throw error;

      // Calculate exponential back‑off delay
      const backoff = delay * Math.pow(factor, attempt - 1);
      await wait(backoff);
    }
  }
}

// Example request function
const fetchUser = async () => {
  const response = await fetch("https://api.example.com/user");

  if (!response.ok) {
    const err: any = new Error("Request failed");
    err.response = { status: response.status };
    throw err;
  }

  return response.json();
};

// Wrapper that applies the retry policy
const getUserWithRetry = async () => {
  try {
    const data = await retryRequest(fetchUser, {
      retries: 3,
      delay: 1000, // initial delay in ms
    });

    console.log("Success:", data);
  } catch (error) {
    console.log("Final failure:", error);
  }
};

필요한 곳에서 getUserWithRetry()를 호출하세요. 요청이 일시적인 문제로 실패하면 재시도 정책이 자동으로 작동하여 백그라운드에서 다시 시도합니다.

In Conclusion

재시도 정책은 신뢰성을 높이고 사용자 불만을 줄이며 일시적인 실패를 우아하게 처리하는 간단하지만 강력한 방법입니다. 작은 추가만으로도 애플리케이션을 훨씬 더 안정적이고 프로덕션에 준비된 느낌으로 만들 수 있습니다.

0 조회
Back to Blog

관련 글

더 보기 »

당신의 좌절이 제품이다

2026년 3월 18일 수요일 Shubham Bose, “The 49 MB Web Page https://thatshubham.com/blog/news-audit”: > 나는 New York Times에 가서 네 개의 헤드라인을 살펴보았다.

2026년 SwiftUI: 모든 것을 바꾼 7가지 기능

SwiftUI는 이제 더 이상 “프로토타입 전용”이 아니다. SwiftUI가 2019년에 출시되었을 때, 회의론자들은 이것이 프로덕션에 적합하지 않다고 말했습니다. 2026년에는, 이것이 기본 선택이 되었습니다…