Section2 Unit3 [JS/Node] ๋น๋๊ธฐ - fetchAPI
๐ Chapter4. fetch API
• Fetch API๋ ๋คํธ์ํฌ ํต์ ์ ํฌํจํ ๋ฆฌ์์ค ์ทจ๋์ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค. Fetch API๋ฅผ ์ฌ์ฉํด ์๋ฒ์ ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ก์ด ์ ๋ณด๋ฅผ ๋ฐ์์ค๋ ์ผ์ ํ ์ ์๋ค.
๋ช ๋ฒ ์ฌ์ฉํด๋ด๋ ์ด๋ ต๋ค๊ณ ์๊ฐ๋์๋ ๋ถ๋ถ์ด๋ผ ์ฌ๋ฌ ์๋ฃ๋ค๊ณผ ์์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก Fetch API์ fetch() ๋ฉ์๋๋ฅผ ์ ๋ง ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด์๋ค.
โญ๏ธ ๊ณผ์ . Part 3 - fetch API
• fetch๋ฅผ ์ด์ฉํด HTTP ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ ๋ฐ๋ ์ฐ์ต
• chaining๊ณผ Promise.all
๊ทธ๋ฆฌ๊ณ async/await
์ ์ด์ฉํด์ ๊ตฌํ
๐ ๊ณผ์ ๋ชฉํ: 2๊ฐ์ ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ๊ฐ์ฒด๋ก ํฉ์น๊ธฐ
// latestNews.json
{
"data": [
{
"row_id": 2,
"title": "2021๋
๊ฒฝ์ ์ฑ์ฅ๋ฅ ์ ๋ง ๋ฐ์",
"source": "A์ ๋ฌธ",
"timestamp": "2020/12/30"
},
{
"row_id": 3,
"title": "์ฝ๋ก๋19 ์ฆ๊ฐ์ถ์ธ ๋ํญ ํ๋ฝํด",
"source": "BBC",
"timestamp": "2020/12/29"
},
{
"row_id": 4,
"title": "์ฝ๋์คํ
์ด์ธ ์ทจ์
์ฐ๊ณ ํํธ๋์ฌ xxx๊ฑด ๋ํ",
"source": "์คํํธ์
๋ด์ค",
"timestamp": "2020/12/31"
}
]
}
// weather.json
{
"status": "sunny",
"temperature": "28",
"fineDust": "good"
}
๐ฑ 01_basicChaining.js
// newsURL = latestNews.json
// weatherURL = weather.json
function getNewsAndWeather() {
// TODO: fetch์ ์ด์ฉํด ์์ฑํฉ๋๋ค
// TODO: ์ฌ๋ฌ๊ฐ์ Promise๋ฅผ then์ผ๋ก ์ฐ๊ฒฐํ์ฌ ์์ฑํฉ๋๋ค
// TODO: Promise.all ๋๋ async/await์ ์ฌ์ฉํ์ง ์๊ณ ํ์ด๋ณด์ธ์
const obj = {};
return fetch(newsURL) // fetch๋ก Response ๊ฐ์ฒด ๋ฆฌํด
.then((res) => res.json()) // Response ๊ฐ์ฒด์์ JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ , ์ด๋ฅผ JavaScript ๊ฐ์ฒด๋ก ๋ณํ
.then((data) => { // data๋ ๋ฐํ๋ ๊ฐ์ฒด {data:Array(3)}
obj.news = data.data; // data.data๋ [{..}, {..}, {..}]
return fetch(weatherURL); // ๋ค์ fetch๋ก Response ๊ฐ์ฒด ๋ฆฌํด
})
.then((res) => res.json()) // ์์ ๊ฐ์ ์์
๋ฐ๋ณต
.then((data) => {
obj.weather = data;
return obj;
})
.catch((error) => console.log(error))
}
๐ฑ 02_promiseAll.js
// newsURL = latestNews.json
// weatherURL = weather.json
function getNewsAndWeatherAll() {
// TODO: Promise.all์ ์ด์ฉํด ์์ฑํฉ๋๋ค
// fetch๋ก Response ๊ฐ์ฒด๋ฅผ ๋ฐ์ JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ , ์ด๋ฅผ JavaScript ๊ฐ์ฒด๋ก ๋ณํ
const news = fetch(newsURL).then((res) => res.json());
const weather = fetch(weatherURL).then((res) => res.json());
console.log(news) // Promise {<pending>}
console.log(weather) // Promise {<pending>}
return Promise.all([news, weather]) // Promise.all๋ก ํ๋ฒ์ ์ฒ๋ฆฌ
.then((res) => { // res [{..news..}, {..weather..}]
return { news: res[0].data, weather: res[1] }
})
}
๐ฑ 03_asyncAwait.js
// newsURL = latestNews.json
// weatherURL = weather.json
async function getNewsAndWeatherAsync() {
// TODO: async/await ํค์๋๋ฅผ ์ด์ฉํด ์์ฑํฉ๋๋ค
// fetch๋ก Response ๊ฐ์ฒด๋ฅผ ๋ฐ์ JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ , ์ด๋ฅผ JavaScript ๊ฐ์ฒด๋ก ๋ณํํ๋๋ฐ,
// await๋ฅผ ์ฌ์ฉํด Promise๊ฐ ์ฒ๋ฆฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆผ
const news = await fetch(newsURL).then((res) => res.json());
const weather = await fetch(weatherURL).then((res) => res.json());
console.log(news) // {data: Array(3)}
console.log(weather) // {status: 'sunny', temperature: '28', fineDust: 'good'}
return { news: news.data, weather: weather }
}
์ฒ์์ ์ด๋ ค์์ ์๋ ๋ชป๋์๋๋ฐ, ์ดํดํ๊ณ ๋๋ ์ฌ๋ฏธ์๋ค๊ณ ์๊ฐํ ๋ฌธ์ ! (์ดํดํ๋ฉด ๋ญ๋ ์ฌ๋ฐ๊ฒ ์ง...)
๊ฒฐ๊ตญ์ ์ ๋ง ๊ฐ๋จํ ์ต์ ๋ฌธ๋ฒ์ธ async/await๋ฅผ ์ฌ์ฉํ์ง ์์ ์ด์ ๊ฐ ์๋ค๋ ์๊ฐ์ด ๋ค๋ ๊ณผ์ ์๋ค.
๐ ์ค๋์ ํ๊ณ
์ค๋๋ ์ด์ ๋ ๋น์ทํ๋ค… ๊ณผ์ ํ๋ค๊ณ ์ ์ ์์๊ณ , fetchAPI๋ฅผ ์ฌ์ฉํ๋ ๊ณผ์ ๋ ํค๋งธ๋ค. fetch๋ก ์คํ API๋ ๋ช ๋ฒ ์ฌ์ฉํด๋ดค๋๋ฐ, ๊ณผ์ ๋ก ๋ค์ ํด๋ณด๋ ค๋ ์ ๋์ง ์์๋ค. ์๊ฐํด๋ณด๋ ๊ทธ ๋น์์ ๊ณต๋ถํ ๋๋ fetch์ promise, then ๋ฉ์๋ ๋ฑ์ด ์ ๋๋ก ์ดํด๊ฐ ์๋์๋๋ฐ ์์์ด๋ ๊ตฌ๊ธ๋ง์ผ๋ก ์ฝ๋๋ฅผ ๋ฐ๋ผ ์น๊ณ , ํ์ํ ๋ถ๋ถ๋ง ์ฌ์ฉํด์ ์ ํํ ์ดํด๊ฐ ๋์ง ์์๋ ๊ฒ ๊ฐ๋ค. ๋ณต์ต์ ํ๋ฉด์ ํ์คํ ์๊ณ ๋์ด๊ฐ์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์ด์ ์ ๋ ์ ๋ค์ ํ๋ฒ ์ฐฌ์ฐฌํ ๋ฌธ์์ ์์ ์๋ฃ, ๊ณผ์ ๋ก ๊ตฌํํ ์ฝ๋๋ฅผ ํ๋์ฉ ๋ฏ์ด๋ณด๋ฉฐ fetch์ promise, async์ ์ต์ํด์ง๋ ค๊ณ ํ๋ค. ํ ๋ฒ ๋ค์ ๊ณต๋ถํ๊ณ ๋๋ ์ดํด๊ฐ ๋๋๋ฏ ํ๋ค. ์ด๋ ค์ด ๊ฐ๋ ์ ์๋์๋๋ฐ, ์ด๋ ต๊ฒ ์๊ฐํ๊ณ ์์๋ ๋ณด๋ค.
๋ด์ผ๋ถํฐ๋ ๋๋์ด ๋ฆฌ์กํธ์ ๋ค์ด๊ฐ๋ค..!! ํ์ดํ ๐
'Frontend Dev > ๐ฅ ์ฝ๋์คํ ์ด์ธ FE ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Section2 Unit5 [React] React SPA (0) | 2023.05.19 |
---|---|
Section2 Unit4 [React] Intro (0) | 2023.05.18 |
Section2 Unit3 JS/Node ๋น๋๊ธฐ - ๋น๋๊ธฐ์ฒ๋ฆฌ (0) | 2023.05.16 |
Section2 Unit3 JS/Node ๋น๋๊ธฐ - ๊ณ ์ฐจํจ์ ๋ฆฌ๋ทฐ & underbar ๊ณผ์ (0) | 2023.05.15 |
Section2 Unit2 JavaScript ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ - ํ๋กํ ํ์ (0) | 2023.05.12 |