[nodejs] 비동기 I/O 작업

Node.js에서 가장 중요한 특징 중 하나는 비동기 I/O 작업을 지원한다는 것입니다. 이는 Node.js가 I/O 작업을 처리하는 동안 다른 작업을 동시에 처리할 수 있다는 의미입니다.

비동기 I/O란?

Node.js에서 I/O 작업(파일 읽기, 네트워크 통신 등)은 비동기적으로 처리됩니다. 이는 한 작업이 완료될 때까지 대기하지 않고 다른 작업을 실행할 수 있어 애플리케이션의 성능을 향상시킬 수 있습니다.

콜백 함수

비동기 작업을 위해 Node.js는 콜백 함수를 사용합니다. 작업이 완료되면 콜백 함수가 호출되어 결과를 처리하게 됩니다.

예를 들어, 파일을 읽어오는 작업을 수행하려면 다음과 같은 방식으로 콜백 함수를 활용할 수 있습니다.

const fs = require('fs');

fs.readFile('file.txt', 'utf8', function(err, data) {
  if (err) {
    // 오류 처리
  } else {
    // 데이터 처리
  }
});

위 코드에서 readFile 함수는 파일을 비동기적으로 읽어오며, 읽기가 완료되면 콜백 함수가 실행됩니다.

Promise와 async/await

Node.js 8부터는 Promise와 async/await를 지원하여 비동기 코드를 더 쉽게 작성할 수 있도록 도와줍니다.

Promise를 사용한 예시:

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

fs.readFile('file.txt', 'utf8')
  .then(data => {
    // 데이터 처리
  })
  .catch(err => {
    // 오류 처리
  });

async/await를 사용한 예시:

async function readAndProcessFile() {
  try {
    const data = await fs.readFile('file.txt', 'utf8');
    // 데이터 처리
  } catch (err) {
    // 오류 처리
  }
}

이러한 방식을 사용하면 콜백 지옥(callback hell)을 피하고 코드를 더 읽기 쉽게 만들 수 있습니다.

비동기 프로그래밍은 Node.js의 강점 중 하나이므로 적절히 활용하여 효율적인 애플리케이션을 개발할 수 있습니다.

참고 자료