Server/Node.js
Node.js 호출 스택과 이벤트 루프
dev.Woody
2021. 11. 29. 23:51

서버로써 동작하기 위해서는 사용자에게 요청을 받아 응답을 기다려야 한다. Node.js는 이벤트 기반, Non blocking I/O 모델을 사용한다.
자바스크립트는 단일 스레드 기반의 언어이기 때문에, 한번에 하나의 작업만 진행한다.이떄 비동기 방식은 이벤트 루프를 이용해서 동시성을 지원한다. 자바스크립트 엔진은 단일 호출 스택을 사용하여 요청이 들어올 때마다 해당 요청을 순차적으로 호출 스택에 담아 처리한다. 이벤트 루프는 브라우저나 Node.js에서 지원되는 방식이다.
이벤트 루프에 관한 설명
Node.Js 공식문서
Philip Roberts: Help, I’m stuck in an event-loop.
이벤트 루프 시각적으로 확인하기

이벤트 루프는 호출 스택과 태스크 큐의 상태를 확인하며 호출 스택이 비어있을 경우, 태스크 큐의 작업을 호출스택으로 이동시킨다.
function run() {
console.log('동작');
}
console.log('시작');
setTimeout(run, 0);
console.log('끝');
이 경우 출력은 시작, 끝, 동작과 같은 형태로 나오게 된다. 우선 , 호출 스택에 main함수와 setTimeout함수가 쌓이게 된다. 이때, SetTimeout이 실행되면, run은 0초라는 정보와 함께, 태스크 큐로 이동하게 된다.
이때, 이벤트 루프가 상태를 파악하며, 호출 스택이 비워있을 때, 태스크 큐의 작업을 하나씩 호출 스택으로 이동시킨다.