nodejs ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

2025. 5. 22. 22:45ยท๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL

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 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

'๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐ๋ธŒ์ฝ”์Šค] ํ”„๋ก ํŠธ, ์–ด์ฉŒ๋ฉด ๋…ธ๋“œ ๋ฐฑ์—”๋“œ๊ฐ€ ๋  ๋‚ด๊ฐ€ ์ปดํŒŒ์ผ ์–ธ์–ด๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์ด์œ   (1) 2025.06.02
ECMAScript์™€ JavaScript ํ‘œ์ค€ํ™”  (0) 2025.05.29
[๋ฐ๋ธŒ์ฝ”์Šค] ํ˜‘์—… ํˆด๊ณผ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•๋ก   (0) 2025.05.12
[๋ฐ๋ธŒ์ฝ”์Šค] ์ธ์ฆ/์ธ๊ฐ€ ์‹œ์Šคํ…œ ์ดํ•ด: ์ฟ ํ‚ค, ์„ธ์…˜, JWT์™€ ๋ณด์•ˆ ํฌ์ธํŠธ  (1) 2025.05.04
[๋ฐ๋ธŒ์ฝ”์Šค] ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ: express-validator ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ  (0) 2025.05.01
'๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐ๋ธŒ์ฝ”์Šค] ํ”„๋ก ํŠธ, ์–ด์ฉŒ๋ฉด ๋…ธ๋“œ ๋ฐฑ์—”๋“œ๊ฐ€ ๋  ๋‚ด๊ฐ€ ์ปดํŒŒ์ผ ์–ธ์–ด๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์ด์œ 
  • ECMAScript์™€ JavaScript ํ‘œ์ค€ํ™”
  • [๋ฐ๋ธŒ์ฝ”์Šค] ํ˜‘์—… ํˆด๊ณผ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•๋ก 
  • [๋ฐ๋ธŒ์ฝ”์Šค] ์ธ์ฆ/์ธ๊ฐ€ ์‹œ์Šคํ…œ ์ดํ•ด: ์ฟ ํ‚ค, ์„ธ์…˜, JWT์™€ ๋ณด์•ˆ ํฌ์ธํŠธ
ํ‚ํ‚์ž‰
ํ‚ํ‚์ž‰
๋ฟŒ๋ก ํŠธ ๊ฐœ๋ฐœ์ž(์ง€๋ง์ƒ)์˜ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ
  • ํ‚ํ‚์ž‰
    monicx.dev
    ํ‚ํ‚์ž‰
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (173)
      • ๐Ÿ–ฅ๏ธdevelop (2)
        • Github (2)
        • Frontend (4)
        • Backend (5)
        • Mobile (0)
        • CS (0)
        • Three.js (0)
        • Docker (2)
      • ๐Ÿ“šbook (9)
        • npm Deep Dive (4)
      • ๐Ÿ“•review (33)
        • ์ฑ… (24)
        • ํ–‰์‚ฌ (1)
        • ํšŒ๊ณ  (2)
      • โญproject (5)
        • petiary (2)
        • ๆšŽ่ฉ  (0)
        • ์ธํ„ด (2)
      • ๐Ÿ˜ถ‍๐ŸŒซ๏ธalgorithm (0)
      • ๐Ÿ’กtips (1)
      • ๐Ÿ˜Ždaily (10)
      • ๐Ÿ•น๏ธgame (0)
      • ๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค (87)
        • TIL (61)
        • ํ”„๋กœ์ ํŠธ (18)
        • ํšŒ๊ณ  (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
  • ๋งํฌ

    • ๋ฒจ๋กœ๊ทธ
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
ํ‚ํ‚์ž‰
nodejs ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”