자바스크립트를 실행하려면 자바스크립트 엔진이 필요!
브라우저에는 이미 자바스크립트 엔진이 있기 때문에 자바스크립트를 실행할 수 있음
JavaScript 엔진은 자바스크립트 코드를 실행하는 소프트웨어 구성 요소. 최초의 JavaScript 엔진은 단순한 interpreter였지만, 모든 관련 최신 엔진은 성능 향상을 위해 Just-in-Time 컴파일을 사용. JavaScript 엔진은 일반적으로 웹 브라우저 공급업체에서 개발하며 모든 주요 브라우저에 하나가 있음
컴퓨터 프로세서는 오직 0과 1만 이해할 수 있기 때문에 우리가 작성한 소스 코드를 머신 코드로 변환해 줘야 함. 이 변환 과정은 컴파일과 인터프리터를 통해 일어남
High Level Language를 한 줄씩 번역하고 실행
High Level Language를 한번에 기계어로 변환하여 실행
interpreter는 코드를 한줄 한줄 해석하고 실행하기 때문에 매우 느림. 따라서 더 나은 퍼포먼스를 위해 JIT 컴파일 사용
JIT compilation은 ahead-of-time compilation(AOT)와 interpretation 두 가지 방식의 결합
브라우저 | 자바스크립트 엔진 |
---|---|
Chrome | V8 |
Firefox | SpiderMonkey |
Safari | JavascriptCore |
Internet Explorer | Chakra |
Node.js에서 module은 '필요한 함수들의 집합'
사용하고자 하는 모든 기능을 처음부터 다 만들어서 사용할 수는 없음
다른 사람이 이미 만들어 놓은 모듈을 사용하거나 노드 JS에서 제공해주는 많은 모듈을 사용
const module = require("module_name")
Node.js에서 기본으로 제공하는 모듈
- http: 서버를 생성하기 위한 클래스, 메소드, 이벤트를 포함
- url: URL 확인 및 구문 분석을 위한 메소드 포함
- querystring: 쿼리 문자열을 처리하는 메소드 포함
- path: 파일 경로를 처리하는 메소드 포함
- fs: 파일 I/O 작업을 위한 클래스, 메소드, 이벤트 포함
- util: 프로그래머에게 유용한 유틸리티 기능이 포함
Node.js 애플리케이션에 사용자가 로컬로 생성한 모듈
Node.js 커뮤니티에서 사용할 수 있도록 패키지로 만들어 NPM을 통해 배포할 수 도 있음
다른 사람이 만든 모듈을 NPM을 통해 가져와 사용할 수 있음
module.exports로 내보내고 requrie로 가져오는 것은 CommonJS
이 CommonJS는 Node.js에서 기본 모듈로 사용되고 있음
ECMAScript는 export, import를 이용해서 모듈을 내보내고 가져오는 Syntax 사용
모듈에서 다른 모듈을 가져올 때 (load할 때) ECMAScript를 사용하든 CommonJS를 사용하든 해당 모듈을 캐싱함
따라서 한번 가져오면 다음에 다시 load할 필요없음
package-lock.json이 생성되는 시점의 의존성 트리(node_modules)에 대한 정보를 가지고 있는 파일
audit 명령은 프로젝트에 구성된 종속성에 대한 설명을 기본 레지스트리에 제출하고 알려진 취약성에 대한 보고서를 요청. 취약점이 발견되면 적절한 교정도 해줌. fix 인수가 제공되면 수정사항이 패키지 트리에 적용됨
Yarn은 페이스북에서 만든 자바스크립트 패키지 매니저
원래는 npm만을 이용해서 패키지 관리를 했지만 Facebook에서 npm의 단점들(보안 및 성능)에 대응하기 위해 yarn을 개발하게 됨
Yarn은 npm보다 속도와 보안에서 더 향상된 성능을 가짐
npm은 패키지들을 설치할 때 설치하는 패키지를 다 설치하고 난 후에 다른 패키지를 순차적으로 실행. yarn은 병렬로 패키지를 설치하기 때문에 더 빠르게 설치할 수 있음
npm으로 패키지를 설치하면 package-lock.json 파일을 생성하는 것처럼 yarn으로 패키지를 설치하면 yarn.lock 파일을 생성하게 됨
package-lock.json과 마찬가지로 yarn.lock에도 최초 패키지 추가 시에 설치된 버전들이 들어 있음
yarn.lock 파일이 있으면 레지스트리에 패키지의 더 최신 버전이 있어서 yarn install로 패키지를 설치할때 yarn.lock에 있는 버전을 사용하므로 패키지 버전 문제를 최소화할 수 있음
yarn은 패키지를 다운로드하는 동안 백그라운드 프로세스로 보안 검사를 수행. 패키지 라이센스 정보를 사용하여 악성 스크립트를 다운로드하거나 종속성 충돌을 일으키지 않도록 함