Dev/Nodejs

Node.js 와 이벤트 루프

싯벨트 2024. 4. 3. 00:02
728x90

노드의 정의

Node.js 는 Chrome v8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이라고 정의됩니다.

이때 런타임이란 특정 언어의 실행기로, 특정 언어로 만든 프로그램들을 실행할 수 있는 환경입니다.

노드의 기반이 되는 라이브러리는 V8과 libuv이며, 이벤트루프는 libuv의 특징 중 하나인 이벤트 기반과 연결됩니다.

이벤트 기반

이벤트 기반이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 말합니다.

발생한 이벤트를 처리해서 이벤트가 없는 상황에서는 다음 이벤트 발생까지 대기하고, 새롭게 발생한 이벤트를 처리합니다.

이벤트 루프

실행될 이벤트, 즉 콜백함수들을 어떤 순서로 호출할지 관리하는 개념입니다.

호출스택(call stack)에 실행할 함수의 실행컨텍스트를 쌓습니다.

코드를 순차적으로 진행하되, 콜백함수는 백그라운드라고 불리는 Node API (브라우저에서는 Web API)에 넘기고 완료되면 태스크 큐에 쌓입니다. 태스크큐에서 대기하는 콜백함수는 콜스택에서 맨아래 위치한 전역 컨텍스트(global context)까지 사라진 뒤 콜스택으로 옮겨진 뒤 실행됩니다.

이때, 태스크큐는 두 가지 종류가 있으며 높은 우선순위를 갖는 큐마이크로태스크큐라고 하여 이벤트루프가 우선적으로 큐를 확인하여 콜스택으로 가져옵니다. 마이크로 태스크큐에 쌓이는 이벤트에는 대표적으로 promise.then과 process.nextTick 이 있습니다.

참조문서