# ๐ AJAX & JSON
# ๐ง๐ผโ๐ ์์์ผ ํ๋ ์ด์
โ์ฌ์ฉ์์ ๋ฐ์์ ๋ฐ๋ผ ๋ณด์ฌ์ฃผ๋ ํ๋ฉด์ ๋ ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ๋ง๋ค๊ณ ์ถ๋ค๋ฉด โํ์ด์ง์ ์ผ๋ถ๋ง ํจ์จ์ ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด
# ๐๐ปโโ๏ธ ์ด ๋ฌธ์๋ฅผ ๋ณด๊ณ ๋๋ฉด
- ๋น๋๊ธฐ ํต์ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ํ ์นํ์ด์ง์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ์ ์๋ค.
- ๋น๋๊ธฐ ํต์ ์ด ์ด๋ฃจ์ด์ง๋ ์์์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ ์ ์๋ค.
- ๋น๋๊ธฐ ํต์ ์ผ๋ก ๋ฐ์ JSON ๋ฐ์ดํฐ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ์ ์๋ ๋ฐ์ดํฐ๋ก ๋ณํํด ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ ์ ์๋ค.
# AJAX(Asynchronous JavaScript and XML)
AJAX
๋๋ XMLHttpRequest
๋ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ๊ฐ๋ฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ์ ์
๋๋ค. ์ด๊ธฐ์๋ XML/XLST ํฌ๋งท ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ค๊ฐ ์ต๊ทผ์๋ JSON ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์น ๋น๋๊ธฐ ๊ธฐ์ ๋ก ์ ์ฐฉ๋๊ณ ์์ต๋๋ค. AJAX๋ HTML, XML, JSON ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค. AJAX๋ฅผ ์ํด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค. XMLHttpRequest ๊ฐ์ฒด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ด์ฅ ๊ฐ์ฒด๋ก ๋น๋๊ธฐ ํต์ ๊ตฌํ์ ์ํ ๊ฐ์ฒด์ด๋ฉฐ, ์ด ๊ฐ์ฒด๋ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ์์ฒญ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํฉ๋๋ค. (๋น๋๊ธฐ์ ๋ํ ๋ด์ฉ์ ๋ค์ Promise ํ์ด์ง์์ ์์ธํ ๋ค๋ฃน๋๋ค.) ๋ฐ๋ผ์ ์์ฒญ์ ๋ณด๋ธ ํ ์ฌ์ฉ์๋ UI ํ๋ฉด๊ณผ ์ํธ์์ฉ์ ํ๊ฑฐ๋ ๋ค๋ฅธ AJAX ์์ฒญ์ ์ถ๊ฐ๋ก ๋ณด๋ผ ์ ์์ต๋๋ค. ์๋ฒ์์ ์๋ต์ด ์ค๋ฉด AJAX ์์ฒญ์ ๋ณด๋ผ ๋ ๋ฑ๋กํ ์ฝ๋ฐฑ ํจ์๋ฅผ ํตํด ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
AJAX๋ฅผ ์์ฒญํ๋ ์์ธํ ๊ณผ์ ์ ๋งํฌ (opens new window)์์ ํ์ธํ ์ ์์ต๋๋ค.
# JSON(JavaScript Object Notation)
AJAX๋ก ๋ฐ์์ค๋ ๋๋ถ๋ถ์ ๋ฐ์ดํฐ๋ JSON ํฌ๋งท์ ๋๋ค. ๋น๋๊ธฐ๋ก ๋ฐ์ ๋ฐ์ดํฐ๊ฐ HTML์ด๋ฉด ์นํ์ด์ง์ ๋ฐ๋ก ๋ถ์ฌ๋ฃ์ ์ ์์ง๋ง, JSON ๋ฐ์ดํฐ๋ฉด ๋์ ์ผ๋ก HTML ํ๊ทธ๋ค์ ์์ฑํด ๋ฃ์ด์ผ ํฉ๋๋ค. ์ ํต์ ์ธ ์นํ์ด์ง์ ๋ค๋ฅด๊ฒ ๋์ ์นํ์ด์ง๋ฅผ ์์ฑํ๋ ๋ฐ ์์ด JSON์ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ JSON์ผ๋ก ์ ์กํ๋ ๋ฐ์ดํฐ์ ์์ด HTML๋ณด๋ค ํจ์ฌ ์ ๊ธฐ ๋๋ฌธ์ ๋๋ฆฐ ์ธํฐ๋ท ํ๊ฒฝ, ํนํ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ๋ ๋น ๋ฅธ ํ์ด์ง ๋ก๋ฉ๊ณผ ํ์ด์ง ๊ฐฑ์ ์ ๋ณด์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ํ, HTML ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์นํ์ด์ง์ ๋ถ์ด๋ ๊ณผ์ ์ด ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ง์ผ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ์ง๋ง, ๋ด๋ถ ๊ณผ์ ์ ๊ฒฐ๊ตญ HTML ๋ฐ์ดํฐ๋ฅผ ํ์ฑํด DOM ๋ ธ๋๋ฅผ ์์ฑํด ๋ถ์ด๋ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ JSON ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ๋์ ์ผ๋ก HTML ํ์ด์ง๋ฅผ ๊ฐฑ์ ํ๋ ๊ณผ์ ๊ณผ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
AJAX๋ก ๋ฐ์์ฌ ์ ์๋ ๋ฐ์ดํฐ ํฌ๋งท์ ์ ์ฝ์ด ์๋ ๊ฒ์ ์๋์ง๋ง, ์น์์ ์ค๊ณ ๊ฐ๋ ๋ฐ์ดํฐ์ ๋๋ถ๋ถ์ด JSON์ผ๋ก ํํ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฌ์ค์ ํ์ค์ผ๋ก ์ ์ฐฉํด ์์ต๋๋ค. AJAX ์๋ต์ผ๋ก ๋ฐ์ JSON ๋ฐ์ดํฐ๋ ๋จ์ ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ ์ฌ์ฉํ ์๋ ์๊ณ ๋ฐ์ดํฐ ๋ณํ์ ํด์ผ ํฉ๋๋ค. ์๋ต์ ๋ฐ์ XMLHttpRequest ๊ฐ์ฒด์๋ responseText
์์ฑ์ด ์๊ณ , ์ด ์์ฑ์ ์๋ต์ผ๋ก ๋ฐ์ JSON ํ
์คํธ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ JSON ๊ฐ์ฒด๋ก ๋ณํํด์ผ ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์๋ ์ ์ญ ๊ฐ์ฒด๋ก JSON ๊ฐ์ฒด๊ฐ ์์ผ๋ฉฐ, JSON ๋ฌธ์์ด์ ๊ฐ์ฒด๋ก ๋ณํํด์ฃผ๋ ๋ฉ์๋๊ฐ ์ ๊ณต๋ฉ๋๋ค.
const json = JSON.parse(xhr.responseText)
json
๋ณ์๋ JSON ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ๋ํ๋ด๊ณ , ์์ฑ์ ํตํด JSON ๊ฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
# ๐๐ปโโ๏ธTip
JSON ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๋๋ ๋ฐ๋ชจ, ๋๋ ํ ์คํธ์ฉ์ผ๋ก JSON ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๊ฐ๋ฐ์ฉ ์๊ฒฉ ์๋ฒ, ๋๋ ๋ก์ปฌ ์๋ฒ๊ฐ ํ์ํ๋ฐ, ์ฌ๊ฑด์ ์ด๋ฐ ์ค๋น๊ฐ ์ด๋ ค์ด ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ JSON Rest API ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ฌ์ดํธ๊ฐ ์์ต๋๋ค.
https://jsonplaceholder.typicode.com/ (opens new window)
๊ฐ์์ ๋ธ๋ก๊ทธ ์๋น์ค ๋ฐ์ดํฐ๋ฅผ Rest API๋ก ์ ๊ณตํ๋ JSON ์๋ฒ ์๋น์ค๋ฅผ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๋ฏ๋ก ์ด๊ธฐ ํ์ต ํ๊ฒฝ์์ ์์ฑํ AJAX ๊ธฐ๋ฅ, ๋๋ JSON ๋ฐ์ดํฐ ์์ ๋ฐ ๊ฐ๊ณต ๊ธฐ๋ฅ์ ํ ์คํธํ๋๋ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
# ๐ ์ ๋ฆฌ
- AJAX๋ (ํ์ด์ง์ ์ ์ฒด๊ฐ ์๋๋ผ) ์ผ๋ถ๋ง์ ์์ ํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ธฐ์ ์ ์ด์นญ์ด๋ค.
- HTML, XML, JSON ๋ฐ์ดํฐ๋ฅผ ํ์ด์ง์ ์ฝ์ ํ ์ ์๋ค. (JSON์ด ์ ์ฐจ ๋์คํ๋์ด ๊ฐ๊ณ ์๋ค)
# ๐ ์ฐธ๊ณ ๋งํฌ
โ ๐ ์น์ ๋์ ๐ RESTful API โ