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์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด๊ณผ ์ ์ฌํ๊ฒ ํค์ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ ์์ํ ํ ์คํธ๋ค.
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 ์์ฒญ์ ์ ์กํ๋ ๊ฒฝ์ฐ ๋ค์ ์์๋ฅผ ๋ฐ๋ฅธ๋ค.
XMLHttpRequest.prototype.open ๋ฉ์๋๋ก HTTP ์์ฒญ์ ์ด๊ธฐํํ๋ค.
ํ์์ ๋ฐ๋ผ XMLHttpRequest.prototype.setRequestHeader ๋ฉ์๋๋ก ํน์ HTTP ์์ฒญ์ ํค๋ ๊ฐ์ ์ค์ ํ๋ค.
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?