AJAX (Asynchronous Javascript And XML)

jadeco·2023년 3월 26일
0

AJAX (Asynchronous Javascript And XML)

Ajax는 JavaScript의 라이브러리 중 하나이며 Asynchronous Javascript And Xml(비동기식 자바스크립트와 XML)의 약자입니다. 브라우저가 가지고 있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법입니다. Ajax를 한마디로 정의하자면 JavaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술이라고 할 수 있습니다.

※ 비동기(async)방식이란?

비동기 방식은 웹페이지를 리로드하지 않고 데이터를 불러오는 방식입니다. 이 방식의 장점은 페이지 리로드의 경우 전체 리소스를 다시 불러와야하는데 이미지, 스크립트 , 기타 코드등을 모두 재요청할 경우 불필요한 리소스 낭비가 발생하게 되지만 비동기식 방식을 이용할 경우 필요한 부분만 불러와 사용할 수 있으므로 매우 큰 장점이 있습니다.

▶ 왜 사용하는가?

단순하게 웹 화면에서 무언가 부르거나 데이터를 조회하고 싶을 경우, 페이지 전체를 새로고침하지 않기 위해 사용합니다. 기본적으로 HTTP 프로토콜은 클라이언트 쪽에서 Request를 보내고 Server 쪽에서 Response를 받으면 이어졌던 연결이 끊기게 됩니다. 그래서 화면의 내용을 갱신하기 위해서는 다시 request를 하고 response를 하면서 페이지 전체를 갱신하게 됩니다. 하지만 이렇게 할 경우 페이지의 일부분만 갱신할 경우에도 페이지 전체를 다시 로드해야 하는데 엄청난 자원 낭비와 시간 낭비가 생깁니다. 하지만 Ajax는 HTML 페이지 전체가 아닌 일부분만 갱신할 수 있도록 XMLHttpRequest 객체를 통해 서버에 request를 하고 JSON이나 XML형태로 필요한 데이터만 받아 갱신하기 때문에 그만큼의 자원과 시간을 아낄 수 있습니다. 웹에서 가장 중요한 것은 속도이며 Ajax를 사용해야 하는 이유로써 충분합니다.

▶AJAX를 사용 가능하게 만드는 것들

AJAX라는 기술은 여러가지 기술이 혼합적으로 사용되어 이루어집니다. 대표적인 예로는 아래와 같은 것들이 있습니다.

  • HTML
  • DOM
  • JavaScript
  • XMLHttpRequest
  • Etc

AJAX의 장단점

장점

  • 웹 페이지의 속도 향상: AJAX는 페이지 전체를 로드하는 대신 필요한 데이터만 로드하므로 페이지의 로딩 속도가 향상됩니다.
  • 비동기 통신 가능: AJAX는 비동기 통신을 사용하므로, 서버에서 데이터를 받을 때까지 기다리지 않아도 됩니다.
  • 코딩 양 감소: AJAX를 사용하면 페이지 전체를 다시 로드할 필요가 없으므로, 전체적인 코딩 양이 줄어듭니다.
  • 다양한 UI 구현 가능: AJAX를 사용하면 다양한 UI를 구현할 수 있습니다. 예를 들어, Flickr에서는 페이지의 리로드 없이 사진의 제목이나 태그를 수정할 수 있습니다.

단점

  • 히스토리 관리가 되지 않음: AJAX를 사용하면 페이지 이동 없이 데이터를 로드하므로, 브라우저의 히스토리 관리에 문제가 발생할 수 있습니다.
  • 보안상의 문제: AJAX를 사용하면 페이지 이동 없이 데이터를 로드하므로, 보안상의 문제가 발생할 수 있습니다.
  • 서버 부하 증가 가능성: AJAX를 사용하여 연속으로 데이터를 요청하면 서버 부하가 증가할 수 있습니다.
  • 디버깅 어려움: AJAX는 JavaScript로 작성되기 때문에, 디버깅이 어려울 수 있습니다.
  • 동일-출처 정책으로 인하여 다른 도메인과는 통신이 불가능하다. (Cross-Domain문제)

AJAX의 진행과정

  1. XMLHttpRequest Object를 만든다.
    • request를 보낼 준비를 브라우저에게 시키는 과정
    • 이것을 위해서 필요한 method를 갖춘 object가 필요함
  2. callback 함수를 만든다.
    • 서버에서 response가 왔을 때 실행시키는 함수
    • HTML 페이지를 업데이트 함
  3. Open a request
    • 서버에서 response가 왔을 때 실행시키는 함수
    • HTML 페이지를 업데이트 함
  4. send the request
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객체의 메소드로 정보를 보내는 방식입니다.

  • var xhr= new XMLHttpRequest(); : browser response를 얻었을 때 작동하는 함수 (callback 함수)
  • xhr.onreadystatecjange : AJAX Request에 어떠한 변화라도 있으면 작동한다. (callback 함수를 포함하고 있다고 생각하면 됩니다.)
  • xhr.readyState : response가 돌아왔는지 아닌지를 추적하는 property

XMLHttpRequest 객체를 얻은 뒤, URL을 통해 요청하고 응답을 받으면 응답 결과에 맞는 함수를 실행하는 구조로 되어 있습니다.

jQuery와의 시너지

AJAX에 대해 이야기하면 jQuery에 대한 설명을 빼놓을 수 없습니다. 일반 JavaScript만으로 AJAX를 하게 되면 코딩량도 많아지고 브라우저 별로 구현 방법이 다른 단점이 있는데 jQuery를 이용하면 더 적은 코딩량과 동일한 코딩 방법으로 대부분의 브라우저에서 같은 동작을 할 수 있게 됩니다. jQuery AJAX를 사용하면, HTTP GET 방식과 HTTP POST 방식 모두를 사용하여 원격 서버로부터 데이터를 요청할 수 있습니다. jQuery는 AJAX처럼 JavaScript의 라이브러리 중 하나인데 자바스크립트를 좀 더 사용하기 쉽게 패키징화 시켜놓은 것입니다. jQuery에 대한 내용은 추후에 포스팅하겠습니다.

AJAX의 사용방법

  1. XMLHttpRequest 객체: AJAX 요청의 핵심 기능을 제공하는 객체입니다. 이 객체를 사용하여 서버와 데이터를 주고받을 수 있습니다. 이전에 예시로 든 것처럼, XMLHttpRequest 객체를 사용하여 AJAX 요청을 보낼 수 있습니다.
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();
  1. Fetch API: XMLHttpRequest 객체보다 더 간단한 문법으로 AJAX 요청을 처리할 수 있는 방법입니다. 이 API는 Promise를 반환하여 비동기적으로 데이터를 받아올 수 있습니다.
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
  1. Axios: Promise 기반 HTTP 클라이언트 라이브러리입니다. AJAX 요청을 쉽게 만들 수 있습니다.
axios.get('https://api.example.com/data')
  .then(response => console.log(response.data))
  .catch(error => console.error(error));
  1. jQuery Ajax 함수: jQuery Ajax 함수는 XMLHttpRequest 객체보다 더 간단한 방법으로 AJAX 요청을 처리할 수 있습니다.
$.ajax({
  url: 'https://api.example.com/data',
  method: 'GET',
  success: function(data) {
    console.log(data);
  },
  error: function(error) {
    console.error(error);
  }
});

이러한 방법들을 사용하면, jQuery 없이도 JavaScript 자체에서 AJAX 요청을 처리할 수 있습니다. 개발자는 프로젝트의 요구 사항과 취향에 따라 가장 적합한 방법을 선택할 수 있습니다.

profile
당신도요

0개의 댓글