Back-End

Axios vs Fetch API vs AJAX

봉의일상 2025. 2. 18. 21:02

1. 개요

API 호출을 수행하는 방법으로 Axios, Fetch API, 그리고 AJAX를 많이 사용한다. 이 세 가지 방법은 각각의 장단점이 있으며, 실제 프로젝트에서 어떤 것을 선택해야 할지 고민하는 개발자들이 많다.

이 글에서는 Axios, Fetch API, 그리고 AJAX의 차이점을 비교하고, 어떤 경우에 적절한지를 분석해본다.

2. Axios vs Fetch API vs AJAX 비교

2.1 Axios

구성:

  • 외부 라이브러리 (npm install axios 필요)
  • Promise 기반의 API 호출을 단순화함
  • JSON 데이터를 자동 변환
  • 요청과 응답을 인터셉터로 관리 가능

장점:

  • Promise 기반으로 코드가 간결함
  • 자동 JSON 변환 처리 (response.data 바로 사용 가능)
  • 에러 핸들링이 직관적 (catch에서 HTTP 오류 감지 가능)
  • 요청 취소 (cancel token) 지원

단점:

  • 별도의 라이브러리 설치 필요 (axios 패키지 필요)
  • 브라우저와 Node.js 간 설정 차이가 존재할 수 있음

사용 예시:

axios.get("https://api.example.com/data")
    .then(response => console.log(response.data))
    .catch(error => console.error(error));

2.2 Fetch API

구성:

  • 브라우저에서 기본 제공하는 API (window.fetch)
  • Promise 기반의 API 호출 지원
  • JSON 데이터를 변환하려면 .json() 호출 필요

장점:

  • 브라우저 내장 API이므로 별도 라이브러리 설치 불필요
  • Promise 기반의 비동기 처리 지원
  • 최신 브라우저에서 기본적으로 제공됨

단점:

  • JSON 변환을 수동으로 해야 함 (response.json() 호출 필요)
  • 에러 핸들링이 불편 (HTTP 오류도 .catch()에서 감지되지 않음)

사용 예시:

fetch("https://api.example.com/data")
    .then(response => {
        if (!response.ok) {
            throw new Error("HTTP 오류 발생: " + response.status);
        }
        return response.json();
    })
    .then(data => console.log(data))
    .catch(error => console.error(error));

2.3 AJAX (XMLHttpRequest)

구성:

  • 오래된 방식이지만 여전히 일부 프로젝트에서 사용
  • XMLHttpRequest 객체를 사용하여 요청 수행
  • 콜백 기반으로 동작

장점:

  • 거의 모든 브라우저에서 지원
  • JSON 뿐만 아니라 다양한 데이터 형식(XML, HTML 등) 지원

단점:

  • Promise를 지원하지 않아 코드가 복잡해질 수 있음
  • 콜백 지옥(Callback Hell) 발생 가능
  • 최신 프로젝트에서는 거의 사용되지 않음

사용 예시:

var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data", true);
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        console.log(JSON.parse(xhr.responseText));
    }
};
xhr.send();

3. 어떤 경우에 무엇을 써야 할까?

기준AxiosFetch APIAJAX

사용 용이성 JSON 자동 변환 지원, 코드가 간결함 JSON 변환을 수동으로 수행해야 함 콜백 방식으로 코드가 복잡할 수 있음
설치 여부 별도 라이브러리 필요 브라우저 기본 제공 브라우저 기본 제공
에러 핸들링 .catch()에서 HTTP 오류 감지 가능 .catch()에서 네트워크 오류만 감지 가능 상태 값으로 직접 확인 필요
요청 취소 CancelToken 기능 제공 기본적으로 지원하지 않음 (AbortController 필요) 기본적으로 지원하지 않음
브라우저 지원 모든 주요 브라우저 지원 최신 브라우저에서 기본 지원 모든 브라우저에서 지원

4. 결론

  • 라이브러리를 추가 설치하고 코드 가독성을 높이고 싶다면 → Axios 사용 추천
  • 브라우저 기본 API만 활용하여 가벼운 프로젝트를 만들고 싶다면 → Fetch API 사용 추천
  • 옛날 코드 유지보수나 특정 브라우저 지원이 필수라면 → AJAX 사용 가능하지만 권장하지 않음

✅ 최종 정리

  • Fetch API는 기본적으로 내장되어 있지만, 에러 핸들링 및 JSON 변환이 불편
  • Axios자동 JSON 변환, 간편한 에러 처리, 요청 취소 기능 제공
  • AJAX (XMLHttpRequest)는 구형 방식이지만 모든 브라우저에서 동작 가능
  • 최신 프로젝트에서는 Axios 또는 Fetch API 사용을 권장(React 경우는 RTK도 좋다)

Axios