1. 비동기 API 호출이란?
웹 애플리케이션에서는 API 호출을 통해 데이터를 가져오거나 서버와 통신하는 것이 필수적이다. 하지만, API 호출은 네트워크 지연 시간이 존재하기 때문에 비동기 방식으로 처리하는 것이 일반적이다.
자바스크립트에서 API를 호출하는 방법은 크게 다음 3가지가 있다:
XMLHttpRequest
(구식 방법)fetch()
(최신 표준)Axios
(서드파티 라이브러리)
이번 포스팅에서는 이 3가지 방법을 비교하고, 각각의 장단점을 알아보겠다.
2. XMLHttpRequest (XHR) – 구식 방식
XMLHttpRequest
(XHR)는 가장 오래된 API 호출 방식이다. 지금은 fetch()
와 같은 더 간단한 대체제가 있지만, 구형 브라우저 지원이 필요할 경우 여전히 사용할 수 있다.
2.1 XMLHttpRequest 기본 사용법
const xhr = new XMLHttpRequest();
xhr.open("GET", "https://jsonplaceholder.typicode.com/todos/1", true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log("응답 데이터:", JSON.parse(xhr.responseText));
}
};
xhr.send();
2.2 XMLHttpRequest의 단점
- 콜백 기반이므로 코드 가독성이 떨어진다.
- 에러 핸들링이 복잡하다.
- 최신 API에 비해 코드가 장황하다.
3. Fetch API – 최신 표준
fetch()
는 최신 자바스크립트 표준으로, API 호출을 보다 간결하고 직관적으로 처리할 수 있다.
3.1 Fetch 기본 사용법
fetch("https://jsonplaceholder.typicode.com/todos/1")
.then((response) => response.json())
.then((data) => console.log("응답 데이터:", data))
.catch((error) => console.log("에러 발생:", error));
3.2 Async/Await을 활용한 Fetch
async function fetchData() {
try {
const response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
const data = await response.json();
console.log("응답 데이터:", data);
} catch (error) {
console.log("에러 발생:", error);
}
}
fetchData();
3.3 Fetch API의 장점
- Promise 기반으로 가독성이 좋다.
- 더 적은 코드로 API 요청 가능
async/await
과 함께 사용하면 더욱 직관적인 코드 작성 가능
3.4 Fetch API의 단점
- 기본적으로 네트워크 오류만 catch()에서 감지 가능
- HTTP 응답 코드(404, 500 등)를 자동으로 에러로 처리하지 않음
4. Axios – 강력한 서드파티 라이브러리
Axios
는 Promise 기반의 HTTP 요청 라이브러리로, fetch()
보다 강력한 기능을 제공한다. 특히, 자동 JSON 변환, 요청 취소, 응답 타임아웃, HTTP 응답 코드 자동 에러 처리 등의 기능을 제공한다.
4.1 Axios 설치 방법
Axios는 기본적으로 내장된 기능이 아니므로, 설치가 필요하다.
npm install axios
4.2 Axios 기본 사용법
const axios = require("axios");
axios.get("https://jsonplaceholder.typicode.com/todos/1")
.then((response) => console.log("응답 데이터:", response.data))
.catch((error) => console.log("에러 발생:", error));
4.3 Async/Await을 활용한 Axios
async function fetchData() {
try {
const response = await axios.get("https://jsonplaceholder.typicode.com/todos/1");
console.log("응답 데이터:", response.data);
} catch (error) {
console.log("에러 발생:", error);
}
}
fetchData();
4.4 Axios의 장점
- 자동 JSON 변환 (fetch는
response.json()
을 호출해야 함) - HTTP 응답 코드 자동 에러 처리 (
status !== 200
이면 자동으로catch()
실행) - 요청 취소 및 타임아웃 기능 제공
- 인터셉터(Interceptor) 기능 제공 (요청/응답 전처리 가능)
4.5 Axios의 단점
fetch()
보다 라이브러리 설치가 필요함- 파일 크기가 큼 (fetch는 기본 내장 API)
5. 세 가지 방식 비교 정리
비교 항목 | XMLHttpRequest | Fetch API | Axios |
---|---|---|---|
코드 가독성 | 복잡하고 길다 | 간결하고 직관적 | 더 많은 기능을 제공하지만 직관적 |
JSON 변환 | .responseText 로 변환 필요 | .json() 호출 필요 | 자동 변환 |
에러 처리 | 복잡함 | HTTP 오류를 자동으로 throw하지 않음 | HTTP 응답 코드 기반 자동 에러 처리 |
요청 취소 | 불가능 | 불가능 | 가능 |
요청 타임아웃 | 기본 제공 안됨 | 기본 제공 안됨 | 가능 |
6. 결론
XMLHttpRequest
는 구식 방식으로, 새로운 프로젝트에서는 사용을 권장하지 않는다.fetch()
는 가장 최신의 표준 방식이며, 간결하고 직관적인 API 요청을 지원한다.Axios
는 보다 강력한 기능을 제공하는 라이브러리로, 복잡한 API 요청이 필요할 경우 유용하다.
📌 추천 가이드
- 단순한 API 요청:
fetch()
사용 - 고급 기능(인터셉터, 요청 취소, 자동 JSON 변환 등)이 필요할 경우:
Axios
사용
다음 포스트에서는 **”Node.js 비동기 프로그래밍 최적화: 효율적인 데이터 처리 방법”**을 다루겠다.