Asynchronous Javascript And XML의 약자
자바스크립트를 사용해 브라우저가 서버에서 데이터를 비동기적으로 요청하고, 서버가 응답한 데이터를 수신해 웹페이지를 동적으로 갱신하는 통신 방식.
비동기적 : 갱신이 필요한 일부만 로드하여 갱신하는 방식
AJAX로 HTTP 요청을 보내기 위한 방법 (비동기적으로 정보를 요청해서 받아오는 법) 은 크게 세가지 방식이 있다.
- XMLHttpRequest
- fetch
- jQuery Ajax (외부 라이브러리 방식)
XMLHttpRequest은 오래된 방식, 최근 가장 많이 사용하는 방식이 fetch다.
콜백 기반
Wep API인 XMLHttpRequest 객체는 HTTP 요청 전송, HTTP 응답 수신을 위한 다양한 메서드와 프로퍼티를 제공한다.
길고 복잡하기 때문에 잘 사용하지 않는다.
let URL = "API URL";
let xhr = new XMLHttpRequest();
xhr.open("GET", URL, true); //옵션 :: 전송방식, 경로, 비동기사용여부
xhr.send();
xhr.onload = function(){
if (httpRequest.readyState === XMLHttpRequest.DONE){ // 이상 없음, 응답 받았음
console.log(xhr.responseText);
} else {
// 아직 준비되지 않음
}
}
프로미스 기반
ES6부터 생긴 Javascript 내장 API.
Web API인 Fetch API가 제공하는 fetch() 함수를 통해 네트워크 리소스를 비동기적으로 받아올 수 있다.
XMLHttpRequest 객체보다 사용법이 간단하고 프로미스를 지원하기 때문에 비동기 처리를 위한 콜백 패턴의 단점에서 자유롭다.
fetch를 사용할 때는 두단계를 거친다.
fetch() 함수는 2개의 인자를 받는다.
기본적으로 GET 방식으로 통신한다.
fetch(url, options)
.then(response => response.json())
.then((data) => console.log(data));
.catch(error => console.log(error));
url : 접근하고자 하는 url (필수)
options : 매개변수 (선택)
.then() : 요청이 성공하면 실행
.catch() : 에러 처리, 요청이 실패하면 실행
일반적으로 에러 캐치할 때는 아래와 같은 방식으로 한다
fetch(url)
.then((response) => {
if (!response.ok) {
throw new Error('500 Error')
}
})
[options]에서는 사용할 HTTP 메서드, headers, body 등을 정의한다.
생략이 가능하며 생략할 경우 GET 방식으로 통신되어 url로부터 콘텐츠가 다운로드된다.
대부분의 REST API들은 JSON 형태의 데이터를 응답하기때문에 응답(response) 객체는 json()메서드를 통해 JSON 포맷의 응답 전문을 자바스크립트 객체로 변환하여 얻을 수 있다.
ES7에 도입된 async/await를 활용해서 fetch API를 활용하면 코드 양을 줄일 수 있다고한다.
jQuery에서 제공하는 $.ajax() 함수를 사용하는 방식
var serverAddress = 'https://localhost:3000';
$.ajax({
url: serverAddress,
type: 'GET',
success: function onData (data) {
console.log(data);
},
error: function onError (error) {
console.error(error);
}
});
axios는 Promise API를 활용하는 HTTP 통신 라이브러리다.
리액트나 뷰환경에서에서는 axios를 사용한다.
axios({
method: 'post',
url: 'https://localhost:3000/user',
data: {
userName: 'Cocoon',
userId: 'co1234'
}
}).then((response) => console.log(response));