Node.js비동기

이벤트 루프 기본

Node.js가 한 스레드처럼 보여도 많은 비동기 작업을 처리할 수 있는 이유인 이벤트 루프 기본 개념을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

javascript
console.log("A");

setTimeout(() => {
  console.log("timeout");
}, 0);

Promise.resolve().then(() => {
  console.log("promise");
});

console.log("B");

설명

  • Node.js는 JavaScript 실행 자체는 한 번에 하나씩 처리하지만, I/O 완료 알림과 콜백 큐를 이용해 비동기 작업을 이어갑니다.
  • 일반적으로 Promise.then이나 await 뒤의 작업은 timer보다 먼저 이어지는 경우가 많습니다.
  • 이벤트 루프를 이해하면 "왜 출력 순서가 이렇게 나오지?" 같은 디버깅이 쉬워집니다.

짧은 예제

javascript
setImmediate(() => console.log("immediate"));
process.nextTick(() => console.log("nextTick"));

빠른 정리

개념핵심
Call stack지금 실행 중인 코드
Task queue나중에 실행할 콜백
MicrotaskPromise, queueMicrotask 계열
Event loop큐에서 작업을 꺼내 실행

주의할 점

while(true) 같은 CPU 바운드 작업은 이벤트 루프를 막아 전체 서버 응답을 느리게 만들 수 있습니다.