Retry Function

Retry Function - Explanation

어려움 비동기 O(n) O(1)

Problem Summary

Write a function that retries an async function up to n times before failing.

Go to Problem →

Detailed Explanation

이 문제는 **에러 복구 패턴**과 **비동기 재시도 로직**을 학습합니다. 네트워크 요청의 안정성을 높이는 데 필수적입니다. **재시도가 필요한 이유** 네트워크 요청은 일시적 오류로 실패할 수 있습니다. 바로 포기하지 않고 몇 번 재시도하면 성공할 수 있습니다. **알고리즘 동작** 1. 함수 실행 시도 2. 성공하면 결과 반환 3. 실패하면: - 남은 시도가 있으면 다시 시도 - 마지막 시도였으면 에러 던지기 **코드 분석** ```javascript for (let i = 0; i < times; i++) { try { return await fn(); // 성공하면 즉시 반환 } catch (e) { if (i === times - 1) throw e; // 마지막이면 에러 던지기 } } ``` **3번 시도 예시** - 시도 1: 실패 → i=0, times-1=2, 계속 - 시도 2: 실패 → i=1, times-1=2, 계속 - 시도 3: 실패 → i=2, times-1=2, 에러 던지기 **지연 추가 (확장)** ```javascript catch (e) { if (i === times - 1) throw e; await delay(1000 * (i + 1)); // 지수 백오프 } ``` **실용적 활용** - API 호출 실패 시 재시도 - 데이터베이스 연결 재시도 - 파일 업로드 재시도

Solution Code

solution.js
async function retry(fn, times) {
  for (let i = 0; i < times; i++) {
    try {
      return await fn();
    } catch (e) {
      if (i === times - 1) throw e;
    }
  }
}

Key Concepts from This Problem

1. try-catch 문
2. 비동기 재시도
3. 에러 복구
4. async/await

Common Mistakes

마지막 시도에서 에러를 던지지 않으면 조용히 실패합니다
await를 빠뜨리면 Promise가 반환되고 에러가 잡히지 않습니다
무한 재시도는 시스템에 부담을 줄 수 있습니다

Hints

Hint 1: try-catch를 반복문 안에서 사용하세요.
Hint 2: 마지막 시도에서만 에러를 던지세요.

Complexity Analysis

Time Complexity

O(n)

Grows linearly with input size

Space Complexity

O(1)

Uses almost no additional memory

Related Tags

#비동기 #재시도 #에러처리