[nodejs] 비동기식 프로그래밍과 예외 처리

Node.js는 비동기식 프로그래밍 모델을 채택하여 많은 작업을 효율적으로 처리할 수 있게 해줍니다. 이 모델은 콜백 함수를 사용하여 비동기 작업의 완료 시점에 결과를 처리할 수 있게 해줍니다. 하지만 이로 인해 예외 처리에 대한 일부 동작이 예상과 다를 수 있습니다.

비동기식 프로그래밍

Node.js에서의 비동기식 프로그래밍은 fs.readFile()과 같은 함수를 사용할 때 많이 보입니다. 이 함수들은 파일을 읽는 작업을 시작하고 콜백 함수를 통해 결과를 반환합니다.

const fs = require('fs');

fs.readFile('file.txt', (err, data) => {
  if (err) {
    console.error('파일을 읽을 수 없습니다.');
    return;
  }
  console.log(data);
});

이러한 방식으로 비동기식 작업을 수행하는 동안, 프로그램은 다른 작업을 수행할 수 있어서 효율적인 자원 활용이 가능합니다.

예외 처리

비동기식 코드에서의 예외 처리는 몇 가지 주의 사항이 필요합니다. 만약 콜백 함수에서 예외가 발생하면, 해당 예외는 전역 컨텍스트로 전파되지 않고 무시될 수 있습니다. 이를 방지하기 위해 콜백 함수 내부에서 예외를 처리해야 합니다.

fs.readFile('file.txt', (err, data) => {
  try {
    if (err) {
      throw err;
    }
    console.log(data);
  } catch (e) {
    console.error('파일을 읽는 도중 에러가 발생했습니다.');
  }
});

위 코드에서 try-catch 블록을 사용하여 콜백 함수 내에서 발생하는 예외를 처리하고 있습니다.

Node.js는 이러한 예외 처리 메커니즘을 개선하기 위해 util.promisify와 같은 유틸리티를 제공하고 있습니다. util.promisify를 사용하면 콜백 기반의 비동기 함수를 프로미스 기반으로 변환하여 보다 간편하게 예외 처리를 할 수 있습니다.

결론

Node.js의 비동기식 프로그래밍은 효율적인 자원 활용을 가능하게 하지만, 이로 인해 예외 처리에 대한 주의가 필요합니다. 올바른 예외 처리를 위해 콜백 함수 내부에서 예외를 처리하거나, util.promisify와 같은 유틸리티를 사용하여 프로미스를 활용하는 것이 중요합니다.


References

```