참고자료
https://github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/javascript/ajax.md
https://coding-factory.tistory.com/143
https://ko.wikipedia.org/wiki/Ajax
기존의 웹 어플리케이션은 브라우저에서 폼을 채우고 이를 웹 서버로 요청을 보내면 웹 서버는 요청된 내용에 따라 데이터를 가공하여 새로운 웹 페이지를 작성하고 응답으로 되돌려주었다. 최초에 폼을 가지고 있던 페이지와 사용자가 결과물로 되돌려 받는 페이지는 일반적으로 유사한 형태다. 결과적으로 중복되는 HTML 코드를 다시 한번 전송을 받음으로써 많은 대역폭을 낭비하게 된다.
반면 AJAX 애플리케이션은 필요한 데이터만을 웹 서버에 요청해서 받은 후 클라이언트에서 데이터에 대한 처리를 할 수 있다. 웹 서버에서 전적으로 처리되던 데이터 처리의 일부분이 클라이언트 쪽에서 처리되므로 웹 브라우저와 웹 서버 사이에 교환되는 데이터 량과 웹 서버의 데이터 처리량도 줄어들기 때문에 애플리케이션의 응답성이 좋아진다.
비동기 방식은 웹페이지를 리로드하지 않고 데이터를 불러오는 방식이다. 이 방식의 장점은 페이지 리로드의 경우 전체 리소스를 다시 불러와야 하는데, 이미지, 스크립트, 기타 코드 등을 모두 재요청할 경우 불필요한 리소스 낭비가 발생되지만, 비동기식 방식을 이용할 경우 필요한 부분만 불러와 사용할 수 있기에 큰 장점이 있다.
기본적으로 HTTP 프로토콜은 클라이언트 측에서 Request를 보내고, Server 측에서 Response를 받으면 이어졌던 연결이 끊기게 되어있다. 따라서 화면을 갱신하기 위해서는 다시 Request를 하고 Response를 하면서 페이지 전체를 갱신해야 했다. 이 경우 페이지의 일부분만을 갱신할 때도 페이지 전체를 리로드 해야하기 때문에 엄청난 자원낭비와 시간 낭비를 초래한다.
하지만 ajax는 html 전체가 아닌 일부분만 갱신할 수 있도록 XML HttpRequest 객체를 통해 서버에 요청을 한다. 이 경우 필요한 데이터만 JSON이나 xml 형태로 필요한 데이터만 받아 갱신하기 때문에 그만큼의 자원과 시간을 아낄 수 있다.
XMLHttipRequest
객체를 사용하여 인스턴스를 만들어 인스턴스의 open()
, send()
메소드를 이용한다.
var myRequest = new XMLHttpRequest();
myRequest.open(
"GET",
"https://something/something.json"
);
myRequest.onload = () => {
var data = JSON.parse(myRequest.responseText);
console.log(data);
};
myRequest.send();
IE를 지원하지 않는다는 점을 제외하고는 XMLHttpRequest
보다 직관적이다. ES6에서 표준이 되었고 Promise를 리턴한다. 응답 객체는 json()
과 같은 내장 메서드로 body를 추출해내고 이는 다시 Promise를 리턴한다.
fetch("https://something/something.json")
.then(res => res.json())
.then(res => console.log(res))
- 높은 관점에서 ajax는 MVC 패턴의 뷰와 컨트롤러에 해당하는 기술이다.