[nodejs] 비동기식 플로우 제어

Node.js는 비동기식 프로그래밍을 지원하여, 여러 가지 작업을 동시에 처리할 수 있습니다. 이는 웹 애플리케이션 또는 서버에서 많은 이점을 제공하지만, 때로는 데이터나 작업의 순서를 제어해야할 필요가 있습니다. 이런 경우에 Node.js의 비동기식 플로우 제어 기능이 필요합니다.

콜백(Callback) 함수

Node.js에서 가장 일반적으로 사용되는 비동기식 제어 방식은 콜백 함수입니다. 콜백 함수는 다른 함수의 실행이 완료된 후 특정 작업을 수행하도록 지정해줍니다. 예를 들어, 파일을 읽는 작업이 완료된 후에 처리할 작업을 콜백 함수로 지정할 수 있습니다.

const fs = require('fs');

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
  // 파일을 읽은 후 처리할 작업
});

프로미스(Promise)

프로미스는 ES6에서 도입된 개념으로, 콜백 지옥을 피하기 위한 방법으로 사용됩니다. 프로미스는 비동기 작업의 성공 또는 실패를 나타내는 객체입니다. 이후에 성공할 경우의 작업 또는 실패할 경우의 작업을 지정할 수 있습니다.

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

fs.readFile('example.txt', 'utf8')
  .then(data => {
    console.log(data);
    // 파일을 읽은 후 처리할 작업
  })
  .catch(err => {
    console.error(err);
  });

async/await

async/await은 ES8에서 도입된 기능으로, 프로미스를 좀 더 간결하고 읽기 쉽게 사용할 수 있도록 해줍니다. async 키워드로 함수를 정의하고, 함수 내에서 await 키워드를 사용하여 비동기 작업이 끝날 때까지 기다릴 수 있습니다.

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

async function readFileAsync() {
  try {
    let data = await fs.readFile('example.txt', 'utf8');
    console.log(data);
    // 파일을 읽은 후 처리할 작업
  } catch (err) {
    console.error(err);
  }
}

readFileAsync();

비동기식 플로우 제어에 대한 이해는 Node.js 애플리케이션을 개발할 때 매우 중요합니다. 콜백 함수, 프로미스, async/await을 적절히 활용하여 작업의 순서와 흐름을 제어할 수 있으며, 이는 읽기 쉬운 코드를 작성하는 데 도움이 됩니다.

참고문헌: