ajax vs fetch vs axios vs ky

Jinmin Kim·2025년 7월 31일

📌 1️⃣ Ajax (XMLHttpRequest 기반)

2. XMLHttpRequest(XHR)

XMLHttpRequest (XHR)
객체는 서버와 상호작용하기 위한 객체로 페이지의 새로고침 없이도 URL로부터 데이터를 받아올 수 있다.
즉, AJAX 프로그래밍에 주로 사용되는 객체이다.
HTTP 이외의 프로토콜을 지원한다(file 과 ftp )
readyState - XMLHttpRequest는 readyState  상태값을 가지고있다.
open() - open() 함수를 통해 XMLHttpRequest 객체를 초기화한다.
send() - send() 함수를 통해 요청을 서버에 전달한다.

특징

  • 브라우저 내장 객체 (new XMLHttpRequest())
  • 오래된 브라우저까지 지원
  • 콜백 기반(비동기 처리 복잡)
  • 다양한 응답 포맷(XML, JSON, text 등)
  • 헤더 설정, 진행률(Progress) 등 상세 컨트롤 가능

장점

  • 레거시 브라우저 완벽 지원
  • 파일 업로드/다운로드 등 세밀한 제어에 강함
  • 네이티브라서 외부 의존성 없음

단점

  • 콜백 지옥 (가독성, 유지보수 최악)
  • Promise/async-await 지원 X
  • 사용법이 다소 번거로움
  • 코드가 장황해짐

📌 2️⃣ Fetch (window.fetch, ES6+)

특징

  • ES6 표준 API (Promise 기반)
  • 코드 간결, async/await 완벽 지원
  • 응답 스트림 처리/클론 등 지원
  • 기본 내장, 별도 설치 X

장점

  • Promise/async-await로 직관적 코드 가능
  • JSON 파싱 편리(res.json())
  • 네이티브라서 가볍고 빠름

단점

  • IE 미지원
  • *응답 에러(404/500)**도 catch가 아닌 then에서 분기 처리(직접 확인 필요)
  • 기본적으로 요청 취소, 타임아웃 지원 X(AbortController 별도 필요)
  • JSON 등 body 파싱 직접 처리 필요

📌 3️⃣ Axios

특징

  • Promise 기반 외부 라이브러리(설치 필요)
  • fetch + XHR 기능 결합
  • 요청/응답 인터셉터, 자동 JSON 파싱, 요청 취소 등 다양한 부가 기능 내장
  • 브라우저 & Node.js 모두 지원

장점

  • 코드 한 줄로 모든 HTTP 메서드 지원 (axios.get/post/put/...)
  • 요청/응답 인터셉터로 공통 에러 처리, 토큰 추가 등 쉽다
  • 자동 JSON 파싱, 파라미터 직렬화, 폼/파일 업로드 등 편리
  • 요청 취소/타임아웃/Progress 등 옵션 풍부
  • 실무 대규모 프로젝트에서 검증된 안정성

단점

  • 라이브러리 용량(조금 무거움)
  • 외부 의존성, 버전 호환 관리 필요
  • 최신 fetch 기능보다 일부 느릴 수 있음

📌 4️⃣ KY

특징

  • Fetch 기반의 경량 Promise HTTP 클라이언트 (npm 설치 필요)
  • 체이닝, request/response hook 등 modern API 지원
  • Node.js/브라우저 모두 지원

장점

  • API 단순 & 체이닝 문법 (ky.get().json())
  • 자동 JSON 파싱, timeout, retry 등 modern 기능 내장
  • 사이즈 가벼움(axios보다 경량)
  • fetch 기반이므로 async/await/AbortController 등과 잘 통합

단점

  • 최신 fetch 기능이 모든 환경에 필요한 경우만 추천(생태계/커뮤니티는 axios보다 작음)
  • 복잡한 폼 데이터, 커스텀 인코딩 등은 일부 직접 처리 필요
  • 구형 브라우저는 fetch polyfill 필요

📌 5️⃣ 한눈에 보는 비교표

Ajax(XHR)FetchAxiosKY
표준/내장OOX (라이브러리)X (라이브러리)
PromiseXOOO
async/awaitXOOO
JSON 파싱직접직접자동자동
인터셉터XXOO (hook)
요청 취소XAbortControllerOO
파일 업/다운OXO일부 지원
IE 지원OXOX
코드 간결함XOOO
크기/가벼움가벼움가벼움무거움가장 가벼움
커뮤니티역사적 최강넓음대세작음

인기 라이브러리인 Fetch와 Axios만 비교

window.fetch vs Axios 비교 핵심 테이블

fetchAxios
설치내장(설치 불필요)npm 설치 필요
지원 환경최신 브라우저(IE 미지원)모든 브라우저(IE11↑) + Node.js
기반Promise(ES6+)Promise(ES6+) + XHR
JSON 자동파싱직접 .json() 호출자동 변환(응답에 따라)
요청/응답 인터셉터XO (axios.interceptors)
요청 취소AbortController 직접 사용axios.CancelToken(내장)
타임아웃미지원(직접 구현)내장 옵션 지원
폼/파일 업로드FormData 지원더 직관적, progress/cancel 지원
에러 처리HTTP 에러(404/500)는 catch 불가, then 분기 필요HTTP 에러도 catch에서 바로 가능
Progress 이벤트XO (onUploadProgress 등)
API 구조표준적(기초, 확장성)간결, 실무에 최적화된 옵션
용량가벼움(네이티브)외부 의존, 더 무거움
커뮤니티브라우저 표준대규모 프로젝트 실무 경험 多
profile
Let's do it developer

0개의 댓글