반응형
Node.js 비동기 흐름 쉽게 이해하기

Node.js는 단일 스레드 이벤트 루프 기반으로 동작합니다. 비동기(Asynchronous) 처리 방식이 핵심인데, 초보에게는 흐름이 복잡하게 느껴질 수 있습니다. 이 글에서는 콜백, 프로미스, async/await을 중심으로 이해를 쉽게 돕습니다.
핵심 포인트
- Node.js는 싱글 스레드 + 이벤트 루프 기반
- 동기(Sync)와 비동기(Async)의 차이를 이해하자
- 콜백, 프로미스(Promise), async/await로 흐름 제어 가능
- 비동기 처리의 장점: I/O 블로킹 방지, 높은 처리량
1. Node.js 이벤트 루프와 비동기 구조
Node.js는 싱글 스레드이지만, 비동기 I/O를 통해 다수 요청을 동시에 처리할 수 있습니다. 이벤트 루프(Event Loop)는 콜백 큐를 체크하며 비동기 작업 완료 시 함수를 실행합니다.
간단한 예: 파일 읽기, HTTP 요청 등 I/O 작업은 비동기로 처리 → 블로킹 없이 다음 코드 실행 가능
2. 동기(Sync) vs 비동기(Async)
- 동기: 코드 순서대로 실행, 블로킹 발생 가능
console.log('1'); console.log('2'); console.log('3'); - 비동기: 요청 후 결과를 기다리지 않고 다음 코드 실행, 콜백/프로미스/async-await 사용
→ '파일 읽기 요청 완료'가 먼저 출력될 수 있음const fs = require('fs'); fs.readFile('file.txt', 'utf8', (err, data) => { if(err) throw err; console.log(data); }); console.log('파일 읽기 요청 완료');
3. 콜백(Callback)으로 흐름 제어
콜백은 비동기 작업이 끝난 후 실행되는 함수입니다.
function doSomething(callback) {
setTimeout(() => {
console.log('작업 완료');
callback();
}, 1000);
}
doSomething(() => {
console.log('콜백 실행');
});
출력 순서:
- 1초 후 '작업 완료'
- 즉시 '콜백 실행'
🔹 단점: 콜백 지옥(callback hell)이 발생할 수 있음
4. 프로미스(Promise)로 가독성 개선
Promise는 비동기 작업 성공(resolve)과 실패(reject)를 객체로 다룹니다.
function asyncTask() {
return new Promise((resolve, reject) => {
setTimeout(() => resolve('완료'), 1000);
});
}
asyncTask()
.then(result => console.log(result))
.catch(err => console.error(err));
콜백보다 체계적이고 가독성이 좋음
5. async/await로 동기처럼 작성
async/await는 Promise 기반으로, 비동기 코드를 동기 코드처럼 읽기 쉽게 작성할 수 있습니다.
function wait(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function run() {
console.log('시작');
await wait(1000);
console.log('1초 후 출력');
}
run();
🔹 try/catch로 에러 핸들링 가능
6. 정리 — Node.js 비동기 흐름 요약
- Node.js는 싱글 스레드 + 이벤트 루프 기반 → I/O 블로킹 최소화
- 비동기 처리 방식: 콜백 → 프로미스 → async/await 순으로 발전
- async/await + try/catch = 가장 가독성 높고 유지보수 쉬움
- 비동기 패턴 이해 = 서버 성능 최적화와 오류 처리 핵심
반응형
'개발 · IT > 프론트엔드' 카테고리의 다른 글
| 폴더 구조 베스트 프랙티스 — 깔끔하고 유지보수 쉬운 프로젝트 구조 설계 (0) | 2025.12.02 |
|---|---|
| CSS Grid vs Flexbox — 차이와 언제 무엇을 쓸까 (0) | 2025.12.01 |
| 🎯 나의 첫 오픈소스 프로젝트 (0) | 2025.11.07 |
| 폴더 구조 확인하는 방법 - 초보자를 위한 쉽고 간단한 가이드 (2) | 2024.11.26 |
| tailwind css에 대해 알아보자 (0) | 2024.02.10 |
댓글