๐พ Fetch API
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ํ ๋ ์๋ฒ์ ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ก์ด ์ ๋ณด๋ฅผ ๋ฐ์์ค๋ ์ผ์ ํ ์ ์๋ค. Fetch API๋ ๋คํธ์ํฌ ํต์ ์ ํฌํจํ ๋ฆฌ์์ค ์ทจ๋์ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค. Fetch API๊ฐ ์ ๊ณตํ๋ fetch()
๋ฉ์๋๋ก ๋คํธ์ํฌ์ ๋ฆฌ์์ค๋ฅผ ์ฝ๊ฒ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค.
(์ด์ ์๋ XMLHttpRequest
๋ฅผ ์ฌ์ฉํ์๋ค. Fetch๋ ๋ ์ข์ ๋์ฒด์ ์ด๋ค.)
Fetch API๋ Request
์ Response
๊ฐ์ฒด, ๊ทธ๋ฆฌ๊ณ ๊ธฐํ ๋คํธ์ํฌ ์์ฒญ์ ๊ด๋ จ๋ ๊ฒ๋ค์ ์ฌ์ฉํ๊ณ , CORS์ HTTP Origin ํค๋ ํ๋ ๋ฑ ๊ด๋ จํ ๊ฐ๋
๋ ํฌํจํ๋ค.
fetch()
๋ฉ์๋๋ ํ๋์ ํ์ ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ ธ์ค๋ ค๋ ๋ฆฌ์์ค ๊ฒฝ๋ก๋ฅผ ๋ฐ๋๋ค. ๋ฐํ ๊ฐ์ ํด๋น ์์ฒญ์ ๋ํ Response
๋ก ์ดํํ๋ Promise
์ธ๋ฐ, ์๋ฒ๊ฐ ํค๋๋ฅผ ํฌํจํ ์๋ต์ ํ๋ ์๊ฐ ์ดํํ๋ค. ์ด๋ ์๋ฒ๊ฐ HTTP ์ค๋ฅ ์๋ต ์ฝ๋๋ก ์๋ตํด๋ ์ดํํ๋ค๋ ๋ป์ด๋ค. ์ ํ ์ฌํญ์ผ๋ก, ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ init
์ต์
๊ฐ์ฒด๋ฅผ ์ ๊ณตํ ์ ์๋ค.
โ๏ธ Fetch ๊ธฐ๋ณธ ๋ฌธ๋ฒ
let promise = fetch(url, [options])
• url
์ ๊ทผํ๊ณ ์ ํ๋ URL
• options
์ ํ ๋งค๊ฐ๋ณ์๋ก HTTP ๋ฐฉ์(method), HTTP ์์ฒญ ํค๋(headers), HTTP ์์ฒญ ์ ๋ฌธ(body) ๋ฑ์ ์ค์ ํ ์ ์๋ค. (default๋ GET)
• fetch()
๋ฅผ ํธ์ถํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ด๊ณ ํ๋ก๋ฏธ์ค ํ์
์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
โ๏ธ ๊ธฐ๋ณธ์ ์ธ Fetch ์์ฒญ
// ๋คํธ์ํฌ์์ JSON ํ์ผ์ ๊ฐ์ ธ์์ console์ ์ถ๋ ฅ
fetch('<http://example.com/movies.json>')
.then((response) => response.json())
.then((data) => console.log(data));
1. ๊ฐ์ฅ ๋จ์ํ ํํ์ fetch()
๋ ๊ฐ์ ธ์ค๊ณ ์ ํ๋ ๋ฆฌ์์ค์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ํ๋์ ์ธ์๋ง ๋ฐ๋๋ค.
2. ์๋ต์ Response
๊ฐ์ฒด๋ก ํํ๋๋ฉฐ, HTTP ์๋ต ์ํ(status), HTTP ์๋ต ํค๋(headers), HTTP ์๋ต ์ ๋ฌธ(body) ๋ฑ์ ์ฝ์ด์ฌ ์ ์๋ค. ์ง์ JSON ์๋ต ๋ณธ๋ฌธ์ ๋ฐ์ ์๋ ์๋ค.
3. JSON ๋ณธ๋ฌธ ์ฝํ
์ธ ๋ฅผ ์ถ์ถํ๊ธฐ ์ํด์๋ json()
๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
→ json()
์ Response
๊ฐ์ฒด์์ JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ , ์ด๋ฅผ JavaScript ๊ฐ์ฒด๋ก ๋ณํํ๋ค. json()
์ Response
๊ฐ์ฒด์ ๋ํด ๋น๋๊ธฐ์ ์ผ๋ก ํธ์ถ๋๋ฉฐ, ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค.
๐ฉ๐ป๐ป example
fetch("URL")
.then((res) => {
console.log(res) // Response ๊ฐ์ฒด ("URL"์ url๋ก ๋ฐ์)
return res.json()
})
.then((data) => {
console.log(data) // data (JSON ๋ณธ๋ฌธ ์ปจํ
์ธ )
})
.catch((error) => console.log(error))
๐ ๋ ์์ธํ ๋ถ๋ถ์ MDN์ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค :-)
๐ฌ Fetch API๋ฅผ ์ฌ์ฉํด 2๊ฐ์ ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ๊ฐ์ฒด๋ก ํฉ์น๋ ๊ณผ์ ๋ฅผ ํ์๋ค. (Chaning๊ณผ Promise.all, async/await๋ฅผ ์ฌ์ฉ)
์ด ๊ณผ์ ๋ฅผ ํ๋ฉด์ fetch ๋ฟ๋ง ์๋๋ผ fetch๋ก url์ ๋ฐ์ ํ promise์ then์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง๋ ํ์คํ๊ฒ ์ ์ ์์๋ค.
(์๋ ๊ธ์ โญ๏ธ ๊ณผ์ . Part3 - fetch API ์ฐธ๊ณ )
โ๏ธ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ์๋ชป๋ ์ ๋ณด๋ ๋ ๊ณต์ ํ ๋ด์ฉ์ด ์์ผ๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค ๐
'Frontend Dev > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ณ ์ฐจ ํจ์(higher order function)๋ ๋ฌด์์ผ๊น? (0) | 2023.05.21 |
---|---|
ES8, ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ async / await ๊ธฐ๋ณธ ๋ฌธ๋ฒ (0) | 2023.05.17 |
ES6, ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ํ๋ก๋ฏธ์ค (Promise) (0) | 2023.05.17 |
์๋ฐ์คํฌ๋ฆฝํธ์ ํ๋กํ ํ์ (prototype) (0) | 2023.05.15 |
ES6, ์๋ฐ์คํฌ๋ฆฝํธ์ ํด๋์ค(class) ๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ํด๋์ค ์์ (0) | 2023.05.14 |