์ด์ ํฌ์คํ
์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ ๋ฐฉ์์์ ์ด๊ธฐ์ ์ฌ์ฉ๋๋ ์ฝ๋ฐฑํจ์์ ๊ฐ๋
๊ณผ ์ฌ์ฉ๋ฒ์ ์์๋ณด์์ต๋๋ค. ํ์ง๋ง ์ด๋ฐ ์ฝ๋ฐฑํจ์๋ ์ฌ๋ฌ ๋ฌธ์ ์ ๋ค๊ณผ ๋์ฒด ๊ฐ๋
์ผ๋ก ์ธํด ํ๋์๋ ์ฝ๋ฐฑํจ์๋ฅผ ๋น๋๊ธฐ ๋ฐฉ์์์ ์ฃผ๋ก ํํ์ฌ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์ฝ๋ฐฑํจ์์ ๋ฌธ์ ์ ์ ํด๊ฒฐํด์ฃผ๊ณ , ์ข ๋ ๊ฐ๋
์ฑ ์ข๊ณ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๊ฒ ๋ฑ์ฅํ Promise์ async/await ๋ฐฉ์์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฌ๋ฉด ์ค๋๋ ์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์์ ํ์์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ ์ญ์๋ ์ค์ ๋ก ๋ง์ด ์ฌ์ฉํด๋ณธ Promise์ async/await์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
Promise๋ ๋น๋๊ธฐ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด์ ๋๋ค. ์์ ์ด ์๋ฃ๋๊ฑฐ๋ ์คํจํ์ ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ์ํ๋ฅผ ๊ฐ์ง๊ฒ ๋๋๋ฐ, ์ด๊ฒ์ด ์ด๋ค ๋ฐฉ์์ธ๊ฐ ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋๋ก ์ดํด๋ณธ๋ค๋ฉด
const promise = new Promise((resolve, reject) => {
const success = true; // ํ์ฌ ์ด ๋ถ๋ถ์ด true๋ผ์ ๋น๋๊ธฐ ์์
์ resolve๋ก ์คํ
if (success) {
resolve("์์
์ฑ๊ณต");
} else {
reject("์์
์คํจ");
}
});
promise
.then((result) => {
console.log(result); // "์์
์ฑ๊ณต"
})
.catch((error) => {
console.error(error); // "์์
์คํจ"
});
์ ์์์์ ๋ณผ์์๋ ๊ฒ ์ฒ๋ผ Promise๋ฅผ ์ฌ์ฉํ ๋๋ ์์ new๋ฅผ ๋ถํ๊ณ ์์ฑ์ ํจ์ Promise()๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ new Promise()๋ ๋น๋๊ธฐ ์์
์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ Promise ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ด๋ฌํ Promise ๊ฐ์ฒด๋ resolve์ reject๋ผ๋ ๋ ๊ฐ์ง ์ฝ๋ฐฑ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ต๋๋ค.
์ด๋ resolve๋ ๋น๋๊ธฐ ์์
์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ ๋ ํธ์ถํ์ฌ ์ฑ๊ณตํ ๊ฒฐ๊ณผ๋ฅผ resolve์ ์ธ์๋ก ์ ๋ฌํ๊ณ , reject๋ ๋น๋๊ธฐ ์์
์ด ์คํจํ์ ๋ ํธ์ถํ์ฌ ์คํจ ์ด์ ๋ฅผ reject์ ์ธ์๋ก ์ ๋ฌํฉ๋๋ค. ์ด๋ ๊ฒ ๊ตฌํ๋ ๋น๋๊ธฐ ํจ์๋ฅผ then๊ณผ catch์ ํ์ ์ฒ๋ฆฌ ๋ฉ์๋๋ฅผ ํตํ์ฌ ๋น๋๊ธฐ ์์
์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ผ์ ์์ต๋๋ค.
์ง๊ธ์ ์์ ์ฝ๋์์๋ ๋น๋๊ธฐ ์์
์ด ์ฑ๊ณตํ๋ค๋ฉด ์์
์ฑ๊ณต, ์คํจํ๋ค๋ฉด ์์
์คํจ๋ผ๊ณ ์คํ์ด ๋์ด ์ง๊ด์ ์ผ๋ก ๋น๋๊ธฐ ์์
์ด ์คํ ๋์๋์ง ์คํจํ๋์ง ์์ ์๊ฒ ๋์ด์์ต๋๋ค.
์ด๋ฌํ Promise๋ Promise.all()์ ๋ฐฉ์๊ณผ Promise.race()์ ๋ฉ์๋ ๋ฐฉ์์ผ๋ก๋ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ
1. Promise.all: ์ฌ๋ฌ Promise๋ฅผ ๊ฐ์ฒด๋ก ๋ฐ์์ ๋ณ๋ ฌ๋ก ์คํํ๊ณ , ๋ชจ๋ ์์ ์ด ์๋ฃ๋๊ธธ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ฃ๊ฐ ๋๋ค๋ฉด ํด๋น ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
const promise1 = Promise.resolve("์์
1");
const promise2 = Promise.resolve("์์
2");
Promise.all([promise1, promise2])
.then((results) => {
console.log(results); // ["์์
1", "์์
2"]
})
.catch((error) => {
console.error("์๋ฌ ๋ฐ์:", error);
});
ํ์ฌ ์ฝ๋์์๋ promise1๊ณผ promise2๋ฅผ ๋ณ๋ ฌ๋ก ์คํ์ํจ ํ ๋๊ฐ์ ์์ ์ด ๋ชจ๋ ์๋ฃ๊ฐ ๋ ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
2. Promise.race: Promise.race๋ Promise.all()๊ณผ ๋ค๋ฅด๊ฒ ์ฌ๋ฌ Promise ์ค ๊ฐ์ฅ ๋จผ์ ์๋ฃ๋ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
const promise1 = new Promise((resolve) => setTimeout(resolve, 2000, "์์
1"));
const promise2 = new Promise((resolve) => setTimeout(resolve, 1000, "์์
2"));
Promise.race([slowPromise, fastPromise])
.then((result) => {
console.log(result); // "์์
2"
});
ํ์ฌ ์ฝ๋์์๋ timeout์ด ๋ ๋น ๋ฅธ promise2 ์์
์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ฒ ๋ฉ๋๋ค.
ํ์ง๋ง ์ด๋ฐ Promise์์๋ ๋จ์ ์ด ๋ฐ์ํ๊ฒ ๋๋๋ฐ ์ฝ๋ฐฑํจ์์ ๋จ์ด์ง๋ ๊ฐ๋
์ฑ์ผ๋ก ์ธํ ๋์ฒด์๋ก Promise๊ฐ ๋์์ง๋ง Promise ์ญ์ ์ฒด์ธ ๋ฐฉ์์ผ๋ก ๊ฐ๋
์ฑ์ด ๋จ์ด์ง ์ ์์ต๋๋ค.
const fetchData1 = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("๋ฐ์ดํฐ 1");
}, 1000);
});
};
const fetchData2 = (data) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(data + " + ๋ฐ์ดํฐ 2");
}, 1000);
});
};
const fetchData3 = (data) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(data + " + ๋ฐ์ดํฐ 3");
}, 1000);
});
};
fetchData1()
.then((data1) => {
console.log(data1);
return fetchData2(data1); // ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ด
})
.then((data2) => {
console.log(data2);
return fetchData3(data2); // ๋ ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ด
})
.then((data3) => {
console.log(data3);
})
.catch((error) => {
console.error("์๋ฌ ๋ฐ์:", error);
});
ํ์ฌ ์ด ์ฝ๋์์๋ fetchData1()์ ๊ฒฐ๊ณผ๋ก fetchData2()๋ฅผ ํธ์ถํ๊ณ , fetchData2()์ ๊ฒฐ๊ณผ๋ก fetchData3()์ ํธ์ถํ๋ ๊ตฌ์กฐ๋ก ์ด๋ฐ fetchData๊ฐ ๋ง์์ง์๋ก ์ฝ๋ฐฑํจ์์ ๋น์ทํ ํํ๋ก ์ฝ๋๊ฐ ๊น์ด์ง๊ณ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ฒ ๋ฉ๋๋ค. ๋ํ ๋ง์ฝ ์ค๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด .catch()์์ ์ฒ๋ฆฌ๋ฅผ ํ ์๋ ์์ง๋ง, ๊ฐ ๋น๋๊ธฐ ์์
์ด ๋ฌด์์ ํ๋์ง ์ฝ๋์์ ์ง์ ํ์
ํ๊ธฐ ์ด๋ ค์์ ๋น๋๊ธฐ ํ๋ฆ ์ถ์ ์ด ์ด๋ ค์์ง๊ฒ ๋ฉ๋๋ค.
์ง๊ธ์ ์์๋ฅผ ๋ค๊ธฐ์ํด fetchData 3๊ฐ๋ฅผ ์ฌ์ฉํ์ง๋ง, ์ด๋ฐ Promise๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ๋น๋๊ธฐ๋ก ๊ฐ์ ธ์์ ์ฒ๋ฆฌํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง์๋ก Promise์ ์ฐ์๋ ์ฌ์ฉ์ ๊ฐ๋
์ฑ์ด ์ ํ๋ฉ๋๋ค.
์ด๋ฐ ์ ํ๋ ๊ฐ๋
์ฑ์ ๋ํ์ ์๋ ๋ค๋ฅธ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ผ๋ก ์์ฆ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ async/await๊ฐ ์กด์ฌํฉ๋๋ค.
async/await์ ์ฝ๋ฐฑํจ์์ ์ฝ๋ฐฑ์ง์ฅ์ ํด๊ฒฐํ๊ณ , Promise์ ์ฒด์ธ ๋ฐฉ์์ผ๋ก ์ธํ ๋จ์ด์ง ๊ฐ๋ ์ฑ์ ํด๊ฒฐํ ์ ์๋ ๊ฐ์ฅ ๋ํ์ ์ธ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ธ๋ฐ, async/await๋ Promise์ ์ฒด์ด๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์ฝ์ ์ ์๋๋ก ๋์์ฃผ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋๋ค. async/await ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ๋น๋๊ธฐ ์์ ๋ ์ข ๋ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ์ฝ๋๋ก ํํํ ์ ์์ต๋๋ค.
Promise์ async/await์ ์ฐจ์ด์ ๐
ํน์ง Promise async/await ๊ฐ๋ ์ฑ ์ฒด์ธ ๋ฐฉ์์ผ๋ก ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ์ ์์ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์ฝํ ๊ฐ๋ ์ฑ์ด ๋์ ์๋ฌ์ฒ๋ฆฌ๋ฐฉ์ .catch( )๋ฅผ ์ฌ์ฉ try-catch๋ก ์๋ฌ๋ฅผ ์ฒ๋ฆฌ ๊ตฌํ ๋ณต์กํ ๋น๋๊ธฐ ๋ก์ง์์ ์ฝ๋๊ฐ ์ค์ฒฉ๋๊ธฐ ์ฌ์ ๋ณต์กํ ๋ก์ง๋ ๊ฐ๊ฒฐํ๊ฒ ์์ฑ ๊ฐ๋ฅ
์๊น ์์์ Promise ์ฒด์ธ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ฝ๋๋ฅผ async/await ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟ์ ์ดํด๋ณด๋ฉด
async function fetchData() { // ํจ์๊ฐ ํญ์ Promise๋ฅผ ๋ฐํ
try {
// await๋ ํญ์ async ํจ์ ๋ด๋ถ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
const data1 = await fetchData1(); // await: Promise๊ฐ ์ฒ๋ฆฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆผ.
console.log(data1);
const data2 = await fetchData2(data1);
console.log(data2);
const data3 = await fetchData3(data2);
console.log(data3);
} catch (error) {
console.error("์๋ฌ ๋ฐ์:", error);
}
}
fetchData();
์ด๋ ๊ฒ ์๊น์ Promise ์ฝ๋ ํ์๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ์ด ์ข์ ์ฝ๋๋ฅผ ์์ฑ์ํฌ ์ ์์ต๋๋ค.
์ ๋ ํ๋ก์ ํธ์์ ๋น๋๊ธฐ ๋ฐฉ์์ ์ฒ๋ฆฌํ ๋ Promise์ async/await๋ฅผ ๋ชจ๋ ์ฌ์ฉํด๋ณด๋ฉด์ ์ง์ ์ค์ ์์๋ ์ด๋ป๊ฒ ์ฐ์ด๋์ง ๋์ ๋ฐฉ์์ ์ดํด๋ณด์์ต๋๋ค.
์ฌ์ค ์ด ๋ ๋ฐฉ์์ ํ๋ก ํธ์๋์์ API ๋ฐ์ดํฐ ํธ์ถ์ ํ ๋ ๋งค์ฐ ๋น๋ฒํ๊ฒ ์ฌ์ฉ๋๋๋ฐ, API ํธ์ถ์ ๋งค์ฐ ํ์์ ์ด๊ณ ์ค์ํ์ฌ ๋ฌด์กฐ๊ฑด ํธ์ถ๋ฐฉ๋ฒ์ ์๊ณ ์ฌ์ฉํด์ผํ๋๋ฐ ์์ฐ์ค๋ฝ๊ฒ ์ด๋ฐ API ํธ์ถ์์ ์ ์ผ ๋ง์ด ์ฌ์ฉ๋๋ Promise์ async/await๋ ์ค์ํ๊ณ ์์์ผํ๋ ๊ฐ๋
์ด ๋์์ต๋๋ค.
์ ๊ฐ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ๋ฐฉ์์ ์๋์ ๊ฒฝ๋๋ฅผ ๋ฐ์์์ ์ฌ์ฉ์์ ํ์ฌ ์์น๋ฅผ ๊ฐ์ ธ์ค๋ API ํธ์ถ์ ๊ตฌํํ์๋๋ฐ, ์ด๋ ์ฌ์ฉํ navigator.geolocation API๋ ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ Promise์ async/await๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํด์ผ ์ค์ ๋ก ์๋,๊ฒฝ๋๋ฅผ ๋ฐ์์ฌ์ ์์์ต๋๋ค.
export const getCurrentPosition = () => {
return new Promise((resolve, reject) => {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
(position) => {
resolve({
latitude: position.coords.latitude,
longitude: position.coords.longitude,
});
},
(error) => reject(error),
);
} else {
reject(new Error("๋ธ๋ผ์ฐ์ ์์ ํ ์์น๋ฅผ ๋ฐ์์ค๋ ๋ฐ ์คํจํ์ต๋๋ค."));
}
});
};
// ํ์ฌ ์์น๋ฅผ ๋ณด๋ด์ ์๋, ๊ฒฝ๋๋ก ๋ณํ
export const getCoordinates = async () => {
try {
const position = await getCurrentPosition();
const { latitude, longitude } = position;
return {
latitude: parseFloat(latitude),
longitude: parseFloat(longitude),
};
} catch (error) {
console.error("Error fetching coordinates:", error);
throw error;
}
};
์ง์ ์ฌ์ฉํด๋ณธ ์ฝ๋ ์ญ์ ์์์ ์ธ๊ธํ Promise์ async/await์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ ์งํค๋ฉด์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ์ ์๋๋ก ์ค์ ํ์๋๋ฐ, getCurrentPosition ํจ์์์ ์์น ์ขํ๋ฅผ ๋ฐํํ๊ณ getCoordinates ํจ์์์ getCurrentPosition์ ํธ์ถํด ์์น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์ ์๋๋ก ์ค๊ณํ์์ต๋๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ์๋ฌธ์ ์ด ์๊ธธ์ ์๋๋ฐ, ์๊น๋ Promise๋ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ณ ์ด๋ฌํ ๋์ฒด๋ก async/await์ด ๋์๋๋ฐ ์ ๊ตณ์ด ๋๊ฐ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋์ง ์์ํ ์ ์์ง๋ง Promise ๋ฐฉ์๋ ํจ๊ป ์ฌ์ฉํ ์ด์ ๋ ๋ธ๋ผ์ฐ์ ์ geolocation.getCurrentPosition์ ์ฝ๋ฐฑ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์ด ์์ด์ ์ฑ๊ณต๊ณผ ์๋ฌ ์ฒ๋ฆฌ ๋ก์ง์ด ์์ฌ ์์๊ธฐ์ ์ด๋ฅผ Promise๋ฅผ ์ฌ์ฉํ์ฌ .then๊ณผ .catch๋ฅผ ์ฌ์ฉํด Promise๋ฅผ ํตํ ์ฒด๊ณ์ ์ธ ๋น๋๊ธฐ ์์
์ ์ฒ๋ฆฌํ๊ธฐ ์ํจ์ด์๊ณ , ํ๋ก์ ํธ์์ ๋ค๋ฅธ API ํธ์ถ๊ณผ ๊ฒฐํฉํด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ Promise ์ฒด์ธ์ด ๋ณต์กํ์ง ์์ ์ด๊ณณ์์๋ ๋ ๋ฐฉ์์ ํจ๊ป ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
์ ๋ Promise์ async/await๋ฅผ ์ง์ ํจ๊ป ์ฌ์ฉํ๋ฉด์ ๊ฐ์์ ์ฅ๋จ์ ์ ์ข ๋ ์์ธํ ์ดํด๋ณผ ์ ์์์ต๋๋ค. ์ฐ์ Promise์ ์ฅ์ ์ ๋จ์ผ ๋น๋๊ธฐ ์์
์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๊ฐ๋จํ ์ฒด์ด๋์ด ํ์ํ ๊ฒฝ์ฐ์๋ Promise๋ ์ฌ์ ํ ์ ์ฉํ๋ค๊ณ ์๊ฐ์ด ๋ญ๋๋ค. ํนํ, Promise.all() ๊ณผ ๊ฐ์ ๋ฐฉ์์ ์ฌ๋ฌ ์์
์ ๋ณ๋ ฌ๋ก ์คํํ ๋ ํจ์จ์ฑ ์ธก๋ฉด์์ ์ ์ฉํ๋ค๊ณ ์๊ฐ์ด ๋ค๊ธฐ์ ๋
๋ฆฝ์ ์ผ๋ก API ํธ์ถ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค๋ฉด Promise๋ฅผ ์ฌ์ฉํ๋๊ฒ์ ๊ฐ๋จํ๋ฉด์ ์ข์ ๋ฐฉ์์
๋๋ค.
์ด๋ฌํ Promise์ ๋ฐฉ์๊ณผ ๋น๊ตํด์ async/await์ ์ฅ์ ์ ์ดํด๋ณธ๋ค๋ฉด ์ญ์ ๋ณต์กํ ๋น๋๊ธฐ ํ๋ฆ์์๋ async/await๊ฐ ํจ์ฌ ์ ๋ฆฌํ๋ค๋๊ฒ์ ๋๊ผ์ต๋๋ค. ๋น๋๊ธฐ ๋ฐฉ์์์ ๊ฐ๊ฐ์ ์์
๊ฐ์ด ์๋ก์๊ฒ ์์กด์ฑ์ด ๊ฐํ๋ค๋ฉด, ์ด๊ฒ์ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์์ฑํ ์ ์๊ธฐ๋๋ฌธ์ ์ฝ๋์ ๊ฐ๋
์ฑ์ด ์ข์์ง๊ณ ์ด๋ก์ธํ์ฌ ์ด๋์๋ถํฐ ์ฝ๋๊ฐ ์งํ๋๋์ง ํ๋ฆ์ ํ์
ํ๊ธฐ์ ๋ ์ฉ์ดํ์ต๋๋ค. ๋ํ ์๋ฌ์ฒ๋ฆฌ๋ฅผ try-catch๋ฅผ ํตํด ํ๊ณณ์ผ๋ก ๋ฌถ์ด์ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ํ์ ํ๋ฆฐ๊ณณ์ ์ฐพ์๋ด๊ฑฐ๋ ์ ์ง๋ณด์๋ฅผ ํด์ผํ๋ ์ํฉ์ด ์๊ธด๋ค๋ฉด async/await์ด ๋ ์ข์ ๋ฐฉ์์ด ๋ ์ ์์ ๊ฒ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํ์ง๋ง ๊ฒฐ๊ตญ async/await๋ Promise์ ์์ ํ ๋์ฒด ๊ด๊ณ๋ผ๊ณ ์๊ฐํ๋๊ฒ๋ณด๋ค๋ ๋ ๋ฐฉ์์ ์๋ก ๋ณด์ ๊ด๊ณ๋ผ๊ณ ๋ณด๋ ๊ฒ์ด ๋ ๊ฐ๊น์ต๋๋ค. ์ค์ ๋ก ์ฝ๋ฐฑ์ ๊ธฐ๋ฐ์ผ๋ก ํ API๋ฅผ Promise๋ก ๊ฐ์ธ์ ์ฌ์ฉํ๊ฑฐ๋, ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ Promise.all๊ณผ async/await๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๋ฑ ๋ ๋ฐฉ์์ ์กฐํฉํด์ ์ฌ์ฉํ๋ค๋ฉด ์ฝ๋์ ๊ฐ๋
์ฑ์ ์ ์งํจ๊ณผ ๋์์ ๋น๋๊ธฐ ์์
์ ํจ์จ์ฑ ๋ํ ์ฆ๊ฐ ์ํฌ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ์ฌ์ฉ๋ฐฉ์๊ณผ ๊ฐ๋
์ ์ ์๊ณ ๋น๋๊ธฐ ๋ฐฉ์์์๋ ๋ ๋ฐฉ์์ ์ ์ ํ๊ฒ ์ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค!โญ๏ธ
์ด๋ฏธ์ง ์ถ์ฒ: https://sugandsingh5566.medium.com/demystifying-javascript-asynchronous-operations-promises-vs-async-await-e4dfdea043cc
์ฐธ๊ณ : https://umanking.github.io/2023/04/07/promise-all-vs-promise-race
https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%B2%98%EB%A6%AC-async-await