LearningJavaScript

node.js 그리고 설치방법

jyshimmy 2020. 8. 31. 16:26

Node.js

노드(Node.js)는 크롬 V8엔진으로 만들어진 JavaScript 런타임이다. (nodejs.org/en/)

여기서 V8은 자바스크립트 언어를 기계어(실제 컴퓨터가 이해할 수 있는 언어)로 컴파일해주는 엔진이다.

Node.js를 소개하는 문구 중에 이벤트 기반의 논블로킹 I/O모델이라고도 한다. 여기서 이벤트는 브라우저에서 유저의 버튼 클릭이나 네트워크에 리소스를 요청(fetch등) 하는 것 등을 말한다.

2020/09/22 - [LearningJavaScript] - blocking vs. non-blocking (in terms of Node.js)

Runtime

Runtime(런타임)에서 런타임이란 프로그래밍 언어(e.g. javascript)가 구동되는 환경 또는 프로그램을 말한다.

즉 어떤 프로그래밍 언어가 동작할 수 있는, 쉽게 말해 내가 작성한 코드가 실행될 수 있는 프로그램을 말한다.

 

자바스크립트의 대표적인 런타임은 브라우저가 있다. "HTML에서 <script>태그 내에" JS 코드를 작성한다면, 코드는 브라우저에서 동작할 수 있게 된다.

node.js는 서버 측 환경에서 실행되는 JavaScript의 또다른, 브라우저보다는 새로운 런타임이다. node <file_name>명령어를 "터미널에" 입력하면 node.js라는 환경에서 실행된다.

 

 

NVM (Node Version Manager) 

node.js의 다양한 버전을 손쉽게 옮겨 다닐 수 있게 도와주는 프로그램이다.

만약 node.js가 업데이트되어 새로운 버전이 나왔다면, 우리는 기존의 node의 버전을 업데이트 할 것이다. 하지만, 코드가 두 버전에서 돌아가는지 확인하기 위해, 다시 이전 버전으로 가고 싶을 때, 업데이트된 버전을 지우고 다시 이전 버전을 설치해서 작업을 해야하는 번거로움을 NVM이 해결해준다. 

설치방법 (terminal에서 설치)

1. NVM 설치

아래 명령어를 % 뒤의 내용부터 터미널에 입력한다.

 

% touch ~/.bash_profile

% curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

 

설치 성공여부를 확인해본다. 아래 내용을 입력했을 때, 버전이 잘 나온다면 성공!

 

% nvm --version

 

2. node.js설치

설치한 nvm을 이용해 node.js를 설치 할 수 있다.

 

% nvm install 12.18.3

 

그리고 버전 확인을 통해 성공적으로 설치되었는지 확인해본다.

 

% node -v

 

3. 다른 node version으로 변경하여 사용

 

현재 설치된 node version확인하는 방법

% nvm ls

 

새로운 버전을 설치

% nvm install 10.13.0

 

다른 node version으로 변경하는 명령어

% nvm use 12.13.0

 

package.json과 NPM (Node Package Manager)

Node.js를 사용하는 프로젝트에는 package.json파일이 있어야한다는게 general rule이다.

package.json파일은 항상 JSON format(객체 모양)을 가진다. package.json파일에는 다른 000과 함께 프로젝트의 "의존성"을 담당하는 dependencies와 devDependencies가 있다.

 

둘의 차이는 함수 실행에 필요한 모듈들은 dependencies에 있고, 실행과 "개발"에 필요한 모듈은 devDependencies에 있다는 점이다. package.json에서 이 둘만 여러 개의 키-값 쌍을 갖고 있는 객체라는 점이다.

 

좀 더 구체적으로 말하면, dependencies는 "프로젝트"가 돌아가기 위해 필요한 모듈들을 나타내고, devDependencies는 프로젝트를 "개발하는 환경"에서 필요한 모듈을 나타낸다. mocha와 같은 testing tool, 즉, 함수 실행이 목적이 아닌, 프로젝트 "개발"에 필요한 함수를 실행하기 위한 테스트 관련 모듈이 여기에 해당된다.

 

The semantic difference here is that dependencies are for use in production - whatever that would entail for your project. On the other hand, devDependencies are a collection of the dependencies that are used in development of your application - the modules that you use to build it, but don't need to use when it's running. This could include things like testing tools, a local server to speed up your development, and more.

 

NPM (Node Package Manager)은 package.json에서 해당 프로젝트에 필요하다고 말하는 모듈을 다운로드 할 수 있는 모듈 (앱)스토어같은 곳이다. 모듈은 결론적으로 "코드"인데, 코딩을 잘 하는 사람들이 미리 만들어놓은 (복잡하지만) 프로젝트에 자주 사용되고 특정 기능을 가진 "검증된" 코드들을 모아놓은 집합소와도 같다. 

 

terminal에서 npm install 명령어를 입력하고 필요한 모듈을 다운 받으면, 새로 생긴 node_modules 디렉토리안에 다운 받은 모듈이 들어가 있는걸 확인 할 수 있다.

 

Scripts

npm으로 실행시킬 수 있는 명령어와 그 명령어가 어떤 동작을 해야하는지 정의한다.

 

예)

scripts안에 있는 "test": "node test.js"는 test란 명령어가 "test.js 파일을 node에서 실행시킨다"고 정의하고 있다.

 

"scripts": {
  "start": "node app.js"
  "test": "node test.js"
}

 

 

스프린트에서는 왜 npm run test:ha 로 썼는지!!!

 

my guess => scripts에  run test로 돼있었다??