AJAX
Last updated
Last updated
์น ๋ธ๋ผ์ฐ์ ์์ ์นํ์ด์ง๋ฅผ ์์ฒญํ๊ฑฐ๋ ๋งํฌ ํด๋ฆญ์ ํ๋ฉด ์ ํ์ด ๋ฐ์ํ๋ค.
์๋ฒ์ ๋ธ๋ผ์ฐ์ ์์ ํต์ ์ ์ํ ๊ฒ์ธ๋ฐ, ์๋ฒ๋ ์์ฒญ๋ฐ์ ํ์ด์ง(HTML)๋ฅผ ๋ฐํํ๋ค. ์ด๋ HTML์์ ๋ก๋ํ๋ CSS, JavaScript ํ์ผ๋ค๋ ๊ฐ์ด ๋ฐํ๋๋ค. ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ์ ์๋ฒ๋ ์ ์ ์ธ ํ์ผ, ์๋ฒ ์ฌ์ด๋ ํ๋ก๊ทธ๋จ์ด ๋ง๋๋ ํ์ผ, ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์๋ ์๋ค. ์๋ฒ๋ก ๋ถํฐ ์นํ์ด์ง๊ฐ ๋ฐํ๋๋ฉด ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๋ ์ด๋ฅผ ๋ ๋๋งํ์ฌ ํ๋ฉด์ ํ์ํ๋ค.
Ajax๋ Asynchronous JavaScript and XML์ ์ฝ์๋ก JavaScript๋ฅผ ์ด์ฉํ์ฌ ๋น๋๊ธฐ์ (Asynchronous)์ผ๋ก ์๋ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์๋ ํต์ ๋ฐฉ์์ด๋ค.
์ฆ, ์๋ฒ๋ก๋ถํฐ ์นํ์ด์ง๊ฐ ๋ฐํ๋๋ฉด ํ๋ฉด ์ ์ฒด๋ฅผ ๊ฐฑ์ ํ์ง ์๊ณ , ์ผ๋ถ๋ง์ ๊ฐฑ์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
Ajax์ ๋์์๋ฆฌ๋ Browser์์ ์๋ฒ๋ก ๋ณด๋ผ Data๋ฅผ Ajax Engine์ ํตํด์ ์๋ฒ๋ก ์ ์กํ๋ค. ์ด๋ Ajax Engine์ JavaScript๋ฅผ ํตํด DOM์ ์ฌ์ฉํ์ฌ XMLHttpRequest(XHR) ๊ฐ์ฒด๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค. ์ด XHR์ ์ด์ฉํด ์๋ฒ์์ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํด ์ฌ ์ ์๋ ๊ฒ์ด๋ค.
์๋ฒ๋ HTML, XML, JSON ๋ฑ์ ๋ฐํํ๋๋ฐ Ajax๋ฅผ ์ํ ๋ฐ์ดํฐ ํ์์ JSON์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
XMLHttpRequest ๊ฐ์ฒด๋ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ๋ ์ฌ์ฉํ๋ค. ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์๋ฒ์ ๊ณ์ํด์ ํต์ ํ ์ ์๋ ๊ฒ์ XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
open()
: ์๋ฒ๋ก ๋ณด๋ผ Ajax ์์ฒญ์ ํ์ ์ค์
์ ๋ฌ๋ฐฉ์ : ์์ฒญ์ ์ ๋ฌํ ๋ฐฉ์ (GET, POST)
URL์ฃผ์ : ์์ฒญ์ ์ฒ๋ฆฌํ ์๋ฒ์ ํ์ผ ์ฃผ์ ์ ๋ฌ
๋๊ธฐ์ฌ๋ถ : ์์ฒญ์ ๋๊ธฐ์์ผ๋ก ์ ๋ฌํ ์ง ๋น๋๊ธฐ์์ผ๋ก ์ ๋ฌํ ์ง ์ฌ๋ถ
๋น๋๊ธฐ true
๋๊ธฐ false
send()
: ์์ฑ๋ Ajax์์ฒญ์ ์๋ฒ๋ก ์ ๋ฌ
Ajax์์๋ ์ฃผ๋ก POST ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์ ๋ฌํ๋ค.
XMLHttpRequest.send()
๋ฉ์๋๋ฅผ ํตํด ์๋ฒ์ Request๋ฅผ ์ ์กํ๋ฉด ์๋ฒ๋ Response๋ฅผ ๋ฐํํด ์ฃผ๋๋ฐ ์ธ์ Response๊ฐ ํด๋ผ์ด์ธํธ์ ๋๋ฌํ ์ง๋ ์ ์ ์๋ค.
์ด๋ XMLHttpRequest.onreadystatechange
๋ Response๊ฐ ํด๋ผ์ด์ธํธ์ ๋๋ฌํ์ฌ ๋ฐ์๋ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ ์ฝ๋ฐฑํจ์๋ฅผ ์คํํ์ฌ ์ค๋ค. ์ฆ, req.onreadystatechange๋ readyState property๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํธ์ถ๋๋ EventHandler์ด๋ค.
readyState
: Request์ ๋ณํ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์ readyState์ property๊ฐ ๋ณ๊ฒฝ๋๋ค. response๊ฐ ํด๋ฆฌ์ด์ธํธ์ ๋๋ฌํ๋์ง๋ฅผ ์ถ์ ํ ์ ์๋ ๊ฐ์ด๋ค.
Value
State
Description
0
UNSENT
XMLHttpRequest.open() ๋ฉ์๋ ํธ์ถ ์ด์ XMLHttpRequest ๊ฐ์ฒด๊ฐ ์์ฑ
1
OPENED
XMLHttpRequest.open() ๋ฉ์๋ ํธ์ถ ์๋ฃ open() ๋ฉ์๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์คํ
2
HEADERS_RECEIVED
XMLHttpRequest.send() ๋ฉ์๋ ํธ์ถ ์๋ฃ ๋ชจ๋ ์์ฒญ์ ๋ํ ์๋ต์ด ๋์ฐฉ
3
LOADING
์๋ฒ ์๋ต ์ค(XMLHttpRequest.responseText ๋ฏธ์์ฑ ์ํ) ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ ์ค์ธ ๊ฒฝ์ฐ
4
DONE
์๋ฒ ์๋ต ์๋ฃ
status : ์๋ฒ์ ๋ฌธ์ ์ํ๋ฅผ ๋ํ๋ธ๋ค.
200 (์ ์ ์๋ต)
abort : ajax์์ฒญ์ ์ทจ์ํ๊ฑฐ๋ ์ค๋จํด์ผํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
JSON(JavaScript Object Notation)์ JavaScript์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด๊ณผ ๋งค์ฐ ํก์ฌํ๋ค. ํ์ง๋ง JSON์ ์์ํ ํ ์คํธ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ์ด๋ค.
๋ฆฌํฐ๋ด : ์ฝ๋์์์ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๋ฐฉ์
ํค๋ ๋ฐ๋์ ํฐ๋ฐ์ดํ(""
)๋ก ๋๋ฌ์ธ์ผํ๋ค. (์์ ๋ฐ์ดํ('
) ๋ถ๊ฐ)
JSON.stringify()
๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ JSON ํ์์ ๋ฌธ์์ด๋ก ๋ณํํ๋ค.
JSON.parse()
๋ JSON ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ๋ฌธ์์ด์ ๊ฐ์ฒด๋ก ๋ณํํ๋ค.
์๋ฒ๋ก๋ถํฐ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก๋ JSON ๋ฐ์ดํฐ๋ ๋ฌธ์์ด์ด๋ค. ์ด ๋ฌธ์์ด์ ๊ฐ์ฒดํํด์ผํ๋๋ฐ ์ด๊ฒ์ Deserializing(์ญ์ง๋ ฌํ) ๋ผ ํ๋ค. JSON.parse() ๋ฅผ ์ฌ์ฉํด ๋ฌธ์์ด์ ๊ฐ์ฒด๋ก ๋ณํํ ์ ์๋ค.
์์ฒญ์ ์ํด ์นํ์ด์ง๊ฐ ์ ๋ฌ๋ ์๋ฒ์ ๋์ผํ ๋๋ฉ์ธ์ ์๋ฒ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ ๋ฌธ์ ์์ด ์ฒ๋ฆฌํ ์ ์๋ค. ํ์ง๋ง ๋ณด์์์ ์ด์ ๋ก ๋ค๋ฅธ ๋๋ฉ์ธ(http, https ํฌํธ๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ ํฌํจ)์ผ๋ก๋ถํฐ ์์ฒญ(CROSS DOMAIN)์ ์ ํ๋๋ค. ์ด๊ฒ์ Same-origin policy ๋์ผ์ถ์ฒ์์น ์ด๋ผํ๋ค.
Proxy
JSONP : script ํ๊ทธ์ ์๋ณธ ์ฃผ์์ ๋ํ ์ ์ฝ์ด ์กด์ฌํ์ง ์๋๊ฒ์ ์ด์ฉํ์ฌ ๋ค๋ฅธ ๋๋ฉ์ธ์ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์์ ์ ์๋ฒ์ ํจ์๋ฅผ ์ ์ํ๊ณ ๋ค๋ฅธ ๋๋ฉ์ธ์ ์๋ฒ์ ์ป๊ณ ์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ธ์๋ก ํ๋ ํจ์ ํธ์ถ๋ฌธ์ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
Cross-Origin Resource Sharing : HTTP ํค๋์ ์ถ๊ฐ์ ์ผ๋ก ์ ๋ณด๋ฅผ ์ถ๊ฐํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ์๋ก ํต์ ํด์ผํ๋ค๋ ์ฌ์ค์ ์ธ์งํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
jQuery๋ Ajax ์์ฒญ๊ณผ ์๋ต์ ์ํด ์ ์ฉํ ๋ฉ์๋๋ค์ ์ ๊ณตํด์ค๋ค.
์ฌ๊ธฐ์ []
๋ ๋ฐ๋ณตํด์ ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค.
settings๋ Ajax ์์ฒญ ์ค์ ์ ๋ณด๋ก key,value์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ฒด์ด๋ค.
settings
Description
๋น๊ณ
url
์์ฒญ์ด ์ ์ก๋ url
method
http ์์ฒญ ๋ฐฉ์ (GET/POST)
version added: 1.9.0
type
method์ alias (GET/POST)
1.9.0 ์ด์ ๋ฒ์ ์์ ์ฌ์ฉ
data
์๋ฒ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ
dataType
์๋ฒ๋ก๋ถํฐ ๋ฐํ๋ ๋ฐ์ดํฐ์ type default: Intelligent Guess (xml, json, jsonp, script, html, text)
async
์์ฒญ ์ ๋๊ธฐํ ์ฌ๋ถ(TRUE/FALSE) ๊ธฐ๋ณธ์ ๋น๋๊ธฐ(asynchronous) ์์ฒญ
timeout
์์ฒญ ์ ํ ์๊ฐ. ์ ํ ์๊ฐ ์์ ์์ฒญ์ด ์๋ฃ๋์ง ์์ผ๋ฉด ์์ฒญ์ ์ทจ์ํ๊ฑฐ๋ error ์ฝ๋ฐฑ์ ํธ์ถ.
jsonpCallback
JSONP ์์ฒญ์ ์ํ ์ฝ๋ฐฑ ํจ์ ์ด๋ฆ
success
์์ฒญ ์ฑ๊ณต ์ด๋ฒคํธ ํธ๋ค๋ฌ
error
์์ฒญ ์คํจ ์ด๋ฒคํธ ํธ๋ค๋ฌ
complete
์์ฒญ ์๋ฃ ์ด๋ฒคํธ ํธ๋ค๋ฌ
cache
๋ธ๋ผ์ฐ์ ์ ์ํด ์์ฒญ๋๋ ํ์ด์ง๋ฅผ ์บ์ํ ์ ์๋ค.(TRUE/FALSE)
beforeSend
http ์์ฒญ ์ ์ ๋ฐ์ํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ
global
์ ์ญํจ์ ํ์ฑํ ์ฌ๋ถ ์ค์
jqXHR์ jQuery HTTP Request๋ก, ๋ธ๋ผ์ฐ์ XMLHttpRequest Object์ ์งํฉ์ด๋ค. data์ ๊ฑฐ์ ๋น์ทํ ๊ฐ์ ์ง๋๊ณ ์๋๋ฐ ์ถ๊ฐ์ ์ผ๋ก ํต์ status ์ readyStatus ๋ฑ์ ๋ณด๋ด์ค๋ค.
HTTP GET request๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ค.
HTTP GET request๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ๋ก๋ถํฐ JSON-encoded ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ค.
HTTP GET request๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ๋ก๋ถํฐ JavaScript ํ์ผ์ ๋ก๋ํ ํ ์คํํ๋ค.
HTTP GET request๋ฅผ ์ฌ์ฉํด ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ค.
์๋ฒ๋ก๋ถํฐ HTML ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ ๋งค์นํ๋ค.