
โญ๏ธ ์ญ๋๊ธ ๊ณ ๋๊ณผ ์ญ๊ฒฝ์ ๋
AJAX(Asynchronous Javascript And Xml)?
AJAX๋ ์น ํ์ด์ง๋ฅผ ๋ฆฌ๋ก๋ํ์ง ์๊ณ ๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์๋ ๊ธฐ์ ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ์น ํ์ด์ง๋ฅผ ๋น ๋ฅด๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๊ฒ์์ฐฝ์ ๊ฒ์์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๊ฒ์์ด์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๊ฐ์ ธ์ค๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์น ํ์ด์ง์ ๋์ ์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ์ด์ง์ ๋ก๋ฉ ์๊ฐ์ด ๋จ์ถ๋๋ฉฐ, ์ฌ์ฉ์ ๊ฒฝํ์ด ๊ฐ์ ๋ฉ๋๋ค.
AJAX๋ ์ฃผ๋ก JavaScript์ XML์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋์์ง๋ง, ์ต๊ทผ์๋ JSON, HTML, CSS ๋ฑ ๋ค์ํ ํ์์ ๋ฐ์ดํฐ๋ ๊ตํํ ์ ์์ต๋๋ค.
์์๋ก๋, Gmail์ ์ด๋ฉ์ผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, Facebook์ ๋๊ธ ์ ๋ฐ์ดํธ, Google Maps์ ์ค์๊ฐ ๊ฒ์์ด ์๋์์ฑ ๋ฑ์ด ์์ต๋๋ค.
XML?
XML์ Extensible Markup Language์ ์ฝ์๋ก, ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ ์ ์ฅํ๊ธฐ ์ํ ๋งํฌ์ ์ธ์ด์ ๋๋ค. HTML๊ณผ ๋น์ทํ ๋ฌธ๋ฒ์ ๊ฐ์ง๊ณ ์์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ๊ฒ์ด HTML์ ๋ชฉ์ ๊ณผ ๋ฌ๋ฆฌ, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ๋ฌํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. XML์ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ์ค๋ช ํ๋ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ ์น์์์ ์ฝ๊ฒ ๊ตํ๋๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ฝ์ต๋๋ค.
โ ์๋ก์ด ๋งํฌ์ ์ธ์ด๋ฅผ ๋ง๋๋ ๊ธฐ์
๐ ๋๊ธฐํต์ ์์ ์๋ฒ์ ์๋ต ๋ฐ์ดํฐ๋ ํญ์ ํ๋ฉด ์ ์ฒด๋ฅผ ๊ฐฑ์ ํ๊ธฐ ์ํ ๋ชจ๋ ์ปจํ
์ธ ๋ฅผ ํฌํจํฉ๋๋ค.
๐ ๋น๋๊ธฐํต์ ์์์ ์๋ฒ์ ์๋ต์ ํญ์ ๋ฐ์ดํฐ ์
๋๋ค.
๋ฐ์ดํฐ์ ํ์์ ๋จ์ ํ
์คํธ(CSV) ์ด๊ฑฐ๋, JSON ๋๋ XML ํ์์
๋๋ค.
JSON(JavaScript Object Notation)?
JSON์ JavaScript Object Notation์ ์ฝ์๋ก, ๊ฒฝ๋์ ๋ฐ์ดํฐ ๊ตํ ํ์์ ๋๋ค. ์ฌ๋์ด ์ฝ๊ณ ์ฐ๊ธฐ ์ฝ๊ณ , ๊ธฐ๊ณ๊ฐ ๋ถ์ํ๊ณ ์์ฑํ๊ธฐ ์ฌ์ด ํ์์ ๊ฐ์ถ๊ณ ์์ต๋๋ค. JSON์ XML๊ณผ ๋์กฐ์ ์ผ๋ก ๋ ์ ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ฉฐ, JavaScript์์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ์๊ณผ ์ ์ฌํ์ฌ JavaScript์์ ์ฝ๊ฒ ํ์ฑํ๊ณ ์์ฑํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ ๋์ ์ผ๋ก ์น ํ์ด์ง๋ฅผ ์ ๋ฐ์ดํธํ ๋, JSON์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์์ต๋๋ค. ๋ํ, RESTful API์์๋ JSON์ ์์ฃผ ์ฌ์ฉํฉ๋๋ค.
JSON ์์:
{
"name": "John Smith",
"age": 30,
"city": "New York"
}
์์ ์์๋ ์ด๋ฆ, ๋์ด, ๋์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ JSON ๊ฐ์ฒด์ ๋๋ค. ์ด๋ฌํ ๊ฐ์ฒด๋ JavaScript์์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์์ต๋๋ค.
const person = {
name: "John Smith",
age: 30,
city: "New York"
};
โ Data / String
โ JSON ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฌธ์์ด์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ์์์ ๊ฐ์ฒด์์ฑ ํ๊ธฐ๋ฒ์ ๊ทธ๋๋ก ์ด์ฉํ์ฌ ์์ฑ
โ JSON ๋ฐ์ดํฐ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
<script>
var persons = [
{
name: '์ํฅ๋ฏผ',
gender: '๋จ์',
age: 31,
field: '์ถ๊ตฌ'
},
{
name: '๋ฅํ์ง',
gender: '๋จ์',
age: 37,
field: '์ผ๊ตฌ'
},
{
name: '๊น์ฐ์',
gender: '์ฌ์',
age: 34,
field: 'ํผ๊ฒจ'
}
]
var personsJSON = JSON.stringify(persons);
var personsObj = JSON.parse(personsJSON);
function init() {
document.querySelector('.jsonStr').innerHTML = personsJSON;
alert(personsObj[1].name);
}
window.addEventListener('load', init)
</script>
๋น๋๊ธฐ ํต์ ์์ ์๋ฒ์ ์๋ต์ ํ์ธํ๋ ๋ฐฉ๋ฒ
๋น๋๊ธฐ ํต์ ์์ ์๋ฒ์ ์๋ต์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์๋ฒ๋ก๋ถํฐ ์๋ต์ด ๋์ฐฉํ๋ฉด, ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ํด๋น ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ , ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๊ฐ ์คํ๋ฉ๋๋ค. ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์์์๋ ์๋ฒ์ ์๋ต ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ํ์ํ ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, JavaScript์์ AJAX๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ๋น๋๊ธฐ ํต์ ์ ํ๋ค๋ฉด, XMLHttpRequest ๊ฐ์ฒด์ onreadystatechange ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ์๋ต์ ํ์ธํ ์ ์์ต๋๋ค. ์ด ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ ์๋ฒ๋ก๋ถํฐ ์๋ต์ด ๋์ฐฉํ ๋๋ง๋ค ํธ์ถ๋ฉ๋๋ค. ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์์์๋ XMLHttpRequest ๊ฐ์ฒด์ readyState์ status ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ์๋ต์ ํ์ธํ๊ณ , ํ์ํ ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
const xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
// ์๋ฒ์ ์๋ต์ ํ์ธํ๊ณ ํ์ํ ์ฒ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.
console.log(this.responseText);
}
};
xhttp.open("GET", "example.com/api/data", true);
xhttp.send();
์์ ์ฝ๋๋ GET ๋ฐฉ์์ผ๋ก example.com/api/data์ ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ฒ๋ก๋ถํฐ ์๋ต์ด ๋์ฐฉํ๋ฉด ์ด๋ฅผ ์ฝ์์ ์ถ๋ ฅํ๋ ์์์ ๋๋ค.