javascript
๋ฅผ ํตํด ์๋ฒ์ ๋น๋๊ธฐ ํต์ ํ ์ ์๋ ๊ธฐ๋ฒ์ ์๋ฏธํ๋ฉฐ, ํ์ด์ง๋ฅผ ์๋ก ๊ณ ์น์ง ์๊ณ ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๊ณ ํ์ด์ง๋ฅผ ์
๋ฐ์ดํธ ํ ์ ์๋ค.๐ AJAX์ ๊ฐ๋ ฅํ ํน์ง์ ํ์ด์ง ์ ์ฒด๋ฅผ ์ฌ๋ก๋ฉ ํ์ง ์๊ณ ์๋ ์ํ ๋๋ "๋น๋๊ธฐ์ฑ
"์ด๋ค.
์ด๋ฌํ ๋น๋๊ธฐ์ฑ์ ํตํด ์ฌ์ฉ์์ Event๊ฐ ์์ผ๋ฉด ์ ์ฒด ํ์ด์ง๊ฐ ์๋ ์ผ๋ถ๋ถ๋ง์ ์
๋ฐ์ดํธ ํ ์ ์๊ฒ ํด์ค๋ค.
๐ AJAX์ ์ฃผ์ ๋๊ฐ์ง ํน์ง์ ์๋์ ์์
์ ํ ์ ์๊ฒ ํด์ค๋ค.
1) ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด ์๋ฒ์ ์์ฒญ
2) ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ ์์
์ ์ํ
๐ Ajax์ X๋ XML
์ ์๋ฏธํ์ง๋ง, JSON
์ JavaScript์ ์ผ๋ถ๊ฐ ๋์ด ํฌ๊ธฐ๊ฐ ๋ ๊ฐ๋ฒผ์์ง๋ ๊ฒ๊ณผ ๊ฐ์ ๋ง์ ์ด์ ๋๋ฌธ์ ์ค๋๋ XML๋ณด๋ค ์ ํธ๋๋ค. JSON๊ณผ XML์ ๋ชจ๋ Ajax ๋ชจ๋ธ์์ ์ ๋ณด๋ฅผ ํจํค์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
โฑ
์ ํต์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋ธ
vxAjax๋ฅผ ์ฌ์ฉํ ์ ํ๋ฆฌ์ผ์ด์
๋น๊ต
๊ธฐ์กด ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ธ๋ผ์ฐ์ ์์ ํผ์ ์ฑ์ฐ๊ณ ์ด๋ฅผ ์น ์๋ฒ๋ก ์ ์ถ(submit)์ ํ๋ฉดํ๋
์ ์์ฒญ์ผ๋ก ์น ์๋ฒ๋ ์์ฒญ๋ ๋ด์ฉ์ ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ์ฌ์๋ก์ด ์น ํ์ด์ง๋ฅผ ์์ฑํ๊ณ ์๋ต
์ผ๋ก ๋๋๋ ค์ค๋ค.
์ด๋ ์ต์ด์ ํผ์ ๊ฐ์ง๊ณ ์๋ ํ์ด์ง์ ์ฌ์ฉ์๊ฐ ์ด ํผ์ ์ฑ์ ๊ฒฐ๊ณผ๋ฌผ๋ก์ ๋๋๋ ค ๋ฐ์ ํ์ด์ง๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌํ ๋ด์ฉ์ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ค๋ณต๋๋ HTML ์ฝ๋๋ฅผ ๋ค์ ํ๋ฒ ์ ์ก์ ๋ฐ์์ผ๋ก์จ ๋ง์ ๋์ญํญ์ ๋ญ๋นํ๊ฒ ๋๋ค.๋ฐ๋ฉด
Ajax ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ํ ๋ฐ์ดํฐ๋ง์ ์น์๋ฒ์ ์์ฒญํด์ ๋ฐ์ ํ ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค. ๋ณดํต XML ๊ธฐ๋ฐ์ ์น ์๋น์ค ํ๋กํ ์ฝ์ด ์ฌ์ฉ๋๋ฉฐ, ์น ์๋ฒ์ ์๋ต์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ ์ชฝ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋ค.
์น ์๋ฒ์์ ์ ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ผ๋ถ๋ถ์ด ํด๋ผ์ด์ธํธ ์ชฝ์์ ์ฒ๋ฆฌ ๋๋ฏ๋ก ์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ ์ฌ์ด์ ๊ตํ๋๋ ๋ฐ์ดํฐ๋๊ณผ ์น์๋ฒ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋๋ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต์ฑ์ด ์ข์์ง๋ค. ๋ํ ์น์๋ฒ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ํ ๋ถํ๋ฅผ ์ค์ฌ์ฃผ๋ ์ผ์ด ์์ฒญ์ ์ฃผ๋ ์๋ง์ ์ปดํจํฐ์ ๋ํด์ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ธ ์น ์๋ฒ ์ฒ๋ฆฌ๋๋ ์ค์ด๋ค๊ฒ ๋๋ค.
์ฅ์
๋จ์
โ ํด๋ผ์ด์ธํธ ํ๋ง(client pooling) ๋ฐฉ์์ด๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ํ๋ ์ ๋ณด๋ฅผ ์๋ฒ์๊ฒ ์์ฒญํ์ฌ ์ป๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
์ด์ ๋ฐํด ์๋ฒ ํธ์(server push) ๋ฐฉ์์ด๋ ์ฌ์ฉ์๊ฐ ์์ฒญํ์ง ์์๋ ์๋ฒ๊ฐ ์์์ ์๋์ผ๋ก ํน์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ค๋งํธ ํฐ์์ ๊ฐ์ข ์ฑ์ด ๋ณด๋ด๋ ํธ์ ์๋ฆผ์ด ์๋ฒ ํธ์ ๋ฐฉ์์ ๋ํ์ ์ธ ์๋ค.
โฑ ๋น๋๊ธฐ ๋ฐฉ์
๋น๋๊ธฐ ๋ฐฉ์
์ ์นํ์ด์ง๋ฅผ ๋ฆฌ๋ก๋ํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ์์ด๋ฉฐ Ajax๋ฅผ ํตํด์ ์๋ฒ์ ์์ฒญ์ ํ ํ ๋ฉ์ถ์ด ์๋ ๊ฒ์ด ์๋๋ผ ๊ทธ ํ๋ก๊ทธ๋จ์ ๊ณ์ ๋์๊ฐ๋ค๋ ์๋ฏธ๋ฅผ ๋ดํฌํ๊ณ ์๋ค.ํ์ด์ง ๋ฆฌ๋ก๋์ ๊ฒฝ์ฐ, ์ ์ฒด ๋ฆฌ์์ค๋ฅผ ๋ค์ ๋ถ๋ฌ์์ผํ๋๋ฐ ์ด๋ฏธ์ง, ์คํฌ๋ฆฝํธ , ๊ธฐํ ์ฝ๋๋ฑ์ ๋ชจ๋ ์ฌ์์ฒญํ ๊ฒฝ์ฐ ๋ถํ์ํ ๋ฆฌ์์ค ๋ญ๋น๊ฐ ๋ฐ์ํ๊ฒ ๋์ง๋ง ๋น๋๊ธฐ์ ๋ฐฉ์์ ์ด์ฉํ ๊ฒฝ์ฐ
ํ์ํ ๋ถ๋ถ
๋ง ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๋งค์ฐ ํฐ ์ฅ์ ์ด ์๋ค.
โฑ AJAX์ ์งํ๊ณผ์
(1)XMLHttpRequest
Object๋ฅผ ๋ง๋ค๊ธฐ.
- request๋ฅผ ๋ณด๋ผ ์ค๋น๋ฅผ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ํค๋ ๊ณผ์
- ์ด๊ฒ์ ์ํด์ ํ์ํ method๋ฅผ ๊ฐ์ถ object๊ฐ ํ์ํจ
(2)
callback ํจ์
๋ฅผ ๋ง๋ค๊ธฐ.
- ์๋ฒ์์ response๊ฐ ์์ ๋ ์คํ์ํค๋ ํจ์
- HTML ํ์ด์ง๋ฅผ ์ ๋ฐ์ดํธ ํจ
(3)
Open a request
- ์๋ฒ์์ response๊ฐ ์์ ๋ ์คํ์ํค๋ ํจ์
- HTML ํ์ด์ง๋ฅผ ์ ๋ฐ์ดํธ ํจ
(4)
send the request
โฑ AJAX๊ฐ ์ฐ์ด๋ ๋ฐฉ๋ฒ
XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์ป์ ๋ค, url์ ํตํด ์์ฒญ(request)ํ๊ณ ์๋ต(response)์ ๋ฐ์ผ๋ฉด ์๋ต ๊ฒฐ๊ณผ์ ๋ง๋ ํจ์(callbackํจ์)๋ฅผ ์คํํ๋ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค.
์์ ์๋ XMLHttpRequest API๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ์ง๋ง, ๋ถํธํจ์ ๋๋ ์ฌ์ฉ์๋ค์ด JQuery๋ฅผ ํตํด ๊ตฌํํ๊ธฐ ์์ํ๊ณ , ๊ทธ ์ดํ fetch API๊ฐ ES6(ES2015) ํ์ค์ผ๋ก ๋ฑ์ฅํ๋ฉด์fetch API๋ฅผ ํตํด ๊ตฌํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ
์ด ๋์๋ค.// โฃ๏ธ ๊ธฐ๋ณธ์ ์ธ fetch๊ตฌ์กฐ fetch(resource, init) // resource: URL ๊ฒฝ๋ก, ์์ฒญ ์ฃผ์ / init: ์ค์ ๊ฐ์ฒด .then( callback ) .catch( callback ) // resource: URL ๊ฒฝ๋ก, ์์ฒญ ์ฃผ์ // โฃ๏ธ init ๊ฐ์ฒด ์์ฑ ์ const init = { method: 'GET', headers: { 'Content-Type': 'application/json', }, credentials: 'same-origin', }; // โฃ๏ธ fetch ์์ const url = 'https://youtube.com/todos/'; const init = { method: 'GET', headers: { 'Content-Type': 'application/json', }, credentials: 'same-origin', }; fetch(url, init) .then(res => { if(res.status === 200){ return res.json() } else{ console.error(`HTTP error! status: ${res.status}`) } }) .then(jsonData => { console.log(jsonData) }) .catch(err => { console.log(err) })