node 에서 서버와 통신을 할 때 주로 사용하는 HTTP 클라이언트를 꼽아보자면 보통 Fetch
나 Axios
다.
Fetch는 브라우저에 내장되어있어서 설치하지 않고 사용할 수 있다는 장점도 있고 문법도 크게 다르지 않은데 왜 Axios를 사용할까 궁금해져서 알아봤다.
공식 문서에서는 Axios에 대해 이렇게 소개하고 있다. (내가 휘뚜루마뚜루 번역함)
Axios는 Node.js와 브라우저를 위한 Promise 기반 HTTP 통신 클라이언트이다. 동형(브라우저와 Node에서 동일한 형태로 실행 가능)이며, 서버사이드에서는 Node.js의 네이티브 http 모듈을 사용하지만 클라이언트에서는 XMLHttpRequests를 사용한다.
Axios도 Promise API를 사용하기 때문에 response가 Promise 객체로 들어온다.
npm install axios
서드파티이기 때문에 이후 require
해주어야 한다. (React에서는 import
)
const axios = require('axios');
// in React
import axios from 'axios';
.then()
을 통해 처리할 수 있다.
```javascript// GET 요청 예시 (출처: Axios 공식 문서) axios({ method: ‘get’, url: ‘http://bit.ly/2mTM3nY’, responseType: ‘stream’ }) .then(function (response) { response.data.pipe(fs.createWriteStream(‘ada_lovelace.jpg’)) });
```javascript
// POST 요청 예시 (출처: Axios 공식 문서)
axios({
method: 'post',
url: '/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
});
axios.get()
, axios.post()
등 요청 메소드 명령어를 제공해주기도 한다.
그렇다면 fetch API는 어떨까?
HTTP 통신을 위한 자바스크립트 내장 라이브러리이며 ES6부터 추가되었다. Axios에 비해 기능이 다양하지는 않으나, 성능 자체로는 Axios와 큰 차이가 없다. 문법도 큰 차이가 없으니 예제는 생략한다.
문법도 성능도 큰 차이가 없는데 Axios를 왜 굳이 추가해서 사용하는가를 살펴봤다.
기본적으로 Axios가 에러 핸들링, 보안에서 fetch보다 더 나은 기능을 갖고 있다.
catch
에 걸려도 then
이 실행된다..json()
으로 한 번 가공해야 한다.json.stringify()
를 이용한 문자열 파싱이 필요하다.정리해놓고 보니, Axios가 여러 모로 빌트인 라이브러리인 fetch의 단점을 개선해 만들려고 한 흔적이 보인다. 대부분의 경우 axios를 사용하겠지만, 좀더 안정적인 작업이 필요할 때는 fetch를 고려해보아야겠다.