Ajax는 JavaScript의 라이브러리 중 하나이며 Asynchronous Javascript And Xml(비동기식 자바스크립트와 XML)의 약자입니다. 브라우저가 가지고 있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법입니다. Ajax를 한마디로 정의하자면 JavaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술이라고 할 수 있습니다.
비동기 방식은 웹페이지를 리로드하지 않고 데이터를 불러오는 방식입니다. 이 방식의 장점은 페이지 리로드의 경우 전체 리소스를 다시 불러와야하는데 이미지, 스크립트 , 기타 코드등을 모두 재요청할 경우 불필요한 리소스 낭비가 발생하게 되지만 비동기식 방식을 이용할 경우 필요한 부분만 불러와 사용할 수 있으므로 매우 큰 장점이 있습니다.
단순하게 웹 화면에서 무언가 부르거나 데이터를 조회하고 싶을 경우, 페이지 전체를 새로고침하지 않기 위해 사용합니다. 기본적으로 HTTP 프로토콜은 클라이언트 쪽에서 Request를 보내고 Server 쪽에서 Response를 받으면 이어졌던 연결이 끊기게 됩니다. 그래서 화면의 내용을 갱신하기 위해서는 다시 request를 하고 response를 하면서 페이지 전체를 갱신하게 됩니다. 하지만 이렇게 할 경우 페이지의 일부분만 갱신할 경우에도 페이지 전체를 다시 로드해야 하는데 엄청난 자원 낭비와 시간 낭비가 생깁니다. 하지만 Ajax는 HTML 페이지 전체가 아닌 일부분만 갱신할 수 있도록 XMLHttpRequest 객체를 통해 서버에 request를 하고 JSON이나 XML형태로 필요한 데이터만 받아 갱신하기 때문에 그만큼의 자원과 시간을 아낄 수 있습니다. 웹에서 가장 중요한 것은 속도이며 Ajax를 사용해야 하는 이유로써 충분합니다.
AJAX라는 기술은 여러가지 기술이 혼합적으로 사용되어 이루어집니다. 대표적인 예로는 아래와 같은 것들이 있습니다.
var xhr= new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState===4){
document.getElementById('ajax').innerHTML= xhr.responseText;
}
}
xhr.open('GET', 'sidebar.html'); // html메소드와 URL을 보낸다. (open함수는 준비를 시키는 것이지 보내는 것은 아니다.)
xhr.send();
위의 예제는 AJAX가 XHR객체를 형성하고 이 객체의 콜백을 만들고 HTML메소드와 URL을 결정한 뒤, XHR객체의 메소드로 정보를 보내는 방식입니다.
XMLHttpRequest 객체를 얻은 뒤, URL을 통해 요청하고 응답을 받으면 응답 결과에 맞는 함수를 실행하는 구조로 되어 있습니다.
AJAX에 대해 이야기하면 jQuery에 대한 설명을 빼놓을 수 없습니다. 일반 JavaScript만으로 AJAX를 하게 되면 코딩량도 많아지고 브라우저 별로 구현 방법이 다른 단점이 있는데 jQuery를 이용하면 더 적은 코딩량과 동일한 코딩 방법으로 대부분의 브라우저에서 같은 동작을 할 수 있게 됩니다. jQuery AJAX를 사용하면, HTTP GET 방식과 HTTP POST 방식 모두를 사용하여 원격 서버로부터 데이터를 요청할 수 있습니다. jQuery는 AJAX처럼 JavaScript의 라이브러리 중 하나인데 자바스크립트를 좀 더 사용하기 쉽게 패키징화 시켜놓은 것입니다. jQuery에 대한 내용은 추후에 포스팅하겠습니다.
function reqListener (e) {
console.log(e.currentTarget.response);
}
var oReq = new XMLHttpRequest();
var serverAddress = "https://hacker-news.firebaseio.com/v0/topstories.json";
oReq.addEventListener("load", reqListener);
oReq.open("GET", serverAddress);
oReq.send();
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
axios.get('https://api.example.com/data')
.then(response => console.log(response.data))
.catch(error => console.error(error));
$.ajax({
url: 'https://api.example.com/data',
method: 'GET',
success: function(data) {
console.log(data);
},
error: function(error) {
console.error(error);
}
});
이러한 방법들을 사용하면, jQuery 없이도 JavaScript 자체에서 AJAX 요청을 처리할 수 있습니다. 개발자는 프로젝트의 요구 사항과 취향에 따라 가장 적합한 방법을 선택할 수 있습니다.