"이벤트 루프에 대해 설명해주세요."
프론트엔드 자바스크립트 기술 면접 단골 손님 이벤트 루프에 대해서 알아보겠습니다.
❗️ 내가 이해하기 위해 적은 글 ❗️
자바스크립트는 싱글 스레드 기반의 언어이고, 자바스크립트 엔진은 하나의 콜 스택만 사용합니다. 즉, 동시에 하나의 작업만 처리할 수 있다 는 뜻입니다.
하지만 자바스크립트를 사용하다 보면 마치 동시에 여러 작업이 처리되는 것처럼 보입니다. 예를 들어, 이벤트가 발생하는 동안에도 다른 작업이 진행되거나, 여러 개의 HTTP 요청이 동시에 처리되는 것처럼 보이는 경우가 있습니다.
이러한 동작이 가능한 이유는 바로 이벤트 루프 덕분입니다.
자바스크립트는 싱글 스레드 언어이지만, 자바스크립트가 실행되는 환경(예: 브라우저, Node.js)은 멀티 스레드 기능을 제공합니다.
이 환경과 자바스크립트 엔진이 연동하여 비동기 작업을 처리할 수 있도록 해주는 핵심 장치가 바로 이벤트 루프 입니다.


이미지 출처: MDN_이벤트 루프
이벤트 루프는 다음과 같은 방식으로 동작합니다.
setTimeout, Promise, DOM 이벤트 등이 포합됩니다. 이들은 비동기 작업을 처리하는 데 사용됩니다.Promise.then(), MutationObserver 같은 고우선순위 비동기 작업이 들어가는 큐입니다. 이벤트 루프는 콜 스택이 비면 먼저 마이크로태스크 큐의 작업을 실행한 후, 콜백 큐에서 대기 중인 작업을 실행합니다.console.log("Start");
setTimeout(() => console.log("setTimeout"), 0);
Promise.resolve().then(() => console.log("Promise"));
console.log("End");
Start
End
Promise
setTimeout
console.log("Start") 실행 → Call Stack에서 실행 후 제거
setTimeout 실행 → Web API에 넘김 (0ms 후 콜백 큐로 이동)
Promise.resolve().then() 실행 → 마이크로태스크 큐에 저장
console.log("End") 실행 → Call Stack에서 실행 후 제거
Call Stack이 비어 있음 → Microtask Queue에서 Promise 실행 후 제거
Call Stack이 다시 비어 있음 → Callback Queue에서 setTimeout 실행 후 제거
"Microtask Queue > Animation Frame > Task Queue" 순으로 Microtask Queue가 가장 먼저 실행되고 Task Queue가 가장 늦게 실행됩니다.
✅ 참고