자바스크립트의 심장, 이벤트 루프

🔄 이벤트 루프란?

자바스크립트는 싱글 스레드 언어입니다. 동시에 여러 작업을 처리하는 게 아닌, **한 번에 하나의 작업만 수행**합니다. 하지만 비동기 처리(예: setTimeout, fetch)는 어떻게 가능한 걸까요? 바로 **이벤트 루프(Event Loop)** 덕분입니다.

📦 콜 스택과 태스크 큐

// 동기 작업: 콜 스택(Stack)에서 실행
// 비동기 작업: Web API → 태스크 큐(Queue)로 대기
- **콜 스택(Call Stack)**: 실행 중인 함수들이 쌓이는 구조. - **Web API**: 브라우저가 제공하는 비동기 처리 영역 (setTimeout, DOM 이벤트 등) - **태스크 큐(Task Queue)**: 비동기 콜백들이 대기하는 곳.

🚀 실행 순서 예시

console.log("1");

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

console.log("3");
**결과:** 1 → 3 → 2 비동기 작업(setTimeout)은 Web API에서 대기한 후, 콜 스택이 비면 큐로 들어가 실행됩니다.

⏳ 마이크로태스크 vs 매크로태스크

- **마이크로태스크(Microtask)**: Promise.then, MutationObserver 등 - **매크로태스크(Macrotask)**: setTimeout, setInterval 등
console.log("Start");

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

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

console.log("End");
**실행 순서:** Start → End → Promise → Timeout

🎯 요약

- 자바스크립트는 싱글 스레드 언어이지만 이벤트 루프를 통해 비동기를 처리함 - 비동기 처리의 핵심은 **콜 스택 → Web API → 태스크 큐 → 이벤트 루프 순환** - Promise는 setTimeout보다 먼저 실행됨 (마이크로태스크 > 매크로태스크)