웹개발을 하다보면 클라이언트와 서버간 데이터를 주고받기 위해 비동기 HTTP 통신을 하게된다.
이번에는 현재 Vue 개발하면서 사용중인 Axios와 Ajax를 비교하여 정리하려고 한다.
📝 AJAX (Asynchronous Javascript And Xml)
Ajax의 뜻을 보면 비동기식 자바스트립트와 XML이란 의미임을 알 수 있다.
자바스크립트를 이용해 클리이언트와 서버간 데이터를 주고받는 HTTP 통신이다.
javascript로 Web 화면에서 데이터를 부르거나 조회하고자 할때, XMLHttpRequest(XHR) 객체는 반드시 필요하다.
이를 통해페이지 전체를 갱신할 필요 없이 필요한 데이터만 불러올 수 있다.
📌 특징
크게 3개자 형식으로 데이터를 전송한다.
1. CSV
- , 로 데이터 속성을 나누고 줄바꿈으로 데이터를 나누는 방식.
- 용량이 적지만 가독성이 떨어진다.
2. XML
- CSV의 가독성을 개선하기 위한 형식으로 속성과 데이터를 구분한다.
- 용량이 크며 데이터가 많을시 분석력이 떨어진다.
3.JSON
- javascript 객체 형태로 전송이 가능하며 가장 많이 쓰이는 방법이다.
- 용량도 적고 가독성도 좋다.
💻 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를 통해 쉽게 구현이 가능하다.
- Error, Success, Complete의 상태를 통해 실행 흐름 조절이 가능하다.
📌단점
- JQuery를 사용해야 간편하게 구현이 가능하며 호환성이 보장된다.
- Promise 기반이 아니다.
📝 Axios (Asynchronous Javascript And Xml)
node.js와 브라우저를위한 Promise API를 활용하는 HTTP 통신 라이브러리이다.
비동기로 HTTP 통신을 할 수 있으며 return을 Promise 객체로 하여 response 데이터를 다루기 쉽다.
📌장점
- Promise 기반으로 만들어져 데이터 다루기에 편리하다
- 구형 브라우저를 지원한다.
- 응답시간 초과를 설정하는 방법을 지원한다.
- 요청을 중단시킬 수 있다.
- 통신중 catch에 걸렸을때 .then을 실행하지 않고 콘솔에 에러를 보여준다
- JSON 데이터 자동변환이 가능하다
📌단점
- 사용을 위해 모듈을 설치해야한다. (npm install axios)
💻 예제
axios({
method: 'post',
url: 'https://localhost:3000/user',
data: {
userName: 'Jeongmin',
userId: 'dev_Jm'
}
}).then((response) => console.log(response));
'프론트엔드 > javascript' 카테고리의 다른 글
[javascript] 화살표 함수와 일반 함수의 차이 (0) | 2022.09.22 |
---|---|
[js] 현재날짜 추출하기 (영어를 한글로) (0) | 2022.07.25 |
[js] 객체(Object) 특정 value값 확인하기 (0) | 2022.06.21 |
[Error] Uncaught (in promise) NavigationDuplicated 에러 해결하기 (0) | 2022.05.03 |
[js] 이미지 404 에러 (img 404 error) (0) | 2022.03.16 |