Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임이다.
즉, 자바스크립트를 기계어로 컴파일 해주는 엔진으로 빌드된 자바스크립트가 구동중인 환경이다.
node.js는 이벤트 기반의 논블로킹 I/O 모델이다.
이벤트란?
버튼의 클릭이나 네트워크 리소스를 요청 하는 것 등을 이벤트라 한다.
블로킹이란?
다음 함수의 실행이 현재 함수의 종료 이후에 이루어 지는 것.
논블로킹이란?
다음 함수의 실행이 현재 함수의 종료를 기다리지 않는 것.
I/O 모델이란?
input을 주면 output을 반환하는 모델
따라서, 이벤트 기반의 논블로킹 I/O 모델이란?
이벤트가 논블로킹으로 이루어지는 I/O 모델이다.
즉, node.js란?
JavaScript를 컴파일 하여 구동하고, 이벤트 기반의 논블로킹 I/O 모델로 속도가 빠르다.
별로 설치하지 않아도 node.js상에서 사용할 수 있는 모듈이 있다.
node와 함께 번들링 되어있는 모듈을 require("")
방식으로 사용.
const fs = require('fs')
const http = require('http')
fs.readFile('./something.json',(err,data)=>{
console.log(data);
})
http.get('http://localhost:5000/api',(res)=>{
console.log(res)
})
하나의 프로그램은 다양한 모듈들이 합쳐져서 만들어진다.
"바퀴를 재발명 하지마라"라는 말이 있다.
즉, 모듈을 직접 만들어서 사용하지 않는데, 이는 프로그램을 개발할 때 마다 모듈을 만든다면 개발시간이 많이 걸리고, 모듈의 신뢰성이 낮기 때문에 프로그램 오류가 발생하기 쉽다.
그래서 다른 검증된 모듈을 끌어다가 프로그램 개발에 사용한다.
이러한 모듈을 node.js에서는 npm 모듈이라 부르며, 이에 대한 정보를 담아둔 곳이 package.json이다.
node.js환경에서 외부 라이브러리를 다운로드 받는 여러 방법이 있는데, 그 중 대표적인 방법이 npm을 활용하는이다. npm은 NodePackageManager으로 일종의 앱스토어 같은 역할을 한다. 즉, 필요한 모듈을 다운로드 할 수 있는 모듈스토어이다.
package.json
에는 프로젝트에 관한 정보, 프로그램의 실행 및 테스트 방법, 프로젝트에 사용된 모듈리스트의 정보가 담겨있다.
실제 모듈은 모듈리스트를 바탕으로 node_modules
라는 디렉토리에 저장되어 있다.
따라서 프로젝트 코드를 넘겨줄때, 모듈까지 모두 넘겨줄 필요없이 package.json
파일만 넘겨주고 필요한 모듈들은 npm를 사용해 직접 다운로드를 하면 된다.
package.json
안에 있는 내용을 살펴보면 먼저 dependency
항목을 볼 수 있다. dependencies
와 devDependencies
가 있는데, dependencies
는 해당 프로젝트가 실행 하기 위해 반드시 필요한 모듈의 항목이 적혀있다.
devDependencies
는 실행과 관계는 없지만 프로젝트 개발 환경에 필요한 모듈의 항목이 적혀있다.
npm install
을 사용하면 npm에 있는 모듈을 설치할 수 있는데,
—-save
옵션과 함께 사용하면 설치와 동시에 dependencies 항목에 추가된다. 생략도 가능하다.
$ npm install react --save
또는 $ npm install react
—-save-dev
를 함께 사용하면 설치와 동시에 자동으로 devDependencies 항목에 추가된다.
$ npm install nodemon --save-dev
package.json에 모듈 목록을 기술하는 이유는
보통 프로젝트는 혼자 개발하는 경우보다는 다양한 사람들과 협업으로 개발한다.
다른 사람에게 프로젝트를 넘길때, 어떤 모듈을 사용했는지 알려줘야 원할한 협업이 진행된다.
이러한 역할을 하는 것이 package.json이다.