웹 서비스 구조에는 이렇게 크게 3가지가 있다.
Client (Web Browser)
Server
DB (이번 시간에서는 다루지 않음)
웹브라우저와 웹서버는 서로 연결되어 있기 때문에 같이 다루겠다.
웹서버가 하는 일은 어떤 정보를 저장하고 있다가 웹브라우저의 요청(Request)에 따라 그 정보를 웹브라우저에게 응답(Response)하는 역할을 하는데 이 정보라 함은 HTML, CSS, JS이다. 웹서버는 이 코드들을 브라우저에게 전달하게 되고 브라우저는 이 코드들을 수신, 해석(Interpreting)하여 사람들이 쉽게 알아볼 수 있는 형태로 display하는 역할을 한다.
즉, 브라우저는 사용자가 서버에게 요청한 정보를 브라우저를 통해서 대신 물어봐주는 역할을 하는 것이다. 그럼 서버는 서버가 갖고 있는 정보를 브라우저에게 보내주면서 응답 헤더(Response Header)를 만들어주는 역할을 한다. 그럼 다시 브라우저는 이 응답헤더를 가지고 적당히 사용자가 볼 수 있게 브라우저에 띄워주는 역할을 한다.
API는 Application Programming Interface의 줄임말이다.
사전적 정의로는 “API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.” 이다.
먼저, API를 알기 전에 UI를 짚고 넘어가보자.
UI는 User Interface의 줄임말로서 interface란 용어가 공통적으로 들어간다.
UI가 사용자와 사용자가 다룰 대상(하드웨어 혹은 소프트웨어)을 연결한다면 API는 프로그램과 또 다른 프로그램을 연결해주는 역할을 한다고 볼 수 있겠다.
예를 들어서 지도어플, 카카오페이를 사용한다고 했을 때, 단순히 지도의 데이터 또는 결제하는 시스템의 데이터(코드 파일)만 제공된다면 사용자들은 쉽게 이 데이터들을 사용할 수 없을 것이다. 이 데이터들을 사용자들이 손 쉽게 다룰 수 있는 어플이라는 매개체를 만드는 것이 API이다.
HTTP는 HyperText Transfer Protocal의 줄임말이다.
HTTP는 웹브라우저와 웹서버가 서로 request와 response 하는 것을 나타낸다. 웹브라우저와 웹서버가 HTML, CSS, JS의 파일들을 서로 주고받을 때 서로가 알아들을 수 있는 공통언어가 필요하다. 이 공통언어가 바로 HTTP이다.
이 HTTP 메시지들을 보려면 Chrome Browser 기준, 개발자 도구창을 열어서 'Network'탭을 클릭하면 웹브라우저와 웹서버가 주고받은 데이터, HTTP 메시지들을 볼 수 있다.
HTTP 요청과 응답은 둘 다 header와 body를 가지며 header에는 '어디서 보내는 요청인가 (origin)', '컨텐츠 타입은 무엇인가 (content-type)', '어떤 클라이언트를 이용해 보냈는가 (user-agent)' 를 볼 수 있다. body는 모든 http method가 가지는 것은 아니며 body는 서버에 데이터를 보내기 위한 공간으로 사용된다.
HTTP는 Stateless 속성과 Connectionless 속성을 가진다.
Stateless란, http의 요청은 모두 독립적이다. 때문에 한 번 준 요청에 대해서 응답을 한 번 받았으면 이어서 요청을 다시 할 수 없다.
ex) 삼겹살 먹을래? -> 그래, 먹자! (요청 끝) 그럼 지금 먹으러 갈래? -> 뭐를? (전의 삼겹살 요청 준 것은 없어짐)
Connectionless란, 한 번의 요청에는 한 번의 응답을 한다. 고로 응답 이후에는 연결이 끊긴다.
ex) 밥 먹으러 갈래? -> 그래, 먹자! (응답 끝) 뭐 먹으러 갈거야? (재응답 x)
HTTP method는 4가지가 있다.
Ajax를 활용한 '비동기식' 모델
기존 '동기식' 모델
비동기식
동기식
Ajax는 Asynchronous JavaScript and XML 의 줄임말이다.
Ajax는 기존에 사용되던 여러 기술을 함께 사용하여, 웹 페이지의 일부분만을 갱신할 수 있도록 해주는 개발 기법이다. 이러한 Ajax에서 사용하는 기존 기술은 다음과 같다.
Ajax를 이용한 웹 응용 프로그램은 자바스크립트 코드를 통해 웹 서버와 통신을 하게 된다.
따라서 사용자의 동작에는 영향을 주지 않으면서도 백그라운드에서 지속해서 서버와 통신할 수 있다.
<Ajax를 이용한 웹 응용 프로그램의 동작 원리>
<Ajax의 장점>
<XMLHttpRequest 사용>
var xhr = new XMLHttpRequest();
xhr.open('get', 'http://52.78.213.9:3000/messages');
// 요청의 상태 변화를 추적합니다
xhr.onreadystatechange = function(){
if(xhr.readyState !== 4) return;
// readyState 4: 완료
if(xhr.status === 200) {
// status 200: 성공
console.log(xhr.responseText); // 서버로부터 온 응답
} else {
console.log('에러: ' + xhr.status); // 요청 도중 에러 발생
}
}
xhr.send(); // 요청 전송
<XMLHttpRequest jQuery 사용>
$.get('http://52.78.213.9:3000/messages', function(response) {
// response: 서버로부터 온 응답
});
<Fetch API 사용>
fetch('http://52.78.213.9:3000/messages')
.then(function(response) {
return response.json();
})
.then(function(json) {
// json 형태로 전달받은 서버로부터의 응답
});
<Fetch API와 XMLHttpRequest의 차이>
Fetch
XHR
내가 모르는 차이도 있어서 출처를 첨부한다.(https://stackoverflow.com/questions/35549547/fetch-api-vs-xmlhttprequest)