[NodeJS] 2장 Node.js의 비동기 제어

지난 시간에는 Node.js에 탄생과 설치방법 개념들을 정리해보았습니다. 이번 시간에는 Node.js의 비동기 제어 흐름은 어떤 방식인지 개념을 살펴보겠습니다. 우선 Node.js에 비동기 제어는 프로그래밍의 핵심적인 개념으로 이벤트 기반의 비동기

I/O 모델을 사용하기 때문에, 비동기 작업을 더욱 효과적으로 처리하는 방법을 이해하는 것이 중요합니다.

 

1. 콜백 함수 (Callback)

콜백 함수는 비동기 중 가장 기본적인 처리 방법으로 함수가 완료된 후 호출되는 함수를 정의합니다.

const fs = require("fs");


fs.readFile("file.txt", "utf8", (err, data) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log(data);
});

2.프로미스(Promise)

콜백 지옥을 피하기 위해 도입된 객체로, 비동기 작업이 완료되면 resolve 또는 reject를 호출합니다.

const fs = require("fs").promises;

fs.readFile("file.txt", "utf8")
  .then((data) => {
    console.log(data);
  })
  .catch((err) => {
    console.error(err);
  });

3.async/await

ES2017(ES8)버전에 도입된 기능으로, 프로미스를 더 간단하게 사용할 수 있습니다. async 키워드로 비동기 함수를 정의하고, await 키워드를 사용해 프로미스가 처리될 때까지 기다립니다.

const fs = require("fs").promises;

async function readFile() {
  try {
    const data = await fs.readFile("file.txt", "utf8");
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}

readFile();

4.Promise.all

여러 개의 프로미스를 동시에 처리할 수 있습니다. 모든 프로미스가 완료될 때까지 기다립니다.

const fs = require("fs").promises;

async function readFile() {
  try {
    const [file1, file2] = await Promise.all([
      fs.readFile("file.txt", "utf8"),
      fs.readFile("file2.txt", "utf8"),
    ]);
    console.log(file1);
    console.log(file2);
  } catch (err) {
    console.log(err);
  }
}

readFile();

5.비동기 이터레이터 (Async Iterators)

비동기 데이터 스트림을 처리할 수 있는 방법입니다.

async function readLines() {
  const fs = require("fs");
  const readline = require("readline");

  const fileStream = fs.createReadStream("file.txt");
  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity,
  });

  for await (const line of rl) {
    console.log(line);
  }
}

readLines();

6.에러 처리

비동기 코드에 에러를 처리하는 것도 중요합니다. try/catch를 이용하거나 .catch() 메서드를 사용해 에러를 처리할 수 있습니다. 

const fs = require("fs").promises;

async function readFile() {
  try {
    const data = await fs.readFile("file.txt", "utf8");
    console.log(data);
  } catch (err) {
    console.log("Failed read File", err);
  }
}
readFile();

요약

  • Node.js 에서 비동기 제어는 이벤트 기반의 비동기 I/O 모델을 효과적 활용을 위한 중요한 기술
  • 콜백, 프로미스, async/await와 같은 다양한 방법으로 비동기 작업을 관리와 에러 처리 방법 터득
  • 방법들을 잘 활용해서 효율적인 비동기 프로그래밍이 가능하다.
 

GitHub - nodeJsroom/node-js-bloging

Contribute to nodeJsroom/node-js-bloging development by creating an account on GitHub.

github.com

 

 

 

 

 

 

 

 

 

 

 

 

 

LIST