자바스크립트 엔진인 v8은 Memory와 CallStack으로 이루어져 있다.
여기서 Memory는 자바스크립트 파일이 컴파일타임에서 분해되면서 변수등이 저장되는 메모리 공간을 뜻한다.
callstack은 실행 컨텍스트를 단위별로 하여 해당 메모리에 저장된 내용들을 기반으로 순서대로 호출 스텍이 쌓이는 자료구조이다.
이때의 작업은 동기적 형태로, 한 작업이 진행중이면 다른 작업이 진행될 수 없다.
비동기적 작업은 libuv library에서 이벤트 기반으로 처리된다
library라는 이름에 걸맞게, 이 장소에는 마치 브라우저의 webAPI와 같이 비동기적으로 처리되야 하는 이벤트들이 등록되어 있는 장소다
자바스크립트 파일이 읽히면서 이 라이브러리에 등록된 비동기 작업이 콜스텍에 호출되어 들어가 있다면,
이를 이벤트처럼 인식하여 캐치한 후 대기열에 집어넣는데 이때 대기열이 두가지가 있다.
그 후 대기열에 등록된 콜백작업들의 평가가 끝마쳐지면, 이것을 자바스크립트의 콜스텍이 비워질때마다 집어넣으며 실행한다
Browser | Node.js |
---|---|
DOM 조작을 위한 API 제공 및 document, window 객체를 통한 브라우저 컨트롤 | File시스템 관련 API 제공(보안을 위해 브라우저는 제공되지 않음) |
최신 코드문법들에 대해 브라우저의 지원이 늦어지면 Babel을 통해 폴리필을 적용 | 필요에 따라 언제든지 Node.js의 버전을 바꿀 수 있음 |
모듈 시스템으로 ES 모듈을 사용함 (import, export) | 모듈 시스템으로 CommonJs를 사용함( package.json에서 type:"module"로 ES 모듈을 사용할 수도 있음) |