Ajax(Asynchronous JavaScript And XML)란 자바스크립트를 사용하여 브라우저가 서버에게 비동기 방식으로 데이터를 요청하고 수신하는 프로그래밍 방식이다.
Ajax
는 브라우저에서 제공하는 Web API인 XMLHttpRequest
객체를 기반으로 동작한다.
XMLHttpRequest
는 HTTP
비동기 통신을 위한 메서드와 프로퍼티를 제공한다.
이전의 웹페이지는 화면이 전환될 때마다 서버로부터 새로운 HTML을 전송받아 웹페이지 전체를 처음부터 다시 렌더링했다.
이러한 전통적인 방식은 다음과 같은 단점이 있다.
- 변경 사항이 없는 파일도 매번 다시 전송받기 때문에
불필요한 데이터 통신
이 발생한다.- 변경할 필요가 없는 부분도 다시 렌더링되어 화면 전환이 일어나면 깜박이는 현상이 발생한다.
- 통신이 동기적으로 이루어지기 때문에
블로킹 현상
이 일어난다.
Ajax가 등장하면서 이러한 전통적인 방식의 단점이 해결될 수 있게 되었다.
- 변경할 부분을 갱신하는 데 필요한 데이터만 전송받아 불필요한 데이터 통신이 발생하지 않는다.
- 변경할 필요가 없는 부분은 다시 렌더링되지 않기 때문에 화면이 깜박이는 현상이 발생하지 않는다.
- 통신이
비동기적으로
이루어지기 때문에 블로킹이 발생하지 않는다.- 즉, 변경 사항이 있는 데이터만 비동기 방식으로 전송받아 불필요한 렌더링이 일어나지 않고
빠른 퍼포먼스
와부드러운 화면 전환
이 가능해졌다.
JSON
(JavaScript Object Notation)은 클라이언트와 서버 간의 HTTP 통신을 위한 문자열 데이터 형식이다.
JSON은 자바스크립트의 객체 리터럴
과 유사하게 키와 값으로 구성된 순수한 텍스트
다.
큰따옴표
(작은따옴표 x)로 묶어야 한다.{
"name": "Lee",
"age": 20,
"alive": true
}
JSON.stringify
메서드는 객체
나 배열
을 JSON 포맷의 문자열로 변환한다.
직렬화
라 한다.const obj = {
"name": "Lee",
"age": 20,
"alive": true
};
// 객체를 JSON 포맷의 문자열로 변환한다.
const json = JSON.stringify(obj);
console.log(typeof json, json);
// string {"name": "Lee","age": 20,"alive": true}
// 객체를 JSON 포맷의 문자열로 변환하면서 들여쓰기 한다.(보기 좋도록)
const prettyJson = JSON.stringify(obj, null, 2);
console.log(typeof prettyJson, prettyJson);
/*
string {
"name": "Lee",
"age": 20,
"alive": true
}
*/
const todos = [
{id: 1, content: 'HTML', completed: false},
{id: 2, content: 'CSS', completed: true},
{id: 3, content: 'JavaScript', completed: false},
];
const json = JSON.stringify(todos, null, 2);
console.log(typeof json, json);
/*
string [
{
id: 1,
content: 'HTML',
completed: false
},
{
id: 2,
content: 'CSS',
completed: true
},
{
id: 3,
content: 'JavaScript',
completed: false
},
]
*/
JSON.parse
메서드는 JSON 형식의 문자열을 객체
나 배열
로 변환한다.
JSON.stringify
의 반대 개념!)서버로부터 클라이언트에 전송된 JSON 데이터는 문자열이다.
이 문자열을 객체로서 사용하려면 JSON 포맷의 문자열을 객체화해야 하는데 이를 역직렬화
라 한다.
const obj = {
"name": "Lee",
"age": 20,
"alive": true
};
// 객체를 JSON 형식의 문자열로 변환한다.
const json = JSON.stringify(obj);
// JSON 형식의 문자열을 객체로 변환한다.
const parsed = JSON.parse(json);
const todos = [
{id: 1, content: 'HTML', completed: false},
{id: 2, content: 'CSS', completed: true},
{id: 3, content: 'JavaScript', completed: false},
];
// 배열을 JSON 포맷의 문자열로 변환한다.
const json = JSON.stringify(todos, null, 2);
// JSON 포맷의 문자열을 배열로 변환한다.
const pared = JSON.parse(json);