본문 바로가기

WEB개념

[Node] Node.js , npm, pnpm, yarn

 

Node.js?

 

Node.js는 JavaScript를 사용하여 서버 사이드 애플리케이션을 개발할 수 있는 런타임 환경입니다. 주로 비동기 이벤트 기반의 서버 사이드 프로그래밍을 위해 설계되었으며, 구글의 V8 JavaScript 엔진을 기반으로 합니다. 다음은 Node.js의 주요 특징과 용도입니다

 

노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있으며, 서버를 실행하는 데 제일 많이 사용된다.

 

  • JavaScript를 서버에서도 사용할 수 있도록 만든 프로그램이다.
  • V8이라는 JavaScript 엔진 위에서 동작하는 자바스크립트 런타임(환경)이다.
  • Node.js는 서버사이트 스크립트 언어가 아니다. 프로그램(환경)이다.
  • 웹서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어졌다.

 

장점

 

1. 비동기 I/O: Node.js는 비동기 I/O 처리를 통해 동시성을 지원합니다. 이는 많은 클라이언트의 요청을 동시에 처리하고, 입출력 작업을 효율적으로 수행할 수 있도록 도와줍니다.

Node.js는 싱글스레드, 논 블로킹 모델로 싱글 스레드가 혼자서 일을 처리하지만 들어오는 요청 순서가 아닌 논 블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다.

 

일반서버

손님이 4명 있다고 생각해봅시다. 1번째 손님은 티켓 1장을 요구해서 서버가 티켓 1장을 줬습니다.
2번째 손님은 1번째 손님이 가기를 기다렸다가 차례가 되면 예매를 합니다. 1장을 요구하고 서버에게 1장을 받고 갑니다.
그런데 3번째 손님이 200장을 예매합니다. 그러면 서버는 200장의 티켓을 준비하고, 3번째 손님은 기다립니다. 근데 문제는 4번째 손님도 3번째 손님이 마무리될 때까지 기다려야한다는 겁니다.

 

 

Node.js로 개발한 서버인 경우

모든 손님의 요청을 한번에 받습니다. 그리고 순서와 상관없이 처리 속도가 빠른 것부터 결과를 가져다줍니다. 처리 속도가 빠른 것부터 처리하기 때문에 요청을 놓치지 않고, 4번째 손님이 굳이 3번째 손님의 요청이 끝날 때까지 기다리는 문제도 사라졌습니다.
이게 Node.js의 Non-blocking I/O의 개념입니다.




2. 단일 쓰레드 이벤트 루프: Node.js는 이벤트 기반의 단일 쓰레드 모델을 채택하고 있습니다. 이를 통해 서버가 더 많은 동시 연결을 처리할 수 있습니다.

  • 노드는 V8과 더불어 libuv라는 라이브러리를 사용한다.
  • libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있다

 

 

3. JavaScript 사용: Node.js는 JavaScript 언어를 사용하여 서버 사이드 애플리케이션을 개발할 수 있도록 합니다. 이는 클라이언트 사이드와 서버 사이드 간에 일관성 있는 개발 환경을 제공합니다.
( V8 엔진은 다른 자바스크립트 엔진과 달리 매우 빨라 라이언 달(Ryan Dahl)은 2009년 V8 엔진 기반의 노드 프로젝트를 시작 )

 


4. 패키지 매니저 NPM: Node.js는 NPM(Node Package Manager)을 통해 다양한 라이브러리와 모듈을 손쉽게 설치하고 관리할 수 있습니다.

NPM(노드 패키지 매니저, Node Package Manager)은 Node.js 패키지를 설치하고 관리하는 도구입니다. Node.js 애플리케이션을 개발할 때 필요한 모듈, 라이브러리, 패키지를 쉽게 설치하고 관리할 수 있도록 도와주는 패키지 매니저입니다. NPM은 Node.js 설치와 함께 자동으로 설치되며, 사용자가 직접 패키지를 설치하고 관리할 수 있습니다.


5. 웹 서버: 주로 웹 서버를 만들기 위해 사용되며, Express와 같은 프레임워크를 사용하면 빠르게 웹 애플리케이션을 개발할 수 있습니다.

 

 

 

 

 

NPM (Node Package Manger)

 : npm이란 노드 패키지 매니저(Node Package Manger)를 의미하며 자바스크립트 프로그래밍 언어를 위한 패키지 관리자이다.  자바스크립트 런타임 환경 Node.js의 기본 패키지 관리자이다. 또한 Node.js를 설치하면 자동으로 설치된다.

 

npm을 사용하면 전 세계의 개발자들이 자바스크립트로 만든 다양한 패키지를 npm 온라인 데이터베이스에 올리고 사용자는 그것을 npm과 같은 패키지 관리자를 통해 설치 및 삭제가 가능하다. 또한 CLI를 통해서 패키지 설치, 삭제 뿐만 아니라 패키지의 버전 관리, 의존성 관리 역시 편하게 할 수 있다. 

 

>  ied, pnpm, npmd, Yarn이 포함된다. 

 

 

 

NPM 명령어, 옵션

 

1. 지역(local) 설치 (default)

프로젝트의 루트 디렉토리에 node_modules 디렉토리가 자동 생성되고 그 안에 패키지가 설치된다. 지역 설치된 패키지는 해당 프로젝트 내에서만 사용할 수 있다.

 

2. 전역(global) 설치

npm install 뒤에 -g 옵션을 붙여주면 패키지가 전역 공간에 설치된다. 전역 설치된 패키지는 모든 프로젝트에서 참조할 수 있다.

전역으로 설치하게 되면 몇 가지 문제들이 발생한다.

  • 모듈의 업데이트 여부를 확인하기 어렵다.
  • 업데이트 시 변동사항이 생기면 해당 패키지를 사용하고 있는 다른 프로젝트에도 영향을 끼칠 수 있다.
  • create-react-app 같이 모듈 변경사항이 자주 생기는 보일러플레이트에는 치명적이다. (매번 최신 버전을 설치해줘야 하기 때문)
# 지역 설치
npm install <package-name>

# 전역 설치
npm install -g <package-name>

 

 

  • -P,  –save-prod : default 설정. package.json 의 dependencies 에 패키지를 등록한다.
  • -D,  –save-dev : package.json 의 devDependencies 에 패키지를 등록한다.
  • -O,  –save-optional : pacakge.json 의 optionalDependencies 에 패키지를 등록한다.
  • –no-save : dependencies 에 패키지를 등록하지 않는다.

 

npm 명령어

더보기
npm init package.json 생성  
npm help 명령어를 모를 때, 역할, 옵션 등을 알 수 있다.  
npm 명령어 help
npm install help
해당 명령어에 대해 알고 싶을 때  
npm install
npm i
npm 모듈 로컬 설치 --save or -S : dependencies에 추가
--save-dev or -D : devDependencies에 추가
-g : global 패키지에 추가
npm uninstall moduleName npm 모듈 삭제  
npm update npm 모듈 업데이트  
npm dedupe 중복된 모듈 정리  
npm root node_modules의 위치를 알려준다.  
npm oudated 오래된 패키지의 존재 유무를 알려준다.  
npm ls 패키지를 조회한다. npm ls 패키지명 해당 패키지의 유무, 어떤 패키지의 dependencies인지 알려준다.
npm ll 패키지의 더 자세한 정보를 알려준다.  
npm cache npm내의 cache 목록 확인 캐시(Cache)
npm cache clean --force 캐시 삭제 캐시(Cache)
npm rebuild npm 재설치 에러가 발생했을 때 주로 npm cache clean을 해주고
npm -v
node -v
npm -version
버전 확인  
npm install rimraf rimraf 설치 node_modules 폴더 삭제 전
rimraf node_modules node_modules 폴더 삭제 node_modules 폴더 삭제 실행
npm prune package.json 내에 정의 되지 않은 패키지 삭제  
npm start package.json의 scripts에 있는 start 명령어를 실행 따로 설정하지 않았다면 node server.js가 실행
npm stop 실행중인 npm을 중지  
npm restart stop후에 다시 start  
npm run 그 이외의 scripts 실행 npm run 명령어
npm config npm의 설정을 조작 npm config list : 현재 설정 조회
npm set : 이름 값
npm get 이름 : 이름으로 속성을 설정하거나 조회

 

 

pnpm, yarn install 명렁어

 

pnpm install  {option}
  • --save, -S: 설치한 패키지를 dependencies에 추가합니다.
  • --save-dev, -D: 설치한 패키지를 devDependencies에 추가합니다.
  • --global, -g: 전역으로 패키지를 설치합니다.
  • --production: 개발 의존성을 설치하지 않고 프로덕션 의존성만 설치합니다.
  • --no-lockfile: pnpm-lock.yaml 파일을 생성하지 않습니다.
  • --frozen-lockfile: pnpm-lock.yaml 파일이 존재하는 경우 변경하지 않습니다.
  • --prefer-offline: 인터넷 연결이 없는 환경에서 패키지 설치를 시도할 때 캐시를 사용합니다.
  • --ignore-scripts: 패키지 설치 후 실행되는 스크립트를 무시합니다.

 

 

yarn install  {option}
  • --production: 개발 의존성을 설치하지 않고 프로덕션 의존성만 설치합니다.
  • --force: 패키지 재설치를 강제합니다.
  • --ignore-scripts: 패키지 설치 후 실행되는 스크립트를 무시합니다.
  • --frozen-lockfile: yarn.lock 파일이 존재하는 경우 변경하지 않습니다.
  • --ignore-engines: 엔진(버전) 체크를 무시하고 설치합니다.
  • --pure-lockfile: yarn.lock 파일의 내용을 업데이트하지 않고 사용합니다.
  • --non-interactive: 사용자 입력 없이 설치를 진행합니다.

 

 

패키지잠금 ( `package-lock.json  yarn.lock,   pnpm-lock.yaml ,  bun.lock` )

 

 동일한 package.json 파일을 사용해도 시간과 장소에 따라서 서로 다른 버전의 패키지가 설치되는 문제는 패키지 잠금을 통해 해결할 수 있습니다. yarn이나 비교적 최근에 릴리즈된 npm을 사용해서 프로젝트에 새로운 패키지를 설치하면 package.json 파일에 해당 패키지가 등록될 뿐만 아니라 패키지 잠금 파일이 생성되는 것을 보실 수 있으실 겁니다. package-lock.jsonyarn.lockpnpm-lock.yamlbun.lockb와 같은 패키지 잠금 파일에는 해당 프로젝트에서 각 패키지가 최초 설치될 당시에 정확히 어떤 버전이었는지가 기록됩니다.

 

 

 

 

 

 

 

 


 

https://velog.io/@remon/%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EB%B3%B8-%EC%A7%80%EC%8B%9D-Node.js%EB%9E%80


https://cloud-allstudy.tistory.com/958

https://velog.io/@liankim/Nodejs-npm-%EB%AA%85%EB%A0%B9%EC%96%B4

https://www.daleseo.com/js-package-locks/