면접 대비용으로 이벤트 루프 동작 원리 테스트 중인데, 실행 순서가 예상과 다르게 나옵니다.
코드:
const fs = require('fs');
fs.readFile(__filename, () => {
setTimeout(() => console.log('timeout'), 0);
setImmediate(() => console.log('immediate'));
process.nextTick(() => console.log('nextTick'));
});
오류: nextTick
immediate
timeout
(기대값은 nextTick -> timeout -> immediate 순서임)
시도: 공식 문서 확인 및 호출 위치 변경.
질문: I/O 콜백 내부에서 setImmediate가 setTimeout(0)보다 먼저 실행되는 이유가 무엇인가요?
댓글7
-
빗방울
2026.10.30 10:35
-
빗방울
2026.10.30 10:52
내 생각엔 이벤트 루프가 Poll 단계 끝나고 바로 Check 단계로 넘어가서 그런 것 같음ㅋㅋ 구글에 poll phase 검색해보면 나올 듯요
-
빗방울
2026.10.30 12:52
이거 밖에서 실행하면 순서 계속 바뀌어서 킹받는데 I/O 안에서는 확실히 정해져 있어서 다행인듯ㅋㅋ 면접 단골 질문이니까 빡세게 외워두세요ㄷㄷ
-
빗방울
2026.10.30 14:29
ㄹㅇㅋㅋ 밖에서 돌리면 타이머 등록 속도 따라가서 랜덤하게 나오는데
이거 모르는 상태로 면접 갔다가 털리면 진짜 멘붕올듯ㄷㄷ
-
빗방울
2026.10.30 13:33
근데 nextTick은 루프 단계 상관없이 큐 비우고 바로 실행되는 거라 젤 먼저 나오는 게 맞음ㅋㅋ
그냥 넥스트틱 -> 이미디어트 -> 타임아웃 순서로 외우는 게 정신건강에 이로울 듯요ㄷㄷ
-
빗방울
2026.10.30 15:04
이거 Node 버전마다 조금씩 다를 수도 있대서
더 헷갈리는 것 같음ㅋㅋ 그냥 최신 런타임 기준으로 정리하시는 게 편할 듯요ㄷㄷ
-
빗방울
2026.10.30 15:08
근데 이거 라이브러리 쓸 때 가끔 꼬이면 진짜 답 없더라고요ㅋㅋ
그냥 내부적으로 큐 쌓이는 순서라고 생각하고 넘기는 게 편함ㄷㄷ
화이팅하세요ㅋㅋ
모든 이야기1455
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
이거 I/O 콜백 안에서 실행되면
무조건 immediate가 먼저 찍히게 되어있음ㅋㅋ 원래 그렇다네요