43์žฅ Ajax

43.1 Ajax๋ž€?

Ajax(Asynchronous JavaScript and XML)๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ , ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•ด ์›นํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” Web API์ธ XMLHttpRequest ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. 1999๋…„ MS๊ฐ€ ๊ฐœ๋ฐœํ•œ XMLHttpRequest๋Š” 2005๋…„ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ Ajax๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ตฌ๊ธ€ ๋งต์Šค๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ์„ ์ž…์ฆํ–ˆ๋‹ค.

์ „ํ†ต์ ์ธ ๋ฐฉ์‹์€ ์™„์ „ํ•œ HTML์„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „์†ก๋ฐ›์•„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ–ˆ๋Š”๋ฐ, ํ™”๋ฉด์ด ์ „ํ™˜๋˜๋ฉด ์ƒˆ๋กœ์šด HTML ํŒŒ์ผ์„ ์ „์†ก๋ฐ›์•„ ์›นํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•ด์•ผ ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ

  • ๋ณ€๊ฒฝํ•  ํ•„์š” ์—†๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ๋‹ค์‹œ ์ „์†ก๋ฐ›์•„ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ๋ฐœ์ƒ

  • ํ™”๋ฉด ์ „ํ™˜์ด ์ผ์–ด๋‚˜๋ฉด ํ™”๋ฉด์ด ์ˆœ๊ฐ„์ ์œผ๋กœ ๊นœ๋นก์ด๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒ

  • ๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ์— ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์ด ์˜ฌ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์ฒ˜๋ฆฌ๊ฐ€ ๋ธ”๋กœํ‚น๋จ

๊ฐ™์€ ๋‹จ์ ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

Ajax๋Š” ์œ„์™€ ๊ฐ™์€ ๋‹จ์ ์„ ๋ณด์™„ํ•ด

  • ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ „์†ก๋ฐ›์•„ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ํ†ต์‹ ๋งŒ ๋ฐœ์ƒ

  • ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์€ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜์ง€ ์•Š์Œ

  • ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ์— ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ธ ํ›„ ๋ธ”๋กœํ‚น์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ

์™€ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค.

43.2 JSON

JSON(JavaScript Object Notation)์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ HTTP ํ†ต์‹ ์„ ์œ„ํ•œ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ ํฌ๋งท์ด๋‹ค. JS์— ์ข…์†๋˜์ง€ ์•Š๋Š” ์–ธ์–ด ๋…๋ฆฝํ˜• ๋ฐ์ดํ„ฐ ํฌ๋งท์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

43.2.1 JSON ํ‘œ๊ธฐ ๋ฐฉ์‹

JSON์€ JS์˜ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ํ‚ค์™€ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ๋‹ค.

{
    "name" : "Kim",
    "age" : 23,
    "alive" : true,
    "hobby" : ["traveling", "tennis"]
}

// ํฐ๋”ฐ์˜ดํ‘œ๋กœ ํ‚ค๋ฅผ ๋ฌถ์–ด์•ผ ํ•œ๋‹ค.
// ๊ฐ’์€ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์ด์ง€๋งŒ ๋ฌธ์ž์—ด์€ ๋ฐ˜๋“œ์‹œ ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์–ด์•ผ ํ•œ๋‹ค.

43.2.2 JSON.stringify

JSON.stringift ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ JSON ํฌ๋งท์˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ๊ฐ์ฒด๋ฅผ ์ „์†กํ•˜๋ ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ดํ™”ํ•ด์•ผํ•˜๋Š”๋ฐ ์ด๋ฅผ ์ง๋ ฌํ™”๋ผ ํ•œ๋‹ค.

43.2.3 JSON.parse

JSON.parse ๋ฉ”์„œ๋“œ๋Š” JSON ํฌ๋งท์˜ ๋ฌธ์ž์—ด์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „์†ก๋œ JSON ๋ฐ์ดํ„ฐ๋Š” ๋ฌธ์ž์—ด์ด๋‹ค. ์ด ๋ฌธ์ž์—ด์„ ๊ฐ์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด JSON ํฌ๋งท์˜ ๋ฌธ์ž์—ด์„ ๊ฐ์ฒดํ™”ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋ฅผ ์—ญ์ง๋ ฌํ™”๋ผ ํ•œ๋‹ค.

43.3 XMLHttpRequest

๋ธŒ๋ผ์šฐ์ €๋Š” ์ฃผ์†Œ์ฐฝ์ด๋‚˜ form ํƒœ๊ทธ, a ํƒœ๊ทธ ๋“ฑ์„ ํ†ตํ•ด HTTP ์š”์ฒญ ์ „์†ก ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ ์ œ๊ณตํ•œ๋‹ค. ์ด ์™ธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด HTTP ์š”์ฒญ์„ ์ „์†กํ•˜๋ ค๋ฉด XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Web API์ธ XMLHttpRequest ๊ฐ์ฒด๋Š” HTTP ์š”์ฒญ ์ „์†ก๊ณผ ์‘๋‹ต ์ˆ˜์‹ ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

43.3.1 XMLHttpRequest ๊ฐ์ฒด ์ƒ์„ฑ

XMLHttpRequest ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๊ฐ์ฒด๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” Web API ์ด๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ๋งŒ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

43.3.2 XMLHttpRequest ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ

P.822 - P.824 ํ™•์ธํ•˜๊ธฐ

43.3.3 HTTP ์š”์ฒญ ์ „์†ก

HTTP ์š”์ฒญ์„ ์ „์†กํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

  1. XMLHttpRequest.prototype.open ๋ฉ”์„œ๋“œ๋กœ HTTP ์š”์ฒญ์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

  2. ํ•„์š”์— ๋”ฐ๋ผ XMLHttpRequest.prototype.setRequestHeader ๋ฉ”์„œ๋“œ๋กœ ํŠน์ • HTTP ์š”์ฒญ์˜ ํ—ค๋” ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.

  3. XMLHttpRequest.prototype.send ๋ฉ”์„œ๋“œ๋กœ HTTP ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค.

43.3.4 HTTP ์‘๋‹ต ์ฒ˜๋ฆฌ

์„œ๋ฒ„๊ฐ€ ์ „์†กํ•œ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด XMLHttpRequest ๊ฐ์ฒด๊ฐ€ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ด๋ฒคํŠธ๋ฅผ ์บ์น˜ํ•ด์•ผ ํ•œ๋‹ค. HTTP ์š”์ฒญ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” readyState ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” readystatechange ์ด๋ฒคํŠธ๋ฅผ ์บ์น˜ํ•˜์—ฌ HTTP ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. onreadystatechange ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœํผํ‹ฐ์— ํ• ๋‹นํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” HTTP ์š”์ฒญ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” xhr.readyState๊ฐ€ XMLHttpRequest.DONE์ธ์ง€ ํ™•์ธํ•ด ์„œ๋ฒ„์˜ ์‘๋‹ต์ด ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

์„œ๋ฒ„์˜ ์‘๋‹ต์ด ์™„๋ฃŒ๋˜๋ฉด HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” xhr.state๊ฐ€ 200์ธ์ง€ ํ™•์ธํ•ด ์ •์ƒ ์ฒ˜๋ฆฌ์™€ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

readystatechange ์ด๋ฒคํŠธ ๋Œ€์‹  load ์ด๋ฒคํŠธ๋ฅผ ์บ์น˜ํ•ด๋„ ๋œ๋‹ค. load ์ด๋ฒคํŠธ๋Š” HTTP ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ load ์ด๋ฒคํŠธ๋ฅผ ์บ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ xhr.readyState๊ฐ€ XMLHttpRequest.DONE์ธ์ง€ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

Last updated

Was this helpful?