Search

Node.js Microtask Queue 정리

Node.js Microtask Queue 정리

핵심 요약

Node.js는 메인 코드 실행 후, Microtask Queue를 모두 비운 다음에 Macrotask Queue를 처리한다.
Microtask Queue에는 Promise.then / Promise.catch / Promise.finallyqueueMicrotask 로 등록한 작업만 들어간다.
await도 내부적으로는 Promise 기반이라 Microtask로 동작한다.

이벤트 흐름

1.
메인 코드 실행
2.
비동기 작업 (Promise, queueMicrotask 등) 등록
3.
메인 코드 종료
4.
Microtask Queue 완전히 비우기
5.
Macrotask Queue (setTimeout, setImmediate, I/O 완료 콜백 등) 처리

Microtask Queue에 들어가는 작업 종류

작업
Microtask 여부
Promise.then / .catch / .finally
queueMicrotask
setTimeout
(Macrotask)
setImmediate
(Macrotask)
파일 읽기, 네트워크 요청 완료
(Macrotask)

실제 테스트 코드

console.log('start'); setTimeout(() => { console.log('timeout1'); }, 0); Promise.resolve().then(() => { console.log('promise1'); }); setTimeout(() => { console.log('timeout2'); }, 0); queueMicrotask(() => { console.log('microtask1'); }); Promise.resolve().then(() => { console.log('promise2'); queueMicrotask(() => { console.log('microtask2'); }); }); (async () => { await null; console.log('await1'); })(); console.log('end');
JavaScript
복사

실제 실행 결과

start end promise1 microtask1 promise2 await1 microtask2 timeout1 timeout2
Plain Text
복사

추가 중요한 포인트

Microtask 안에서 또 Microtask를 등록하면, 기존 Microtask가 모두 끝난 후 다음 틱에 실행된다.
Promise.then은 Microtask에 즉시 등록되지만, Promise 안에서 queueMicrotask를 등록하면 다음 Microtask 틱으로 밀린다.

최종 요약

"Node.js는 메인 코드 실행 → Microtask Queue 모두 소화 → 그 다음 Macrotask를 처리한다. Microtask 안에서 또 Microtask를 등록하면, 기존 Microtask가 모두 끝난 후에 실행된다."