[nodejs] 비동기 I/O 작업
Node.js는 단일 쓰레드 이벤트 루프를 사용하여 비동기 I/O 작업을 처리하는 데 강점을 가지고 있습니다. 이를 통해 높은 성능과 확장성을 제공합니다.
비동기 I/O란?
비동기 I/O는 입출력 작업을 수행할 때, 결과를 기다리지 않고 다른 작업을 수행하는 방식을 말합니다. Node.js는 이를 효율적으로 처리하여 여러 개의 I/O 작업을 동시에 다룰 수 있습니다.
콜백 함수
Node.js에서는 콜백 함수를 사용하여 비동기 함수의 작업이 완료되면 특정 작업을 수행하도록 합니다.
예를 들어, 파일을 읽는 작업을 수행하는 fs.readFile
함수는 다음과 같이 사용할 수 있습니다.
const fs = require('fs');
fs.readFile('file.txt', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
위 예제에서는 readFile
함수의 결과를 기다리지 않고, 콜백 함수를 등록하여 파일을 읽은 후에 작업을 수행하도록 설정했습니다.
Promise와 Async/Await
Node.js 8버전 이후부터는 Promise와 Async/Await을 지원하여 비동기 작업을 보다 간편하게 다룰 수 있습니다.
예를 들어, Promise를 사용하여 파일을 읽는 작업을 다음과 같이 수행할 수 있습니다.
const fs = require('fs');
function readFileAsync(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, (err, data) => {
if (err) {
reject(err);
} else {
resolve(data);
}
});
});
}
readFileAsync('file.txt')
.then(data => {
console.log(data);
})
.catch(err => {
console.error(err);
});
또는 Async/Await을 사용하여 다음과 같이 작성할 수도 있습니다.
const fs = require('fs');
async function readAndPrintFile(path) {
try {
const data = await fs.promises.readFile(path);
console.log(data);
} catch (err) {
console.error(err);
}
}
readAndPrintFile('file.txt');
결론
Node.js의 비동기 I/O는 콜백 함수, Promise, Async/Await을 통해 효율적으로 다룰 수 있습니다. 이를 통해 높은 성능과 확장성을 제공하는 Node.js의 핵심적인 특징 중 하나입니다.
참고문헌: Node.js 공식 문서