Ajax (Asynchronous Javascript and XML)
Ajax๋ ์น ํ์ด์ง ์ ์ฒด๋ฅผ ๋ค์ ๋ก๋ฉํ์ง ์๊ณ ๋, ์น ํ์ด์ง์ ์ผ๋ถ๋ถ๋ง์ ๊ฐฑ์ ํ ์ ์๋ค. ์ฆ Ajax๋ฅผ ์ด์ฉํ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ญ์์ ์๋ฒ์ ํต์ ํ์ฌ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์นํ์ด์ง์ ์ผ๋ถ๋ถ๋ง ํ์ ํ ์ ์๋ค.
๋์ ๋ฐฉ์
Ajax๋ XMLHttpRequest
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ํต์ ํ๋ค. ์ด ๊ฐ์ฒด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๊ตํํ ์ ์์ผ๋ฉฐ, ํ์ด์ง ์ ์ฒด๋ฅผ ์๋ก๊ณ ์นจํ์ง ์๊ณ ๋ ์ผ๋ถ๋ถ๋ง์ ์
๋ฐ์ดํธํ ์ ์๋ค.
์ฌ์ฉ๋ฒ
const xhr = new XMLHttpRequest() // XMLHttpRequest ๊ฐ์ฒด ์์ฑ
xhr.open("GET", "url-to-the-server", true) // ์์ฒญ ์ด๊ธฐํ (HTTP ์์ฒญ ๋ฉ์๋, ์์ฒญ์ ๋ณด๋ผ ์๋ฒ์ url, ๋น๋๊ธฐ์ ์ผ๋ก ์์ฒญํ ๊ฒ์ธ์ง boolean)
// ์๋ต ์ฒ๋ฆฌ ์ด๋ฒคํธ ํธ๋ค๋ฌ (xhr.readyState === 4๋ ์์ฒญ ์๋ฃ๋์์์ ๋ํ๋)
xhr.onreadystatechage = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText) // ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
}
}
xhr.send() // ์์ฒญ ์ ์ก
ํ๊ณ
Ajax๋ XMLHttpRequest
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ํต์ ์ ๊ตฌํํ๋ค. ํ์ง๋ง ์ฌ์ฉ๋ฒ์ด ๋ณต์กํ๊ณ , ์ฝ๋ฐฑ ์ง์ฅ(callback hell)๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ํ JSON ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ถ๊ฐ์ ์ธ ๋ณํ ์์
์ด ํ์ํ๋ค.
Fetch์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
Fetch API๋ Promise
๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ๋น๋๊ธฐ ํต์ ์ ๋์ฑ ๊ฐ๊ฒฐํ๊ณ ์ง๊ด์ ์ผ๋ก ๋ง๋ค ์ ์๊ฒ ํด์ค๋ค. Fetch๋ XMLHttpRequest
๋ณด๋ค ๋ ์ ์ฐํ๊ณ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ง์ ์ ์ผ๋ก JSON์ ์ง์ํ์ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ํจ์ฌ ๊ฐํธํด์ก๋ค.
Fetch API
Fetch API๋ ๋ธ๋ผ์ฐ์ ์ window
๊ฐ์ฒด์ ๋ด์ฅ๋์ด ์์ผ๋ฉฐ, Request
์ Response
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ๊ณผ ์๋ต์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
์ฌ์ฉ๋ฒ
fetch(url, options)
.then(response => console.log("response: ", response.json())) // JSON ๋ฐ์ดํฐ๋ก ๋ณํ
.catch(error => console.log("error: ", error))
fetch๋ ์ฒซ๋ฒ์งธ ์ธ์๋ก url
, ๋๋ฒ์งธ ์ธ์๋ก ์ต์
๊ฐ์ฒด
๋ฅผ ๋ฐ๊ณ , Promise
ํ์
์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. ๋ฐํ๋ ๊ฐ์ฒด๋ API ํธ์ถ์ด ์ฑ๊ณตํ์ ๊ฒฝ์ฐ์๋ ์๋ต(response) ๊ฐ์ฒด๋ฅผ resolve
ํ๊ณ , ์คํจํ์ ๊ฒฝ์ฐ์๋ ์์ธ(error) ๊ฐ์ฒด๋ฅผ reject
ํ๋ค.
ํ๊ณ
Fetch API๋ ๋ง์ ๊ฐ์ ์ ์ ์ ๊ณตํ์ง๋ง, ์ฌ์ ํ ๋ช ๊ฐ์ง ํ๊ณ๊ฐ ์๋ค.
์๋ฅผ ๋ค์ด, Fetch๋ ์์ฒญ ์๊ฐ ์ด๊ณผ(timeouts)๋ฅผ ์ง์ ์ ์ผ๋ก ์ง์ํ์ง ์๋๋ค. ๋ํ ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๋ฌธ์ ์ ์ผ๋ถ ๊ธฐ๋ฅ(์งํ ์ํ ์ถ์ ๋ฑ)์ ๋ํ ์ ํ์ด ์์ ์ ์๋ค.
Axios์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
Axios๋ Fetch์ ๋ชจ๋ ์ฅ์ ์ ๊ฐ์ง๋ฉด์๋, Fetch์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ฑ์ฅํ๋ค. Axios๋ ์์ฒญ ์๊ฐ ์ด๊ณผ ์ค์ , ์์ฒญ ์ทจ์, HTTP ์ํ ์ฝ๋์ ๋ฐ๋ฅธ ์๋ ๋ณํ, ์งํ ์ํ ์ถ์ ๋ฑ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ํ ๋ธ๋ผ์ฐ์ ๋ฟ๋ง ์๋๋ผ Node.js ํ๊ฒฝ์์๋ ์ฌ์ฉํ ์ ์์ด์ ์๋ฒ ์ฌ์ด๋์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ชจ๋ ์ฌ์ฉ๋๋ค.
Axios
Axios๋ HTTP ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. Axios๋ ๋ด๋ถ์ ์ผ๋ก XMLHttpRequest
๋ฅผ ์ฌ์ฉํ์ง๋ง, Promise
๊ธฐ๋ฐ์ API๋ฅผ ์ ๊ณตํ์ฌ ๋ณด๋ค ์ฌ์ด ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค. ๋ํ, ์์ฒญ๊ณผ ์๋ต์ JSON ํํ๋ก ์๋ ๋ณํํด์ฃผ๊ฑฐ๋ ์๋ฌ ์ฒ๋ฆฌ ๋ฑ๊ณผ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ณดํต ์๋์ ๊ฐ์ด async/await
์ ํจ๊ป ์ฌ์ฉํ๋ค.
Fetch API์ ๋น๊ตํ์ ๋ ์ฐจ์ด์ ์ ์ข ๋ ์์ธํ ์์๋ณด์๋ฉด, ์๋์ ๊ฐ๋ค.
-
์๋ JSON ๋ณํ
Axios๋
response
๋ฅผ ์๋์ผ๋ก JSON ํํ๋ก ๋ณํํด์ค๋ค. ๋ฐ๋ฉด, Fetch API๋response
๊ฐ ๋์ฐฉํ์ ๋,.json()
์ ํธ์ถํ์ฌ ์๋์ผ๋ก ๋ณํํด์ผํ๋ค. -
์๋ฌ ์ฒ๋ฆฌ
Fetch API๋ ๋คํธ์ํฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋ ํ ์์ฒญ ์คํจ๋ฅผ ์ก์ ์ด ์คํจ๋ก ๊ฐ์ฃผํ์ง ์๋๋ค. ์ฆ, 404๋ 500 ๊ฐ์ ์๋ฒ ์๋ฌ ์ํ์์๋
.then()
์ ์คํํ๋ค. ๋ฐ๋ฉด, Axios๋ 2xx ๋ฒ์ ์ธ์ HTTP ์ํ ์ฝ๋๋ฅผ ๋ฐ์ผ๋ฉด ์๋์ผ๋ก ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค. -
๋ธ๋ผ์ฐ์ ์ง์
Fetch API๋ ์ผ๋ถ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋์ง ์์ ์ ์๋ค. ๋ฐ๋ฉด, Axios๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋๋ก Promise API๋ฅผ ์ฌ์ฉํ๋ค.
-
timeout ์ค์
Axios๋ ์์ฒญ ํ์์์์ ์ค์ ํ๋ ์ต์ ์ด ๋ด์ฅ๋์ด ์๋ค. Fetch API์์๋ ์ด๋ฅผ ์ง์ ๊ตฌํํด์ผํ๋ค.
์ฌ์ฉ๋ฒ
const fetchData = async () => {
try {
const response = await axios.get("url-to-the-server")
console.log(response.data)
} catch (error) {
console.error("Error! : ", error)
}
}
๋ ์์ธํ ์ฌ์ฉ๋ฒ์ ์๊ณ ์ถ๋ค๋ฉด, โ ๏ธ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ธ ์ฒ๋ฆฌ ๊ธ์ ์ฐธ๊ณ !