[nodejs] Node.js에서의 비동기 프로그래밍

Node.js는 비동기 이벤트 기반 아키텍처를 가지고 있어, 비동기 프로그래밍은 Node.js 애플리케이션의 필수적인 구성 요소입니다. 이러한 비동기 프로그래밍은 네트워크 요청, 파일 시스템 액세스, 데이터베이스 쿼리 등과 같이 I/O 작업이 필요한 상황에서 특히 중요합니다. 이번 포스트에서는 Node.js에서의 비동기 프로그래밍에 대해 알아보겠습니다.

콜백 함수

Node.js에서는 주로 콜백 함수를 사용하여 비동기 작업을 다룹니다. 콜백 함수는 비동기 작업이 완료되었을 때 호출되는 함수로, 일반적으로 다음과 같은 패턴을 따릅니다.

const fs = require('fs');

fs.readFile('file.txt', (err, data) => {
  if (err) throw err;
  console.log(data);
});

위의 예제에서 readFile 함수는 파일을 읽는 작업을 비동기적으로 수행하며, 작업이 완료되면 제공된 콜백 함수가 호출됩니다.

Promise

ES6부터는 Promise를 사용하여 비동기 작업을 다룰 수 있습니다. Promise는 비동기 작업의 완료 또는 실패와 같은 결과를 다루는 객체입니다.

const fetchData = () => {
  return new Promise((resolve, reject) => {
    // 비동기 작업 수행
    if (error) {
      reject(error);
    } else {
      resolve(data);
    }
  });
};

fetchData()
  .then((data) => {
    console.log(data);
  })
  .catch((error) => {
    console.error(error);
  });

위의 예제에서 fetchData 함수는 Promise 객체를 반환하며, 작업이 완료되면 then 메서드로 성공한 경우를, catch 메서드로 실패한 경우를 처리할 수 있습니다.

Async/Await

ES2017부터는 Async/Await 구문을 사용하여 비동기 코드를 더 쉽게 다룰 수 있게 되었습니다. Async/Await를 사용하면 비동기 작업을 동기적으로 작성할 수 있어 코드의 가독성을 향상시킵니다.

const fetchData = async () => {
  try {
    const data = await fetchDataFromAPI();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
};

위의 예제에서 fetchData 함수는 async 키워드로 정의되어 비동기 작업을 수행하며, await 키워드를 사용하여 비동기 작업이 완료될 때까지 기다립니다.

Node.js에서의 비동기 프로그래밍은 이러한 다양한 방법을 통해 다룰 수 있으며, 개발자는 상황에 맞게 가장 적합한 방법을 선택하여 비동기 작업을 처리할 수 있습니다.

참고 자료