본문 바로가기
관리자

Programming-[Backend]/Node.js & Server

Node.js / 기초 / NVM, NPM, package.json

728x90
반응형

 

1. Node.js는 Javascript의 런타임이다.

 

런타임이란 프로그래밍 언어가 구동되는 환경이다. 다시 말해, 어떤 프로그래밍 언어가 동작할 수 있는 프로그램 환경을 말한다.

 

Javascript는 웹브라우저라는 환경에서 작동되므로, javascript의 런타임은 웹브라우저이다.

node.js도 웹브라우저와 마찬가지로 javascript를 위한 런타임이다.

 

Node.js는 v8 엔진으로 만들어진 자바스크립트 런타임이다.

v8은 자바스크립트를 기계어로 컴파일 해주는 엔진이다. V8 엔진은 멀티스레딩을 지원하지 않으므로 Node.js도 싱글 스레드이다. 다만, 외부의 요청을 싱글 스레드로 받아와서 이벤트큐에 callback 방식으로 쌓아놓고, 순서대로 처리한다. 이벤트큐에 쌓인 태스크를 내부에서 멀티스레드 방식으로 콜백처리 하기때문에 많은 요청 처리가 가능하고, 순서대로 처리가 가능하다.

 

node.js는 이벤트 기반, 논블로킹 I/O 모델이다.

이벤트 : 유저의 클릭, 입력 등 이나 네트워크에 리소스를 요청하는 것 등을 말한다.

블로킹은 다음 함수의 실행이 현재 함수의 종료 이후에 이루어지는 것을 말하며, 논블로킹은 다음 함수의 실행이 현재 함수의 종료를 기다리지 않는 것을 의미한다. 동기/비동기와 동일한 의미라고 보면 될 것 같다.

즉, node.js는 사용자의 입력이나 요청을 비동기식으로 실행하므로 속도가 빠른 방식이다.

 

Node.js의 특징

비동기 방식의 이벤트 기반 처리를 하기 때문에 처리 속도가 빠르고 서버의 부하가 적다. 따라서 대용량의, 동시처리가 필요한 서비스에 많이 활용한다. 자바스크립트로 서버사이드의 코드까지 쉽게 작성이 가능하다.

 

하나의 로직에 많은 부하가 걸리는 서비스에는 활용이 어렵다. 높은 품질의 코드가 요구되거나 에러가 나면 안되는 경우 Nodejs 외 다른 환경을 사용하는 것이 좋다.

 

상세한 내용은 참조 2)


 

2. NVM(Node Version Manager)

 

NVM 이란?

nvm은 node의 버전을 관리해주는 프로그램이다.

 

nvm의 필요성을 예를 들어 설명하자면, 내가 만든 javascript 파일이 node 프로그램의 구버전에서는 작동이 되는데 신버전에서는 작동이 안된다면, node의 신버전에서 나의 파일을 작동시켜봐야 한다. 따라서 node의 버전을 업데이트 해줘야되는데, 이를 다시 구버전으로 돌려야 되는 경우가 생길 수 있다. 이렇게 node 프로그램의 버전을 옮겨다녀야 하는 불편함을 해소해주고, node의 버전들을 관리해주는 프로그램이 nvm 이다.

 

 

 

NVM을 통한 node 관리 명령어

nvm은 terminal을 통해 설치가 필요하다.

명령어는 다음과 같다.

 

1. nvm ls : 현재 설치된 node의 버전들을 보여준다.

$ nvm ls

 


 

2. nvm install version : 원하는 버전의 node를 설치해준다. ( ex. nvm install 10.21.0)

$ nvm install version

 


 

 

3. node use version : 원하는 버전의 node를 사용할 수 있게 설정해준다. (ex. nvm use 12.16.1)

$ nvm use version

 

 

 

 

node.js 설치

 

보통은 nvm과 node.js가 설치되어 있으므로 nvm --version을 통해 nvm이 설치되어 있는지(버전이 나오는지), nvm ls를 통해 node가 설치되어 있는지 확인하도록 한다.

 

 

nvm의 설치 명령어는 다음과 같다.

$ touch ~/.bash_profile
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

 


 

node의 설치 명령어, 버전확인 명령어는 다음과 같다.

$ nvm install version(ex.12.16.1)
$ node -v

 


 

3. NPM, package.json

 

 

 

NPM

NPM(Node Package Manager)은 개발을 위해 필요한 모듈들을 다운로드 받을 수 있는 곳이다.

마치 핸드폰에서 앱스토어의 역할을 한다고 이해하면 된다.

 

 

NPM 활용 예시

npm이 설치된 모듈들을 관리하고 활용하게 해주기 때문에, script 형태로 사용하여 html 문서에 넣어줘야 했던 것을 require 명령어를 통해 바로 불러올 수 있게 된다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

//without npm

<html>

  <head>

    <script src = "https://code.jquery.com/jquery.com/jquery-2.x-git.min.js"></script>

  </head>

  <body>

    <script>

      $('button').on('click',function () { ... } )

    </script>

  </body>

</html>

 

//with npm : jQuery 라는 모듈을 '$' 이라는 이름으로 불러온다

const $ = require('jquery')

 

$('button').on('click',function() {

  console.log('button clicked')

})

Colored by Color Scripter

cs

 

 

 

package.json

project에 대한 정보, 개발과 관련된 모듈 정보(모듈) 등이 포함되어 있는 명세이다.

프로그램을 실행할 때 다른 프로그램이 필요할 수도 있고, 다운로드가 필요한 모듈이 있을 수도 있다.

이러한 모든 내용들을 기술해놓은 것이 package.json 이다.

 

package.json 파일 예시. project name, script 등을 확인할 수 있다. 참조1)

 

 

package.json의 대표적인 항목

 

1. dependencies

이 프로그램을 실행시키기 위해 필요한 모듈과 그의 버전이 기술되어 있다.

 

2. devDependencies

프로그램 실행에 직접적인 영향은 없으나, 해당 프로그램을 프로젝트로 개발하는 환경에서 필요한 모듈들이 무엇인지가 적혀있다.

 

개발단계에서 작성된 패키지들을 package.json에 등록해주어야만 내가 수정한 파일을 다른 사람이 볼 수 있게 된다. 이에 필요한 옵션이 --save 옵션이고, devDependencies에 등록해주는 옵션이 -dev 옵션이다. 반드시 해당 옵션들을 포함하여 패키지들을 등록하여야 한다.

ex) $ npm install @bable/core --save-dev, $npm install --save react

 

3. scripts

npm으로 실행시킬 수 있는 명령어들이 정의되어 있다.

script 내에 있는 여러가지 명령어들은 다음의 명령어로 실행할 수 있다.

 

$ npm run 'script 이름'

또는

$ node 'script 이름'

으로도 해당 script의 실행이 가능하다.

 

예를들어, 위의 사진과 같이 script 들을 설정해놓고 터미널 창에 'npm start'라고 입력하면 package.json 파일에 작성된 환경설정에 맞춰서 script 문을 실행하게 된다.

 

 

 

 

npm 설치, 사용

 

npm install

만약 어떤 github에서 package를 다운로드 받고, 그 디렉토리 내부에 'package.json' 파일이 있다면,

터미널에서 그 디렉토리로 이동하여

$ npm install

npm install 명령어를 입력하면 해당 프로그램을 실행하는데 필요한 '모든' dependecies, devdependecies를 다운로드 받는다.

설치가 완료되면, 폴더 내에 package-lock.json 파일이 생성된다.

 

 

 

npm init

'npm init' 이라는 명령어를 사용하면 해당 폴더에서 npm을 사용할 수 있게 된다. package name, version, description, end-point 등을 묻게 되고 설정을 마치고 나면 'package.json'이라는 파일이 생성되게 된다.

 

package.json을 만들고, 파일에 console.log를 입력 후, "node '파일이름'" 으로 해당 파일을 실행시킬 수 있다.

package.json 파일의 script : start 항목에 "node 파일명"을 입력하고 'npm start'라고 입력하면 package.json에 입력한대로 파일이 실행되게 된다.

 

 

nodemon

nodemon은 프로그램 실행 시마다 node를 실행해줘야하는 불편함을 해소해주는 라이브러리다. nodemon을 한번 실행하면, 코드를 바꾸고 저장할 때마다 자동으로 실행되게 할 수 있어서 test가 간편하다. 사용을 위해 script의 start 항목에 "node 파일명"으로 입력된 부분을 "nodemon 파일명"으로 입력하면 된다.

 

 

 

node_modules

보통 모듈들의 '단순 명세'가 아니라 '실제 모듈'은 node_modules 라는 폴더에 포함되어 있다.

 

 


 

참조

 

1) Understanding the package.json file - Codementor

https://www.codementor.io/@ekunolaeasybuoy/understanding-the-package-json-file-13xfqsnohq

 

2) 준스파파의 IT 개발 이야기 -

[Node.js 1강]node js 란? 장점, 단점, 어떤 웹서비스에 사용해야할까?

junspapa-itdev.tistory.com/3

728x90
반응형

'Programming-[Backend] > Node.js & Server' 카테고리의 다른 글

nodejs / 모듈 / fs.readFile  (0) 2020.10.01
nodejs / 모듈 / node.js 모듈 기초  (0) 2020.10.01