지난 시간에는 Node.js에 탄생과 설치방법 개념들을 정리해보았습니다. 이번 시간에는 Node.js의 비동기 제어 흐름은 어떤 방식인지 개념을 살펴보겠습니다. 우선 Node.js에 비동기 제어는 프로그래밍의 핵심적인 개념으로 이벤트 기반의 비동기
I/O 모델을 사용하기 때문에, 비동기 작업을 더욱 효과적으로 처리하는 방법을 이해하는 것이 중요합니다.
1. 콜백 함수 (Callback)
콜백 함수는 비동기 중 가장 기본적인 처리 방법으로 함수가 완료된 후 호출되는 함수를 정의합니다.
const fs = require("fs");
fs.readFile("file.txt", "utf8", (err, data) => {
if (err) {
console.log(err);
return;
}
console.log(data);
});
2.프로미스(Promise)
콜백 지옥을 피하기 위해 도입된 객체로, 비동기 작업이 완료되면 resolve 또는 reject를 호출합니다.
const fs = require("fs").promises;
fs.readFile("file.txt", "utf8")
.then((data) => {
console.log(data);
})
.catch((err) => {
console.error(err);
});
3.async/await
ES2017(ES8)버전에 도입된 기능으로, 프로미스를 더 간단하게 사용할 수 있습니다. async 키워드로 비동기 함수를 정의하고, await 키워드를 사용해 프로미스가 처리될 때까지 기다립니다.
const fs = require("fs").promises;
async function readFile() {
try {
const data = await fs.readFile("file.txt", "utf8");
console.log(data);
} catch (err) {
console.error(err);
}
}
readFile();
4.Promise.all
여러 개의 프로미스를 동시에 처리할 수 있습니다. 모든 프로미스가 완료될 때까지 기다립니다.
const fs = require("fs").promises;
async function readFile() {
try {
const [file1, file2] = await Promise.all([
fs.readFile("file.txt", "utf8"),
fs.readFile("file2.txt", "utf8"),
]);
console.log(file1);
console.log(file2);
} catch (err) {
console.log(err);
}
}
readFile();
5.비동기 이터레이터 (Async Iterators)
비동기 데이터 스트림을 처리할 수 있는 방법입니다.
async function readLines() {
const fs = require("fs");
const readline = require("readline");
const fileStream = fs.createReadStream("file.txt");
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity,
});
for await (const line of rl) {
console.log(line);
}
}
readLines();
6.에러 처리
비동기 코드에 에러를 처리하는 것도 중요합니다. try/catch를 이용하거나 .catch() 메서드를 사용해 에러를 처리할 수 있습니다.
const fs = require("fs").promises;
async function readFile() {
try {
const data = await fs.readFile("file.txt", "utf8");
console.log(data);
} catch (err) {
console.log("Failed read File", err);
}
}
readFile();
요약
- Node.js 에서 비동기 제어는 이벤트 기반의 비동기 I/O 모델을 효과적 활용을 위한 중요한 기술
- 콜백, 프로미스, async/await와 같은 다양한 방법으로 비동기 작업을 관리와 에러 처리 방법 터득
- 방법들을 잘 활용해서 효율적인 비동기 프로그래밍이 가능하다.
GitHub - nodeJsroom/node-js-bloging
Contribute to nodeJsroom/node-js-bloging development by creating an account on GitHub.
github.com
LIST
'Back-End > Node.js' 카테고리의 다른 글
[NodeJS] 6장 인증 및 보안 (0) | 2025.02.26 |
---|---|
[NodeJS] 5장 데이터베이스 연동하기 (0) | 2025.02.25 |
[NodeJS] 4장 Express.js 프레임워크 (0) | 2025.02.23 |
[NodeJS] 3장 라우팅 구현, HTTP 서버만들기 (0) | 2025.02.22 |
[NodeJS] 1장 Node.js의 탄생 (0) | 2025.02.10 |