axios 재시도

MM·2025년 1월 18일

ArticleDigest

목록 보기
5/12
post-thumbnail

axios-retry

특정 조건(네트워크 오류, 특정 HTTP 응답 코드..)에서 실패한 요청을 자동 재시도.
여러 재시도 전략을 지원.

import axios from "axios";
import axiosRetry from "axios-retry";

// 자동 재시도 요청을 위한 axios-retry 구성
axiosRetry(axios, {
  retries: 3, // 재시도 횟수
  retryDelay: axiosRetry.exponentialDelay, // 재시도 사이에 지수 백오프 지연 사용
});

// 실패 시 재시도되는 axios 요청
axios
  .get("https://jsonplaceholder.typicode.com/posts/1")
  .then((response) => console.log(response.data))
  .catch((error) => console.error(error));

retry

여러 번 시도하려는 비동기 연산이나 로직 처리에 적합

import axios from "axios";
import retry from "retry";

async function fetchData(url) {
  const operation = retry.operation({
    retries: 3, // 최대 재시도 횟수
    factor: 2, // 지연에 대한 지수 계수
    minTimeout: 1000, // 첫 번째 재시도를 시작하기 전의 시간(밀리초)
    maxTimeout: 2000, // 두 번째 재시도 사이의 최대 시간(밀리초)
  });

  operation.attempt(async (currentAttempt) => {
    try {
      const response = await axios.get(url);
      console.log("Data:", response.data);
    } catch (error) {
      console.log(`Attempt ${currentAttempt} failed: ${error.message}`);
      if (operation.retry(error)) {
        console.log(`Retrying...`);
        return;
      }
      console.error("Request failed after retries:", error.message);
    }
  });
}

fetchData("https://jsonplaceholder.typicode.com/posts/1");


재시도 로직 고려사항

모든 오류에서 재시도를 해선 안된다!

  • 오류가 일시적인 것인가?
  • 오류가 후속 시도를 통해 해결될 가능성이 있는가?
    • 있다면, 어느 타이밍에서 재시도해야 하는가?
    • 몇 회까지 재시도할 것인가?
  • 재시도 로직이 사용자 환경을 저하하지는 않는가?
profile
중요한 건 꺾여도 그냥 하는 마음

0개의 댓글