์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

1. ์•„์ด์•„์Šค์˜ ์˜๋ฌธ์‹ ํ‘œ๊ธฐ2. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•
2.1. ๊ฐœ์š”2.2. ์—ญ์‚ฌ2.3. ์›๋ฆฌ2.4. ๋‹จ์ 2.5. ์˜ˆ์ œ
2.5.1. Pure Javascript2.5.2. jQuery
2.6. ๋Œ€์ฒด/๋ณด์™„ ๊ธฐ์ˆ 
3. ์ฝ”๋‚˜๋ฏธ์˜ ์ŠˆํŒ…๊ฒŒ์ž„4. ์˜๊ตญ๊ตฐ ์ฐจ๊ธฐ ๋‹ค๋ชฉ์  ์žฅ๊ฐ‘์ฐจ5. ํ•œ๊ตญ์˜ ๋‚จ์„ฑ ์•„์ด๋Œ ๊ทธ๋ฃน

1. ์•„์ด์•„์Šค์˜ ์˜๋ฌธ์‹ ํ‘œ๊ธฐ[ํŽธ์ง‘]

์•„์ด์•„์Šค ๋ฌธ์„œ ์ฐธ์กฐ.

2. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•[ํŽธ์ง‘]

2.1. ๊ฐœ์š”[ํŽธ์ง‘]

AJAX๋Š” Asynchronous JavaScript and XML์˜ ์•ฝ์ž๋กœ, ๋ง ๊ทธ๋Œ€๋กœ JavaScript์™€ XML์„ ์ด์šฉํ•œ ๋น„๋™๊ธฐ์  ์ •๋ณด ๊ตํ™˜ ๊ธฐ๋ฒ•์ด๋‹ค.

๊ฐœ๋…์ ์œผ๋กœ 1999๋…„ 3์›”์— ์ด๋ฏธ ์ •๋ฆฝ๋˜์–ด ์žˆ์—ˆ์ง€๋งŒ, ์šฉ์–ด ์ž์ฒด๋Š” 2005๋…„ 2์›” 18์ผ Jesse James Garrett์— ์˜ํ•ด ์ฒ˜์Œ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค. ์ด๋ฆ„์— XML์ด๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด์žˆ๊ธด ํ•˜์ง€๋งŒ JSON์ด๋‚˜ ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์˜ค๋ธŒ์ ํŠธ๋“ค๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์„œ ์š”์ฆ˜์—” XML์„ ์ž˜ ์•ˆ ์“ฐ๊ณ  ์‹ญ์ค‘ํŒ”๊ตฌ JSON์„ ๋‹ค๋ฃฌ๋‹ค. ์šฉ์–ด์™€ ์‹ค์ œ ๊ธฐ์ˆ ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์ปค์ ธ์„œ ์š”์ฆ˜์—๋Š” ์•ฝ์–ด๊ฐ€ ์•„๋‹Œ ๊ณ ์œ ๋ช…์‚ฌ ์ทจ๊ธ‰ํ•˜๊ณ  ์žˆ๋‹ค.

2.2. ์—ญ์‚ฌ[ํŽธ์ง‘]

Ajax๊ฐ€ ๋“ฑ์žฅํ•˜๊ธฐ ์ด์ „์—๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ด๋–ค ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์ „๋‹ฌํ•ด ์ฃผ์—ˆ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋งˆํฌ์—… ๋ฐ์ดํ„ฐ(HTML)๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์— ๋ Œ๋”๋งํ•˜๋Š” ์ผ์„ ํ–ˆ๋‹ค. ์‚ฌ์‹ค ์ด ๋ฐฉ๋ฒ•์€ ์›น ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ๋„, ์„œ๋ฒ„์—๊ฒŒ๋„ ์„œ๋กœ ๋ถˆํŽธํ–ˆ๋Š”๋ฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋งค๋ฒˆ ๋˜‘๊ฐ™์€ ๋ ˆ์ด์•„์›ƒ์˜ ํŽ˜์ด์ง€๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ Œ๋”๋งํ•ด์•ผ ํ–ˆ๊ณ  ์„œ๋ฒ„ ์—ญ์‹œ ๋งค๋ฒˆ ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง(์ด ๊ฒฝ์šฐ์—๋Š” HTML ํŒŒ์ผ ์ƒ์„ฑ)ํ•ด์•ผ ํ•ด์„œ ์„œ๋กœ ๋ถ€๋‹ด์ด ๋˜์—ˆ๋‹ค. Ajax ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ํŠน์œ ์˜ ๊นœ๋นก๊ฑฐ๋ฆผ ํ˜„์ƒ์ด ์ƒ๊ธฐ๋Š” ์ด์œ ๊ฐ€ ๋งค๋ฒˆ ํŽ˜์ด์ง€๋ฅผ ์‹น ์ง€์šฐ๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ชจ๋“  ๊ฒƒ์„ ๊ทธ๋ ค๋‚ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Ajax๋Š” ์›น ํŽ˜์ด์ง€์˜ ๋””์ž์ธ ์š”์†Œ์™€ ์ •๋ณด ์š”์†Œ๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค. ์ฒ˜์Œ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๋ฉด ์›น ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€์˜ ์Šคํƒ€์ผ๊ณผ ๋ ˆ์ด์•„์›ƒ์„ ์ •์˜ํ•˜๋Š” ์ •์  HTML ํŒŒ์ผ๊ณผ CSS ํŒŒ์ผ, ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์š”์ฒญํ•˜๋ฉด ๋˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•œ JavaScript ํŒŒ์ผ์„ ์ „๋‹ฌํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ผ๋‹จ ์ด ๋‚ด์šฉ์œผ๋กœ ํŽ˜์ด์ง€์˜ ๊ธฐ๋ณธ์ ์ธ ๊ณจ๊ฒฉ์„ ๊ตฌ์ถ•ํ•ด ๋†“๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณจ๊ฒฉ์˜ ๊ตฌ์ถ•์ด ๋๋‚˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ์ „๋‹ฌ๋ฐ›์€ JavaScript๋ฅผ ์‹คํ–‰ํ•ด์„œ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋งŒ์„ ๋ณ„๋„๋กœ ์š”์ฒญํ•œ๋‹ค. ์ด ๋•Œ ์„œ๋ฒ„์—์„œ ์ฃผ๋Š” ์‘๋‹ต์€ ์ˆœ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด ์ฆ‰ XML ๋˜๋Š” JSON ๋ฐ์ดํ„ฐ์ด๋‹ค.[1] ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘” ํ‹€ ์•ˆ์— ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ผ์›Œ ๋„ฃ๋Š”๋‹ค.

๊ณผ๊ฑฐ ์ด๋Ÿฐ ์‹์˜ HTTP ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ํ†ต์‹ ์€ Ajax๋ผ๋Š” ์šฉ์–ด๋งŒ ์—†์—ˆ์„ ๋ฟ, ์ง€๊ธˆ ์‚ฌ๋žŒ๋“ค์ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ MS๊ฐ€ Ajax๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์œ ์ผํ•˜๊ฒŒ ์ œ๊ณตํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.
MS๋Š” 1999๋…„ 3์›”์— ๋ฐœํ‘œ๋œ Internet Explorer 5๋ถ€ํ„ฐ ๋„์ž…๋œ ๋…์ž ๊ทœ๊ฒฉ์ธ MSXML 2.0์— ํฌํ•จ๋œ 'Microsoft.XMLHTTP'๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ˜„์žฌ์˜ Ajax์™€ ๊ฑฐ์˜ ๋™์ผํ•œ ๊ฐœ๋…์œผ๋กœ์จ ์œ ์ผํ•˜๊ฒŒ ์ œ๊ณตํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ์ด ์ปดํฌ๋„ŒํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๊ณ ์œ ์ŠคํŽ™์ด ์•„๋‹Œ ์œˆ๋„์šฐ์— ํƒ‘์žฌ๋œ ActiveX๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์จ์•ผ ํ•˜๋Š” ๋น„ํ‘œ์ค€ ๊ธฐ์ˆ ์ด๋ฉฐ, ๋ฌด๊ฑฐ์šด http๋กœ ๋ฌด๊ฑฐ์šด XML์„ ๋ฐ›์•„์˜จ๋‹ค๋Š” ์‚ฌ์‹ค์—[2] ์•„๋ฌด๋„ ๊ฑฐ๋“ค๋–  ๋ณด์ง€ ์•Š๋Š” ๊ธฐ์ˆ ์ด์—ˆ๋‹ค.
๊ทธ๋Ÿฌ๋˜ ์™€์ค‘์— 1998๋…„๋„ ์ฏค ๋„ค์˜ค์œ„์ฆˆ์˜ ์„ธ์ดํด๋Ÿฝ์ด ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํŽ˜์ด์ง€ ๋ฆฌํ”Œ๋ž˜์‹œ๋‚˜ hidden iframe ํŠธ๋ฆญ ๊ฐ™์€ ๊ฒƒ๋“ค[3] ๋Œ€์‹  ์•„๋ฌด๋„ ์•ˆ ์“ฐ๋˜ ์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ๋‹น์‹œ IE์˜ ๊ฒฝ์Ÿ ์›น ๋ธŒ๋ผ์šฐ์ €์˜€๋˜ Netscape๋Š” ์ด๋Ÿฐ ๊ธฐ์ˆ ์„ ์ง€์›ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์ดํด๋Ÿฝ์€ ์–ด์ฉ” ์ˆ˜ ์—†์ด IE ์ „์šฉ์œผ๋กœ๋งŒ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•˜์˜€๋‹ค.

์‹œ๊ฐ„์ด ํ˜๋Ÿฌ Netscape์˜ ํ”ผ๋ฅผ ์ด์–ด๋ฐ›์€ ๋ชจ์งˆ๋ผ๊ฐ€ 2000๋…„ 12์›” 6์ผ์— Firefox์— ์‚ฌ์šฉ๋œ ์—”์ง„ ์ค‘ ํ•˜๋‚˜์ธ Gecko 0.6 ๋ฒ„์ „์— XMLHttpRequest ๋งค์„œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์ง€๋งŒ 2002๋…„ 6์›” 5์ผ์— ๋ฐœํ‘œ๋œ Gecko 1.0 ๋ฒ„์ „๋ถ€ํ„ฐ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ๊ณ , ์‚ฌํŒŒ๋ฆฌ 2004๋…„ 2์›” 1.2 ๋ฒ„์ „๋ถ€ํ„ฐ, ์˜คํŽ˜๋ผ๋Š” 2005๋…„ 4์›”๋ถ€ํ„ฐ ์—ฐ๋‹ฌ์•„ ๋„์ž…๋˜์—ˆ๋‹ค.

๋‹ค๋ฅธ ์›น ๋ธŒ๋ผ์šฐ์ €๋“ค์ด XMLHttpRequest๋ฅผ ๋„์ž…ํ•  ์ฆˆ์Œ์— ๊ตฌ๊ธ€์€ 2004๋…„ 4์›” 1์ผ์— ๋ฐœํ‘œ๋œ Gmail, 2005๋…„ 2์›” 8์ผ์— ๋ฐœํ‘œ๋œ ๊ตฌ๊ธ€ ์ง€๋„๊ฐ€ ์•„๋ฌด๋Ÿฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์ด AJAX๋กœ ๊ตฌํ˜„๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ฐํ˜€์ง€๋ฉด์„œ ํ™”์ œ๊ฑฐ๋ฆฌ๊ฐ€ ๋˜์—ˆ๋‹ค. ๊ตฌ๊ธ€ ์ง€๋„์˜ ๋ฐœํ‘œ๋กœ๋ถ€ํ„ฐ ์—ดํ˜ ๋’ค Jesse James Garrett๊ฐ€ ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ "์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹, Ajax"๋ผ๊ณ  ๋ถ€๋ฅด๋ฉด์„œ ์งง์€ ๊ธ€์ž์™€ ์‰ฌ์šด ๋ฐœ์Œ ๋•๋ถ„์— ์ ์ฐจ ๊ณ ์œ ๋ช…์‚ฌ์ฒ˜๋Ÿผ ๊ตณ์–ด์กŒ๋‹ค.

ํŠนํžˆ, ๊ตฌ๊ธ€ ์ง€๋„๊ฐ€ ๋ง‰ ๋‚˜์™”์„ ๋•Œ์˜ ์ถฉ๊ฒฉ์ ์ธ ๋ฐ˜์‘์€ ๊ตญ๋‚ด์—์„œ ๋”์šฑ ๋‘๋“œ๋Ÿฌ์กŒ๋Š”๋ฐ, ๋‹น์‹œ ํ•œ๊ตญ์˜ ์ง€๋„ ์„œ๋น„์Šค๋Š” ์—ด์ด๋ฉด ์—ด ActiveX ๊ธฐ๋ฐ˜์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ActiveX ์—†์ด ์ง€๋„ ๊ฐ™์€ ์„œ๋น„์Šค๊ฐ€ ๊ตฌํ˜„๋œ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๊ตญ๋‚ด์—์„œ๋Š” ํฐ ์ถฉ๊ฒฉ์œผ๋กœ ๋‹ค๊ฐ€์™”๊ณ , ๊ตญ๋‚ด์—์„œ๋Š” ๋„ˆ๋„๋‚˜๋„ ์ง€๋„๋ฅผ AJAX ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค.

Ajax ๊ธฐ์ˆ ์€ ํ˜„๋Œ€ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ง€ํƒฑํ•˜๋Š” ๊ทผ๊ฐ„(์ฝ”์–ด) ๊ธฐ์ˆ ์ด ๋œ ์ง€ ์˜ค๋ž˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ์„œ๋“œ ํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‚˜์™€ ์žˆ์œผ๋ฉฐ ๋Œ€๊ทœ๋ชจ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์•„์˜ˆ Ajax ๊ธฐ๋Šฅ์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๊ธฐ๋„ ํ•˜๋‹ค. axios๋‚˜ Oboe ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ™์ด ๋น„๋™๊ธฐ HTTP ์š”์ฒญ๋งŒ ์ „๋ฌธ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์žˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ๋„˜์–ด์„œ HTTP ํ”„๋กœํ† ์ฝœ์˜ ๊นŠ์ˆ™ํ•œ ๊ณณ๊นŒ์ง€ ๊ฑด๋“œ๋ฆฌ๋Š” ๊ณ ๊ธ‰ RESTful API๋Š” jQuery์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

2.3. ์›๋ฆฌ[ํŽธ์ง‘]

  1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์‚ฌ์ดํŠธ์˜ ๊ธฐ๋ณธ ์–ผ๊ฐœ๋ฅผ ๋‹ด์€ 'ํ…œํ”Œ๋ฆฟ'์„ ์ „๋‹ฌํ•œ๋‹ค.
  2. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ˆ˜์‹ ๋ฐ›์€ ํ…œํ”Œ๋ฆฟ HTML๊ณผ CSS๋ฅผ ํ•ด์„ํ•ด ํ™”๋ฉด์˜ ๊ธฐ๋ณธ ๋ชจ์–‘์„ ๊ทธ๋ฆฐ๋‹ค.
  3. ๊ณ„์†ํ•ด์„œ ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ์˜ ์š”์ฒญ ๋ฐฉ์‹๊ณผ ์ˆ˜์‹ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ€๊ณตํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ธฐ์ˆ ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ „๋‹ฌํ•œ๋‹ค.[4]
  4. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ํ•ด์„ํ•ด์„œ ํŒŒ์ผ์— ๊ธฐ์ˆ ๋œ ๋ฐฉ์‹๋Œ€๋กœ ์„œ๋ฒ„์— ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  5. ์„œ๋ฒ„๋Š” ์ˆœ์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต์œผ๋กœ ๋˜๋Œ๋ ค์ค€๋‹ค.
  6. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ˆ˜์‹ ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ์˜ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ๊ฐ€๊ณต ๋ฐฉ์‹์— ๋”ฐ๋ผ ์‚ฝ์ž… ์™ธ์˜ ์ž‘์—…(๋ณ€๊ฒฝ, ์‚ญ์ œ)์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

2.4. ๋‹จ์ [ํŽธ์ง‘]

Ajax ๋Š” ๋™์  ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•ด์„ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒ€์ƒ‰ ์—”์ง„์—์„œ๋Š” ๋‚ด์šฉ์ด ๊ฒ€์ƒ‰๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.[5] ์ผ๋‹จ ๊ตฌ๊ธ€์€ Ajax ๊ธฐ๋ฐ˜์˜ ์›น ์‚ฌ์ดํŠธ๋„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ ˆ์ด์•„์›ƒ์ด ๋„ˆ๋ฌด ๋ณต์žกํ•œ ์‚ฌ์ดํŠธ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ํž˜๊ฒจ์›Œํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋˜๋Š” ์•„์ฃผ ์‹ ์†ํ•˜๊ฒŒ ์ฒซ ํ™”๋ฉด์„ ๋ณด์—ฌ ์ค„ ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ Ajax๋Š” ์ตœ์†Œ ๋‘ ๋ฒˆ์˜ ๋ฐ์ดํ„ฐ ์š”์ฒญ(์ผ๋ฐ˜์ ์œผ๋กœ 4ํšŒ ์ด์ƒ. HTML, CSS, JS ๋กœ๋”ฉ ํ›„ Ajax call 1ํšŒ)์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.(์†๋„ ์ €ํ•˜๊ฐ€ ํ•„์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.) ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์˜๋„์ ์œผ๋กœ ์˜› ๋ฐฉ์‹ ๊ทธ๋Œ€๋กœ ์„œ๋ฒ„๊ฐ€ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๊ทธ๋ ค์„œ ์ „๋‹ฌํ•œ๋‹ค. '์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง'์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ํฌ์žฅ(?)์„ ๋‘๋ฅด๊ณ  ์žˆ๋Š”๋ฐ ๊ฒฐ๊ตญ ์˜› ๊ธฐ์ˆ ์˜ ํ˜„๋Œ€์  ์žฌํ•ด์„์ด๋‹ค.

JavaScript๋ฅผ ๋ฐ˜๋“œ์‹œ ์จ์•ผ ํ•œ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅํ•œ '์–ธ์–ด'๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‹จ ํ•˜๋‚˜๋ฟ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊บผ ๋ฒ„๋ฆฌ๋ฉด Ajax ๊ธฐ๋ฐ˜ ์‚ฌ์ดํŠธ๋Š” ํ™”๋ฉด์˜ ์ผ๋ถ€๋งŒ ๊ทธ๋ ค์ง„๋‹ค. ํŠนํžˆ ์“ธ๋ชจ ์žˆ๋Š” ์ •๋ณด๋Š” ์ „ํ˜€ ์—†๋Š” ํ™”๋ฉด์ด ๊ทธ๋ ค์ง„๋‹ค. ์Šคํฌ๋ฆฝํŒ… ๊ธฐ๋Šฅ์ด ์ œํ•œ๋˜๋Š” ํŠน์ˆ˜ ๋ชฉ์  ๊ธฐ๊ธฐ์—์„œ๋Š” ์ด๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋””์ง€ํ„ธ ์•ก์ž ๊ฐ™์€ ์ดˆ์ €์„ฑ๋Šฅ ์ž„๋ฒ ๋””๋“œ ๊ธฐ๊ธฐ์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ๋Œ๋ฆด ์—ฌ๊ฑด์ด ์•ˆ ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

2.5. ์˜ˆ์ œ[ํŽธ์ง‘]

์•„๋ž˜์˜ ์˜ˆ์ œ์—์„œ๋Š” ๋ชจ๋‘ "//namu.wiki/raw/ํ‹€:ํ‹€%20๋ชจ์Œ/" ์˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™€์„œ ๋ฟŒ๋ ค์ฃผ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์ด๋‹ค.

2.5.1. Pure Javascript[ํŽธ์ง‘]

ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์ด, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ์„ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ์ด๋‹ค.

XMLHttpRequest๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ
<html>
 <head>
  <script type="text/javascript">
   var request = new XMLHttpRequest(); // XMLHttpRequest ์ƒ์„ฑ
   request.open("GET", "//namu.wiki/raw/ํ‹€:ํ‹€%20๋ชจ์Œ/"); // ๋ฐ์ดํ„ฐ๋ฅผ GET Method๋กœ ์š”์ฒญ
   request.onreadystatechange = function() {
    if ( request.readyState === 4 && request.status === 200 ) { // request๊ฐ€ ๋๋‚ฌ์œผ๋ฉฐ(4), ์„ฑ๊ณต์ (200)์ธ ๊ฒฝ์šฐ.
     document.getElementById("content").innerHTML = resquest.responseText; // #content ํƒœ๊ทธ ๋‚ด์˜ ๋‚ด์šฉ์„ ๋ฐ›์•„์˜จ ํ…์ŠคํŠธ๋กœ ๊ต์ฒด.
    }
   }
  </script>
 </head>
 <body>
  <div id="content"></div>
 </body>
</html>


Fetch API ์‚ฌ์šฉ ์˜ˆ์ œ
<html>
 <head>
  <script type="text/javascript">
   fetch("//namu.wiki/raw/ํ‹€:ํ‹€%20๋ชจ์Œ/") // fetch API๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ
    .then((response) => {
     if (response.ok) { // HTTP Status๊ฐ€ ์„ฑ๊ณต์ ์ธ (200 ๋“ฑ) ๊ฒฝ์šฐ
      return response.text(); // Response Body๋ฅผ text๋กœ ๊บผ๋‚ด์˜ด
     }
    }).then((text) => {
     document.getElementById("content").innerHTML = text;  // #content ํƒœ๊ทธ ๋‚ด์˜ ๋‚ด์šฉ์„ ๋ฐ›์•„์˜จ ํ…์ŠคํŠธ๋กœ ๊ต์ฒด.
    });
  </script>
 </head>
 <body>
  <div id="content"></div>
 </body>
</html>

2.5.2. jQuery[ํŽธ์ง‘]

jQuery๋ฅผ ์ด์šฉํ•œ ์˜ˆ์ œ์ด๋‹ค. $.ajax ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ž์ฒด์ ์ธ AJAX๋ฅผ ์ง€์›ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ๋ณธ์ ์ธ ์„ค์ •๊ณผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋งŒ ๋„ฃ์–ด์ฃผ๋ฉด ๊ฐ„๋‹จํžˆ ์ž‘๋™๋œ๋‹ค.
<html>
 <head>
  <script type="text/javascript">
   $.ajax({
    url: "//namu.wiki/raw/ํ‹€:ํ‹€%20๋ชจ์Œ/",
    method: "GET",
    dataType: "text",
    success: function(data) {
     $("#content").html(data);
    }
   })
  </script>
 </head>
 <body>
  <div id="content"></div>
 </body>
</html>

2.6. ๋Œ€์ฒด/๋ณด์™„ ๊ธฐ์ˆ [ํŽธ์ง‘]

Ajax ๋Š” ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ธฐ์ˆ ์ด์ง€๋งŒ '์–‘๋ฐฉํ–ฅ' ๊ธฐ์ˆ ์ด ์•„๋‹ˆ๋ฉฐ ๋˜ํ•œ '์š”์ฒญ-์‘๋‹ต' ์‚ฌ์ดํด์ด ์ง€๋‚˜๊ณ  ๋‚˜๋ฉด ํ†ต์‹  ์†Œ์ผ“์„ ๋‹ซ์•„๋ฒ„๋ฆฐ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์™„์ „ํ•œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์›น ์†Œ์ผ“์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์ด ๊ตฌํ˜„๋˜์—ˆ๋‹ค. ์›น ์†Œ์ผ“์€ ์š”์ฒญ-์‘๋‹ต ์‚ฌ์ดํด์ด ์ง€๋‚˜๋„ ํ†ต์‹  ์†Œ์ผ“์„ ๋‹ซ์ง€ ์•Š๊ณ  ๊ณ„์†ํ•ด์„œ ์š”์ฒญ์„ ์†ก์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ์กด์˜ HTTPํ”„๋กœํ† ์ฝœ์— ์•ฝ๊ฐ„์˜ ๋ณ€ํ˜•์„ ๊ฐ€ํ•œ๋‹ค.

์›น ์†Œ์ผ“์ด TCP์— ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ์–ด ๋Œ€๊ทœ๋ชจ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก์— ์ ํ•ฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— UDP์— ๊ธฐ๋ฐ˜ํ•œ WebRTC๋ผ๋Š” ๊ธฐ์ˆ ์ด ๊ตฌํ˜„๋˜์—ˆ๋‹ค. WebRTC๋Š” ์—ฌ๊ธฐ์„œ ํ•œ ๋ฐœ ๋” ๋‚˜์•„๊ฐ€ ์„œ๋ฒ„์˜ ์ค‘๊ฐœ๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ„ P2P ํ†ต์‹  ์ฑ„๋„์„ ํ˜•์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Ajax ๊ธฐ์ˆ  ์œ„์—์„œ ๊ตฌํ˜„๋œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๊ธฐ์ˆ ๋กœ Long polling ๊ธฐ์ˆ ์ด ์žˆ๋‹ค. Long polling ์€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„๋Š” ์ฆ‰์‹œ ์‘๋‹ต์„ ์ฃผ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ์ •๋ณด๊ฐ€ ๊ฐฑ์‹ ๋  ๋•Œ๊นŒ์ง€ ์†Œ์ผ“์„ ์—ด์–ด๋‘” ์ฑ„ ์‘๋‹ต์„ ๋ฏธ๋ฃฌ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์ƒˆ๋กœ์šด ์ •๋ณด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๊ทธ ๋•Œ ์—ด๋ ค ์žˆ๋Š” ์†Œ์ผ“์„ ํ†ตํ•ด ์‘๋‹ต์„ ๋Œ๋ ค์ฃผ๋ฉฐ ํด๋ผ์ด์–ธํŠธ(์›น ๋ธŒ๋ผ์šฐ์ €)๋Š” ์‘๋‹ต์„ ๋ฐ›๋Š” ์ฆ‰์‹œ ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋‚ ๋ฆฐ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ '์‘๋‹ตํ•˜๋ฉด ํ†ต์‹  ์ฑ„๋„์ด ๋‹ซํžˆ๋Š”' ๋ฌธ์ œ๋ฅผ ์šฐํšŒํ•œ๋‹ค. Socket.io ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์›น ์†Œ์ผ“ ๋Œ€์ฒด ๋ชจ๋“œ๊ฐ€ ์ด Long polling ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์›น ์†Œ์ผ“์ด ์ง€์›๋˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ฐ์ง€๋˜๋ฉด Socket.io๋Š” ์ด Long polling ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹  ๋ฐฉ์‹์„ ๋ฐ”๊พผ๋‹ค.

Polling ๊ณผ Long polling ์˜ ์ฐจ์ด์ ์€, Polling์€ ๊ฐฑ์‹ ๋œ ์ •๋ณด๊ฐ€ ์—†์œผ๋ฉด ์„œ๋ฒ„๊ฐ€ '๊ฐฑ์‹ ๋œ ์ •๋ณด ์—†์Œ'์ด๋ผ๋Š” ์‘๋‹ต์„ ์ฆ‰์‹œ ๋Œ๋ ค์ฃผ์ง€๋งŒ Long polling์€ ๊ฐฑ์‹ ๋œ ์ •๋ณด๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์‚ฌ์ „์— ์•ฝ์†ํ•œ ์‹œ๊ฐ„(์ˆ˜ ์ดˆ์—์„œ ์ˆ˜์‹ญ์ดˆ)๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค๋ณด๊ณ  ๊ทธ๋ž˜๋„ ๊ฐฑ์‹ ๋œ ์ •๋ณด๊ฐ€ ๋“ค์–ด์˜ค์ง€ ์•Š์œผ๋ฉด '๊ฐฑ์‹ ๋œ ์ •๋ณด ์—†์Œ'์ด๋ผ๋Š” ์‘๋‹ต์„ ๋Œ๋ ค์ค€๋‹ค.[6] ๋ฌผ๋ก  ์š”์ฒญ์„ ๋ฐ›์€ ์‹œ์ ์— ๊ฐฑ์‹ ๋œ ์ •๋ณด๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๊ธฐ๋‹ค๋ฆฌ๋˜ ๋„์ค‘์— ์ƒˆ๋กœ์šด ์ •๋ณด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๊ทธ ์ฆ‰์‹œ ๊ฐฑ์‹ ๋œ ์ •๋ณด๋ฅผ ์‘๋‹ต์œผ๋กœ ๋Œ๋ ค์ค€๋‹ค. ์š”์ฒญ์ž(๋ธŒ๋ผ์šฐ์ €) ์ž…์žฅ์—์„œ์˜ Long polling ์€ 'ํŠน์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ'์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋Œ€์‹  '์„œ๋ฒ„์—์„œ ์‘๋‹ต์ด ๋Œ์•„์˜ค๋Š” ์ฆ‰์‹œ' ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ๋ฐ”๋€๋‹ค.

3. ์ฝ”๋‚˜๋ฏธ์˜ ์ŠˆํŒ…๊ฒŒ์ž„[ํŽธ์ง‘]

A-JAX ํ•ญ๋ชฉ ์ฐธ๊ณ .

4. ์˜๊ตญ๊ตฐ ์ฐจ๊ธฐ ๋‹ค๋ชฉ์  ์žฅ๊ฐ‘์ฐจ[ํŽธ์ง‘]

์Šค์นด์šฐํŠธ SV ํ•ญ๋ชฉ ์ฐธ๊ณ .

5. ํ•œ๊ตญ์˜ ๋‚จ์„ฑ ์•„์ด๋Œ ๊ทธ๋ฃน[ํŽธ์ง‘]

์—์ด์ ์Šค ๋ฌธ์„œ ์ฐธ๊ณ .
[1] ์‚ฌ์‹ค ์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋„ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋„ Ajax๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
[2] ์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ์“ฐ๊ณ  ์žˆ๋Š” Ajax์™€ ๋‹ฌ๋ผ์ง„๊ฒŒ ์—†๋‹ค.
[3] ๋‹น์‹œ IE๋Š” ์ด๊ฑธ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋”ฑ๋”ฑ ์†Œ๋ฆฌ๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ๊ฐ์— ๋ถˆํŽธํ•จ์„ ์คฌ๋‹ค.
[4] ์ •ํ™•ํžˆ๋Š” ์œ„์—์„œ ์ˆ˜์‹ ๋ฐ›์€ ํ…œํ”Œ๋ฆฟ HTMLํŒŒ์ผ ์•ˆ์— ์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ถ”๊ฐ€๋กœ ์š”์ฒญํ•˜๋ผ๋Š” ์ง€์‹œ๊ฐ€ ์ ํ˜€ ์žˆ์œผ๋ฉฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด ์ง€์‹œ์— ๋”ฐ๋ผ ์„œ๋ฒ„์— ํ•ด๋‹น ํŒŒ์ผ์„ ์š”์ฒญํ•œ๋‹ค.
[5] ์ด์ „์— ์“ฐ์˜€๋˜ ํ”„๋ ˆ์ž„๊ณผ ๋‹จ์ ์„ ๊ณต์œ ํ•œ๋‹ค.
[6] ํ†ต์‹ ์ด ๋Š์–ด์ง„ ์ƒํƒœ์™€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ๋Œ€ ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ์ •ํ•ด์ ธ ์žˆ๋‹ค. ์ด ์‹œ๊ฐ„์„ ์ดˆ๊ณผํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ์ž์ฒด์ ์œผ๋กœ ํƒ€์ž„์•„์›ƒ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.