Node.js๋ ๋จ์ผ ์ค๋ ๋ ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋์์ฑ์ ์ฒ๋ฆฌํ๋ค. ์ด ๋ชจ๋ธ์์ I/O ์์ ๊ณผ ๊ฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋๊ฒจ์ง๊ณ , ์์ ์ด ์๋ฃ๋๋ฉด ์ด๋ฒคํธ ๋ฃจํ์ ์ํด ์ฝ๋ฐฑ์ด ์คํ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก Node.js๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํตํด ๋์ ์ฒ๋ฆฌ๋๊ณผ ํจ์จ์ฑ์ ๋ฌ์ฑํ๋ค.
๐งฉ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์งํ
์ฝ๋ฐฑ ํจ์
Node.js ์ด๊ธฐ์๋ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฝ๋ฐฑ ํจํด์ด ์ฃผ๋ก ์ฌ์ฉ๋์๋ค.
fs.readFile('file.txt', (err, data) => {
if (err) {
console.error('์๋ฌ ๋ฐ์:', err);
return;
}
console.log('ํ์ผ ๋ด์ฉ:', data);
});
์ฝ๋ฐฑ ํจํด์ ๊ฐ๋จํ์ง๋ง ์ค์ฒฉ๋ ๋น๋๊ธฐ ์์ ์ ๋ค๋ฃฐ ๋ "์ฝ๋ฐฑ ์ง์ฅ"์ด๋ผ ๋ถ๋ฆฌ๋ ๊ฐ๋ ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
Promise ๊ฐ์ฒด
Promise๋ ๋น๋๊ธฐ ์์ ์ ์ต์ข ์๋ฃ(๋๋ ์คํจ)์ ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ ๋ํ๋ด๋ ๊ฐ์ฒด๋ค. Promise๋ ์ธ ๊ฐ์ง ์ํ๋ฅผ ๊ฐ์ง๋ค: ๋๊ธฐ(pending), ์ดํ(fulfilled), ๊ฑฐ๋ถ(rejected).
const promise = new Promise((resolve, reject) => {
// ๋น๋๊ธฐ ์์
์ํ
if (/* ์์
์ฑ๊ณต */) {
resolve('์ฑ๊ณต ๊ฒฐ๊ณผ');
} else {
reject(new Error('์คํจ ์ด์ '));
}
});
Promise ์์ฑ์๋ ์คํ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ์ผ๋ฉฐ, ์ด ํจ์๋ resolve์ reject ๋ ์ฝ๋ฐฑ์ ๋งค๊ฐ๋ณ์๋ก ๊ฐ๋๋ค. ๋น๋๊ธฐ ์์
์ด ์ฑ๊ณตํ๋ฉด resolve๋ฅผ ํธ์ถํ๊ณ , ์คํจํ๋ฉด reject๋ฅผ ํธ์ถํ๋ค.
.then()๊ณผ Promise ์ฒด์ด๋
Promise ๊ฐ์ฒด์ .then() ๋ฉ์๋๋ Promise๊ฐ ์ดํ๋์์ ๋ ์คํ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฑ๋กํ๋ค. .then()์ ๋ฐํ๊ฐ๋ Promise์ด๋ฏ๋ก, ์ฌ๋ฌ .then()์ ์ฐ๊ฒฐํด Promise ์ฒด์ด๋์ ๊ตฌํํ ์ ์๋ค.
fetchData()
.then(data => processData(data))
.then(processedData => saveData(processedData))
.then(savedResult => console.log('์ ์ฅ ์๋ฃ:', savedResult))
.catch(error => console.error('์๋ฌ ๋ฐ์:', error));
Promise ์ฒด์ด๋์ ๋น๋๊ธฐ ์์
์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ฉฐ, ์ฝ๋์ ๊ฐ๋
์ฑ์ ํฌ๊ฒ ํฅ์์ํจ๋ค. ๋ํ .catch()๋ฅผ ์ฌ์ฉํด ์ฒด์ธ ์ด๋์์๋ ๋ฐ์ํ ์๋ฌ๋ฅผ ํ ๊ณณ์์ ์ฒ๋ฆฌํ ์ ์๋ค.
async/await
ES2017์์ ๋์ ๋ async/await ๋ฌธ๋ฒ์ Promise๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง, ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์์ฑํ ์ ์๊ฒ ํด์ค๋ค.
async function processOperation() {
try {
const data = await fetchData();
const processedData = await processData(data);
const savedResult = await saveData(processedData);
console.log('์ ์ฅ ์๋ฃ:', savedResult);
} catch (error) {
console.error('์๋ฌ ๋ฐ์:', error);
}
}
async ํค์๋๋ ํจ์๊ฐ Promise๋ฅผ ๋ฐํํ๋๋ก ๋ง๋ค๊ณ , await ํค์๋๋ Promise๊ฐ ์ดํ๋ ๋๊น์ง ํจ์ ์คํ์ ์ผ์ ์ค์งํ๋ค. ์ด๋ฅผ ํตํด ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋ง์น ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์ง๊ด์ ์ผ๋ก ์์ฑํ ์ ์๋ค.
๐๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๋น๊ต
์ฝ๋ฐฑ ํจ์
- ์ฅ์ :
- ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ๊ฐ๋
- ๋ชจ๋ JavaScript ํ๊ฒฝ์์ ์ง์
- ๋จ์ :
- ์ฝ๋ฐฑ ์ง์ฅ์ผ๋ก ์ธํ ๊ฐ๋ ์ฑ ์ ํ
- ์๋ฌ ์ฒ๋ฆฌ๊ฐ ๋ณต์กํจ
- ๋น๋๊ธฐ ์์ ์์ ์ ์ด๊ฐ ์ด๋ ค์
Promise
- ์ฅ์ :
- ์ฒด์ด๋์ ํตํ ๊ฐ๋ ์ฑ ํฅ์
- ํตํฉ๋ ์๋ฌ ์ฒ๋ฆฌ ๋ฐฉ์ ์ ๊ณต
- ๋น๋๊ธฐ ์์ ์ ์ํ ํํ ๊ฐ๋ฅ
- ๋จ์ :
- ์ฝ๋ฐฑ๋ณด๋ค ๋ณต์กํ ๊ฐ๋
- ์ฌ์ ํ
.then()์ฒด์ธ์ด ๊ธธ์ด์ง ์ ์์ - ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๊ณ ๋ ค ํ์
async/await
- ์ฅ์ :
- ๋๊ธฐ ์ฝ๋์ ์ ์ฌํ ์ง๊ด์ ์ธ ๊ตฌ๋ฌธ
- ์ฝ๋ ๊ฐ๋ ์ฑ ๊ทน๋ํ
- try/catch๋ฅผ ํตํ ๊ฐ๊ฒฐํ ์๋ฌ ์ฒ๋ฆฌ
- ๋จ์ :
- ์ต์ JavaScript ๋ฌธ๋ฒ์ผ๋ก ํธํ์ฑ ๊ณ ๋ ค ํ์
- ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํด์ ์ถ๊ฐ ์์ ํ์
- async ํจ์๋ ํญ์ Promise๋ฅผ ๋ฐํํ๋ฏ๋ก ์ดํด ํ์
Node.js์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๋ฐฑ์์ Promise, ๊ทธ๋ฆฌ๊ณ async/await๋ก ๋ฐ์ ํด์๋ค. ๊ฐ ๋ฐฉ์์ ๊ณ ์ ํ ํน์ฑ๊ณผ ์ฅ๋จ์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ฐ๋ฐ ์ํฉ๊ณผ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์ ์ ํ ๋ฐฉ์์ ์ ํํด์ผ ํ๋ค. ํ๋ Node.js ๊ฐ๋ฐ์์๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋ฐ์ด๋ async/await๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ์ง๋ง, Promise์ ์ฝ๋ฐฑ์ ๋์ ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ๋ ์ค์ํ๋ค. ๊ถ๊ทน์ ์ผ๋ก ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋ ์ ์ดํดํ๊ณ ๋ค์ํ ํจํด์ ํ์ฉํ ์ ์๋ค๋ฉด ๋ ํจ์จ์ ์ด๊ณ ๊ฒฌ๊ณ ํ Node.js ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋ค.
