Notice
Recent Posts
Recent Comments
Link
ORANGEE
자바스크립트 이벤트 루프 완벽 이해하기 본문
## 자바스크립트의 이벤트 루프란?
자바스크립트는 싱글 스레드(single-thread) 언어다. 즉, 한 번에 하나의 작업만 처리할 수 있다. 하지만 setTimeout
, Promise
, fetch
같은 비동기 작업도 잘 처리하는데, 그 비밀은 바로 이벤트 루프(Event Loop)에 있다.
1️⃣ 콜 스택(Call Stack)
자바스크립트는 모든 실행 코드를 콜 스택이라는 자료구조에 쌓아 실행한다.
function hello() {
console.log("Hello");
}
function greeting() {
hello();
}
greeting();
이 코드는 다음 순서로 콜 스택에 쌓였다가 빠진다:
greeting()
호출 → 스택에 추가hello()
호출 → 스택에 추가console.log()
실행 → 출력 후 제거hello()
제거 →greeting()
제거
2️⃣ 웹 API / 백그라운드
브라우저나 Node.js 환경은 비동기 작업을 자체적으로 처리할 수 있는 백그라운드 API를 제공한다.
console.log("Start");
setTimeout(() => {
console.log("Timeout");
}, 0);
console.log("End");
출력 결과는?
Start
End
Timeout
setTimeout
은 콜 스택에서 바로 실행되지 않고 백그라운드(Web API)에 등록됨.
3️⃣ 이벤트 큐(Event Queue)
백그라운드에서 완료된 작업은 이벤트 큐에 들어간다. 콜 스택이 비워졌을 때 이벤트 큐에 있는 작업을 하나씩 실행한다.
4️⃣ 이벤트 루프(Event Loop)
이벤트 루프는 끊임없이 콜 스택과 이벤트 큐를 감시하며, 콜 스택이 비어있으면 이벤트 큐에서 작업을 꺼내 실행시킨다.
[콜 스택 비어있음] → [이벤트 큐에 작업 있음] → [콜 스택에 푸시해서 실행]
🔁 마이크로태스크 큐 (Microtask Queue)
Promise.then
, async/await
등의 작업은 마이크로태스크 큐에 들어간다. 이 큐는 이벤트 큐보다 우선 처리된다.
console.log("Start");
Promise.resolve().then(() => {
console.log("Promise");
});
console.log("End");
출력 결과:
Start
End
Promise
✅ 요약
- 콜 스택: 실행 중인 작업이 쌓이는 곳
- 웹 API/백그라운드: 비동기 작업을 처리
- 이벤트 큐: 비동기 작업 완료 시 대기하는 큐
- 이벤트 루프: 스택이 비면 큐에서 작업을 가져옴
- 마이크로태스크 큐: Promise 등 빠른 처리 우선 순위 큐
'CODE' 카테고리의 다른 글
자바스크립트 클로저(Closure) 쉽게 이해하기 (0) | 2025.04.03 |
---|---|
자바스크립트 이벤트 루프 완벽 가이드 (0) | 2025.04.03 |
자바스크립트 호이스팅(Hoisting) 완전 정리 (0) | 2025.04.03 |
var, let, const 차이점 완벽 정리 (0) | 2025.04.03 |
undefined vs null - 자바스크립트에서의 차이점 (0) | 2025.04.03 |