fetch
대신 axios
를 사용하는 이유는 편의성, 기능성, 호환성 측면에서 axios
가 더 많은 장점을 제공하기 때문입니다.✅ 1. 응답 자동 변환
axios
는 응답을 자동으로 JSON으로 파싱해줌
// axios
axios.get('/api').then(res => console.log(res.data));
// fetch
fetch('/api')
.then(res => res.json())
.then(data => console.log(data));
✔
fetch
는 .json()
을 매번 직접 호출해야 함✔
axios
는 .data
로 바로 접근 가능✅ 2. 에러 처리 방식
fetch
는 네트워크 에러(서버 다운 등)만catch
로 잡힘
- HTTP 에러(404, 500 등)는 성공으로 간주됨
// fetch는 status 체크 필요
fetch('/api').then(res => {
if (!res.ok) throw new Error('에러 발생!');
return res.json();
});
// axios는 상태 코드가 4xx, 5xx면 catch로 바로 감
axios.get('/api')
.then(res => console.log(res.data))
.catch(err => console.error('에러 발생:', err));
✅ 3. 요청/응답 인터셉터 (interceptors)
- 공통 헤더 추가, 토큰 주입, 로딩 처리 등을 가로채서 쉽게 처리 가능
axios.interceptors.request.use(config => {
config.headers.Authorization = 'Bearer token';
return config;
});
fetch는 이 기능이 없어, 매 요청마다 수동으로 처리해야 함
✅ 4. 타임아웃 설정
axios
는 타임아웃 간단 설정 가능
axios.get('/api', { timeout: 3000 });
fetch
는 기본적으로 타임아웃 없음. 직접AbortController
로 구현해야 해서 번거로움
✅ 5. 브라우저 호환성
fetch
는 IE 등 구형 브라우저에서 기본적으로 지원되지 않음
axios
는 내부적으로XMLHttpRequest
기반이라 더 넓은 호환성 보장
✅ 6. 파일 업로드/다운로드 편의성
axios
는FormData
, Blob 처리, 응답 타입 설정 등을 더 쉽게 다룸
🔽 단점도 존재
단점 | 설명 |
용량 | axios는 약 15~20KB 크기로 fetch보다 무거움 |
의존성 | 외부 라이브러리 설치 필요 ( npm install axios ) |
✅ 결론: 언제 어떤 걸 써야 할까?
상황 | 추천 방식 |
간단한 요청 (GET 등) | fetch 로도 충분 |
에러 처리, 토큰 주입 등 공통 로직 필요 | axios 추천 |
파일 업로드, 응답 데이터 구조 통일 | axios 유리 |
Vue/React 등에서 API와 대규모 통신 | axios 선호됨 |
Share article