1) processor에서 JS코드를 실행하기 위해 Machine Code 변환이 필요하고 node에서는 interperter역할을 v8엔진이 담당한다.
2) JS 코드는 nodeJS위에서 실행되며, nodeJS는 V8과 Libuv 두개의 컴포넌트에서 실행된다. 결국 NodeJs는 JS코드와 V8엔진의 브릿지 역할을 한다.
3) V8엔진은 대체불가능한가?
4) Node는 어떻게 C++로 구성된 V8엔진과 JS의 브릿지 역할을 하는가?
참고 - Node 공식 github - readFileSync 폴더 주소
readFileSync함수에는 tryReadSync가 함수가 있고,
tryReadSync함수에 readSync함수가 있습니다.
readSync안에 binding.read가 있는데 이부분이 javascript와 c++의 브릿지 역할을 합니다.
c++로 된 Read를 보면,
참고 - NodeJS binding.read c++ 폴더 주소
readFileSync 실행 시 위 c++ 코드가 실행되며, 파란색으로된 부분이 readFile 실행, 빨간색인 부분이 readFileSync가 실행됩니다.
결론적으로 nodeJS가 JS와 c++를 어떻게 bridge하는지 보여주는 예로, process.binding은 JS와 c++ 바인딩 역할을 합니다.
5) 예외
일반적으로 JS => Node => v8 순서로 코드가 실행되지만, 때로는 위 사진처럼 JS는 바로 v8엔진에 요청하고 nodeJS가 이를 해석하기도 합니다.
참고