반응형
🚀
토이 프로젝트를 진행하다 보면 클라이언트와 서버 간의 데이터를 주고받기 위해 비동기 HTTP 통신을 하게 되는데,
이번 포스팅은 이러한 통신을 위해 사람들이 많이 사용하는 Ajax, axios, fetch에 대해 정리하고자 합니다.
⭐️ Ajax
Asynchronous JavaScript And XML의 약자이며,
자바스크립트를 이용해 클라이언트와 서버 간에 데이터를 주고받는 비동기 HTTP 통신입니다.
XMLHttpRequest(XHR) 객체를 이용해서 전체 페이지가 아닌 필요한 데이터만 불러올 수 있습니다.
💎 장점
- Jquery를 통해 쉽게 구현 가능
- Error, Success, Complete의 상태를 통해 실행 흐름 조절 가능
💣 단점
- Jquery를 사용해야 간편하고 호환성이 보장됨
- Promise 기반이 아님
📋 XMLHttpRequest(XHR)를 사용한 코드
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() { // 요청에 대한 콜백
if (xhr.readyState === xhr.DONE) { // 요청이 완료되면
if (xhr.status === 200 || xhr.status === 201) {
console.log(xhr.responseText);
} else {
console.error(xhr.responseText);
}
}
};
xhr.open('GET', 'https://localhost:3000'); // 메소드와 주소 설정
xhr.send(); // 요청 전송
// xhr.abort(); // 전송된 요청 취소
📋 Jquery를 사용한 코드
var serverAddress = 'https://localhost:3000';
// jQuery의 .get 메소드 사용
$.ajax({
url: serverAddress,
type: 'GET',
success: function onData (data) {
console.log(data);
},
error: function onError (error) {
console.error(error);
}
});
확실히 Jquery를 사용할 때 코드가 훨씬 간단해지고 직관적인 것 같습니다.
⭐️axios
axios는 Node.js와 브라우저를 위한 Promise API를 활용하는 HTTP 통신 라이브러리입니다.
비동기로 HTTP 통신을 할 수 있으며 return을 promise 객체로 해주기 때문에 response 데이터를 다루기 쉽습니다.
💎장점
- response timeout (fetch에는 없는 기능) 처리 방법이 존재
- Promise 기반으로 만들어졌기 때문에 데이터 다루기 편리
- 브라우저 호환성이 뛰어남
💣단점
- 사용을 위해 모듈 설치 필요 (npm install axios)
📋코드
axios({
method: 'post',
url: 'https://localhost:3000/user',
data: {
userName: 'Cocoon',
userId: 'co1234'
}
}).then((response) => console.log(response));
⭐️fetch
ES6부터 들어온 JavaScript 내장 라이브러리입니다.
Promise 기반으로 만들어졌기 때문에 axios와 마찬가지로 데이터 다루기가 쉽고,
내장 라이브러리라는 장점으로 상당히 편리합니다.
💎장점
- 자바스크립트의 내장 라이브러리 이므로 별도로 import 할 필요가 없음
- Promise 기반으로 만들어졌기 때문에 데이터 다루기 편리
- 내장 라이브러리이기 때문에 업데이트에 따른 에러 방지가 가능
💣단점
- 지원하지 않는 브라우저가 존재 (IE11...)
- 네트워크 에러 발생 시 response timeout이 없어 기다려야 함
- JSON으로 변환해주는 과정 필요
- 상대적으로 axios에 비해 기능이 부족
📋코드
fetch("https://localhost:3000/user/post", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
id: "asd123",
description: "hello world",
}),
}).then((response) => console.log(response));
🖊️ 요약
간단한 통신의 경우엔 fetch를 사용하고 기능이 좀 더 필요하다면 axios를 사용하는 게 좋아 보입니다.
하지만 React-Native와 같이 업데이트가 잦은 경우에는 fetch가 내장 라이브러리이기 때문에 좀 더 안정적일 수도 있겠다고 생각됩니다!
📚 참고
반응형
'💻IT' 카테고리의 다른 글
파일 시스템 오류 (-2147416359) - 사진파일이 열리지 않을 때 (3) | 2022.03.08 |
---|---|
[BOJ] 백준 C++로 알고리즘 문제 풀 때 input 파일로 입력받기 - freopen()함수 (1) | 2022.01.29 |
[개발상식] Docker & Kubernetes (도커와 쿠버네티스 차이) (2) | 2021.11.19 |
[개발상식] MSA(MicroService Architecture)란? (0) | 2021.11.17 |
[개발상식] 프레임워크(Framework) 와 라이브러리(Library)의 차이 (0) | 2021.11.17 |