자바스크립트 이벤트 루프: 싱글 스레드가 비동기 작업을 처리하는 방식 빠른 답 싱글 스레드는 자바스크립트 코드가 실행되는 콜 스택이 하나라는 뜻이지, 런타임 전체가 한 작업만 한다는 뜻은 아닙니다. 타이머, 네트워크, 파일 I/O 같은 대기 작업은 브라우저 Web APIs나 Node.js 런타임이 맡고, 완료된 콜백만 다시 실행 큐로 들어옵니다. Promise.then , queueMicrotask 같은 마이크로태스크는 일반 태스크보다 먼저 처리되므로 setTimeout 보다 앞서 실행될 수 있습니다. 브라우저와 Node.js는 이벤트 루프 구조가 다르고, Node.js 20 이후에는 타이머와 setImmediate 의 상대 순서를 설명할 때 오래된 자료와 차이가 있습니다. 목차 시간 흐름으로 이해하기 흐름으로 보기 싱글 스레드라는 말의 정확한 범위 이벤트 루프가 실행 순서를 정하는 방식 태스크와 마이크로태스크를 구분해야 하는 이유 브라우저와 Node.js의 차이 실행 환경을 남기는 설정 예시 Node.js에서 관찰하는 실행 순서 오류와 로그로 디버깅하기 흔한 오해 시간 흐름으로 이해하기 현재 작업 동기 코드가 콜 스택에서 위에서 아래로 실행됩니다. → 작업 위임 setTimeout , fetch , 파일 I/O 같은 대기 작업은 런타임으로 넘어갑니다. → 완료 대기 타이머 만료, 네트워크 응답, I/O 완료 콜백이 큐에 들어갑니다. → 마이크로태스크 현재 콜 스택이 비면 Promise.then , queueMicrotask 가 먼저 실행됩니다. → 다음 태스크 타이머, 이벤트 콜백 같은 태스크가 실행되고 브라우저는 렌더링 기회를 얻습니다. 흐름으로 보기 흐름 다이어그램 이 흐름에서 자바스크립트 엔진이 직접 모든 일을 붙잡고 있는 것은 아닙니다. 엔진은 현재 실행 중인 함수 본문을 처리하고, 오래 걸리는 대기 작업은 브라우저나 Node.js 런타임에 넘깁니다. 작업이 끝나면 콜백이 큐에 들어가고, 이벤트 루프가 콜 스택이 비는 시점에 맞...