[node.js] axios와 fetch의 비교

2024. 10. 1. 14:38·programming/개념 정리

'왜 axios가 아니라 fetch를 쓰세요?' 팀플을 하다가 질문을 받았다.  

 

나는 개발할 때 정말 이 기능이 우리 프로젝트에 필요한가 많이 잰 후에 도입하는 편이다. 

그래서 그러게영..??? 뭐가 더 좋은지 아세요?했더니 우리 팀원들 모두 모른대서 이렇게 직접 알아보게 되었다 😀

피드백 수용이 굉장히 빠른 편!ㅎ

 

 

✅ fetch와 axios 차이점

1.JSON 처리
2. 자동 문자열 변환(stringify)
3. Error 처리 
4. 성능 => 아주 작은 차이

 

 

1. JSON 처리 

보통 개발을 할 때 requestDto, responseDto를 만들기 때문에 response를 json으로 파싱해 사용한다. 

 

fetch문을 보자. 2개의 then()이 필요하다.

그런데 response.json도 비동기 처리라 서버 응답이 도착한 후에 JSON으로 변환하는 과정이 비동기적으로 이루어지기 때문에, 실제 JSON 데이터가 사용 가능한 상태가 되기까지 시간이 걸릴 수 있다는 단점이 있다.

fetch(url)
  .then((response) => response.json())
  .then(console.log);

 

패키지 설치가 필요하지만 axios를 쓰면 자동으로 데이터를 json 파싱해 data라는 property로 받을 수 있다. 

axios.get(url).then((response) => console.log(response.data));

 

 

 

2. 자동 문자열 변환(stringify)

 

명시해주어야 하는 문법인 fetch

fetch의 경우 json으로 보내기 위해 개발자가 적어줘야할게 많다.

fetch(url, {
  method: 'POST', // default : get
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(data),
});

 

자동 변환으로 간결한 axios

axios의 경우 자동으로 content-type을 자동 지정해주고 데이터 또한 Json.stringify() 처리해준다. 

axios.post(url, data);

 

 

 

3. Error 처리

 

Network만을 감지하는 fetch

네트워크 에러를 catch할 수 있지만, HTTP 오류 상태(예: 404, 500 등)는 에러로 간주하지 않고, 정상 응답으로 반환한다.

이때문에 나머지 에러는 수동으로 상태 코드를 확인해야 한다.

fetch('https://api.example.com/data')
  .then((response) => {
    if (!response.ok) {
      // 네트워크 에러가 아닌 경우의 에러 처리를 위해 
      // http 상태 코드를 확인하는 코드가 별도로 필요하다.
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response.json();
  })
  .then((data) => {
    console.log(data);
  })
  .catch((error) => {
    // 네트워크 에러나 HTTP 에러 처리
    console.error('Fetch error:', error.message);
  });

 

 

Http Error Code를 감지하는 axios

axios는 HTTP 오류 상태 코드를 자동으로 catch 해서 에러로 간주해준다. 

axios.get(url)
  .then(response => console.log(response.data))
  .catch(error => console.error('Axios error:', error));

 

 

 

4. 성능

여기서 같은 기능을 두고 성능을 비교할 수 있는데, fetch가 조금 더 빠른 것을 볼 수 있다. 

https://www.measurethat.net/Benchmarks/Show/17766/0/axios-vs-fetch#latest_results_block

드디어 fetch가 더 좋은 이유가 나왔구나!!!

 

 

 

지금 진행하고 있는 프로젝트에서는 axios가 문법이나 개발 편의성이 좋아 통일하기로 했다. 

MS 개발자분은 axios가 아니라 fetch를 더 많이 쓴다고 하셨는데 정말 저 근소한 속도 때문일까?

알아본 걸로는 axios가 더 좋아보이고 아무리 검색을 해봐도 성능에 큰 영향이 없어 axios를 권장한다는 글 뿐이다. 

지식은 늘었지만 궁금증은 해소되지 않았다... 😭

저작자표시 비영리 변경금지 (새창열림)
'programming/개념 정리' 카테고리의 다른 글
  • [C++] NULL vs nullptr, 포인터에서 nullptr을 사용해야 하는 이유
  • [C++] #define과 const 그리고 constexpr
  • [Javs SE 8] Function<T, R> 과 apply()
  • [OS] LRU 알고리즘이란? 정의부터 구현까지 알아보자!
u1qns
u1qns
http://github.com/u1qns
  • u1qns
    개발 블로그
    u1qns
  • 전체
    오늘
    어제
    • 분류 전체보기 (173)
      • 회고 (1)
      • programming (17)
        • 개념 정리 (6)
        • CI CD (1)
        • 트러블 슈팅 (0)
        • 환경설정 및 팁 (7)
      • problem solving (155)
        • 개념 정리 (3)
        • 백준 (129)
        • SWEA (15)
        • 프로그래머스 (4)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    cpp
    그리디
    C++
    SSAFY
    boj
    DFS
    완전탐색
    DP
    cmath
    구현
    미해결
    삼성청년SW아카데미
    되추적
    SWEA
    투포인터
    백준
    SSAFY수료식
    BFS
    POW
    HELLOSSAFY
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
u1qns
[node.js] axios와 fetch의 비교
상단으로

티스토리툴바