
1. npm이란?
npm은 node package manager를 의미한다.
npm은 이렇게 두 가지 역할로 나뉘어져 있다.

npm은 오픈 소스 Node.js 프로젝트 게시를 위한 오프라인 리포지토리(저장소)이다.
이 말을 풀어서 설명하면 이러하다.
애플리케이션에 어떠한 package가 필요할 경우,
npm install package-name을 통하여 package를 설치할 수 있다.
그때, 이 package(npm 레지스트리 모듈들)를 가져오는 곳, 즉 저장되어 있는 곳을 npm이라고 한다.
그리고 또한,
npm install, npm run start 등... npm을 사용해서 원하는 작업을 처리를 해준다.
package 설치, 버전 관리 및 종속성 관리를 지원하는 해당 저장소와 상호작용하기 위한 명령줄 유틸리티이다.
- npm package 설치하기
npm init -y 명령어를 사용하면 package.json 파일을 생성할 수 있다.
그리고 npm install package-name 명령어를 사용하면 원하는 package를 설치할 수 있다.
ex: npm install axios

그리고 이렇게 설치된 package는 node.js에서 require을 통하여 가져다 사용할 수 있다.
const axios = require("axios");
const axios = require("axios");
axios
.get("https://naver.com")
.then((res) => console.log(res))
.catch((err) => console.log(err));
- node_module 살펴보기
node_module 폴더에는 package.json에 있는 module 뿐만 아니라,
package.json에 있는 module이 의존하고 있는 module 전부를 포함하고 있다.
보면 axios package만 설치되어 있는 package.json과는 달리,
node_modules 폴더 안에는 굉장히 많은 package들이 들어 있는 것을 볼 수 있다.
그 이유는, axios가 의존하고 있는 모든 package들까지 node_modules 안에 들어 있기 때문이다.



- Semantic Versioning
아래 보는 것과 같이 node package들의 버전은 세 자리로 되어 있다.
이는 세 자리가 모두 의미가 있다는 뜻의 Semantic Versioning이라고 하며
줄여서 SemVer이라고 한다.


Semantic Versioning은 세 가지로 나뉘어져 있다.
1. 호환되지 않는 API 변경시 MAJOR 버전
2. 이전 버전과 호환되는 방식으로 기능을 추가하는 경우의 MINOR 버전
3. 이전 버전과 호환되는 버그 수정시 PATCH 버전
^1.15.0 버전을 기준으로 보면 1이 MAJOR, 15가 MINOR, 0이 PATCH 버전이다.
또한, 표시하는 방법은 총 두 가지가 있다.
틸트(~) 방식과 캐럿(^) 방식이다.
틸트(~) | 캐럿(^) |
patch 버전까지만 설치 또는 업데이트 한다. | minor 버전까지만 설치 또는 업데이트 한다. |
현재 지정한 버전의 마지막 자리 내의 범위에서만 자동으로 업데이트 한다. | Node.js module이 Semantic Versioning의 규약을 따른다는 것을 신뢰한다는 가정 하에서 동작하며, 그러기에 MINOR, PATCH 버전은 하위 호환성이 보장되므로 그 내에서는 자동으로 업데이트 한다. |
~0.0.1 : >=0.0.1 < 0.1.0 ~0.1.1 : >=0.1.1 < 0.2.0 ~0.1 : >=0.1.0 <0.2.0 ~0 : >= 0.0 <1.0 |
^1.0.5 : >=1.0.5 <2.0 ^1.0 : >=1.0.0 <2.0 ^1 : >= 1.0.0 < 2.0 but, 버전이 1.0.0 미만일 경우에는 예외사항. 테스트 버전은 버전 하나만 바뀌어도 굉장히 많은 것들이 바뀌기 때문에 patch 버전까지만 설치 또는 업데이트 한다. ^0.1.4 : >=0.1.4 <0.2.0 ^0.1 : >= 0.1.0 < 0.2.0 ^0.0.1 : == 0.0.1 |
- package-lock.json
package-lock.json은 파일이 생성되는 시점에 node-modules에 관한 정보를 가지고 있다.
소스 리퍼지토리에(github) 커밋하기 위한 것이며 다양한 용도로 사용된다.

또한, 팀원, 배포 및 지속적 통합이 정확히 동일한 종속성을 설치하도록 트리의 단일 표현을 설명한다.
이 말을 풀어서 설명하면,
lodash라는 package를 설치를 하고 버전이 "^1.1.0" 이렇게 되어 있으면
1.9.0이 설치가 될 수도 있고, 1.2.0이 설치가 될 수도 있다.
이로 인하여 같은 프로젝트를 사용 중인 팀원들끼리 각각 다른 버전이 설치가 되어 충돌이 일어날 수도 있다.
package-lock.json 파일은 이를 방지해줄 수 있다.
내가 현재 사용하고 있는 package의 확실한 버전이 담겨 있어
이 프로젝트를 가져가서 다른 사람이 package 설치를 할 경우
범위로서 설치하는 것이 아닌, 정확한 버전을 설치하게 되는 것이다.

- npm audit
프로젝트에 구성된 종속성에 대한 설명을 기본 레지스트리에 제출하고 알려진 취약성에 대한 보고서를 요청한다.
취약점이 발견되면 영향과 적절한 교정이 계산된다.
fix 인수가 제공되면 수정 사항이 package 트리에 적용된다.

axios 0.20.0 버전을 설치하면 보안이 취약하다는 것을 알려준다.
npm audit fix --force를 통하여 이 모든 이슈를 해결할 수 있다고 한다.

먼저, npm audit 명령어를 입력해보면
어떤 module에서 현재 에러가 발생한 것이며, 취약점이 얼마나 심각한지, 어떤 취약점이 있는지를 알려준다.
그리고 마지막에는 위와 마찬가지로 npm audit fix --force 명령어를 통하여
이 문제를 해결할 수 있다고 나와 있다.


npm audit fix --force 명령어를 입력하면
axios가 1.7.9 버전으로 수정되면서 취약점이 사라진다.
- npm install -g
package를 전역(global)으로 설치하려면 -g flag를 사용하면 된다.
전역으로 설치된 package는 디렉터리(파일)에 관계없이 작동한다.
로컬로 package를 설치할 경우에는 그 프로젝트 내에서만 작동하게 된다.
전역으로 설치를 하면, 이 소스 코드를 깃허브에 올린 다음, 다른 사람이 사용을 할 때
그 사람 역시 전역으로 설치가 되어 있어야 package를 사용할 수 있기 때문에
전역으로 설치하는 것보다는 로컬로 설치를 하는 것이 더 낫다.
- 전역 설치 : npm install -g nodemon
- 로컬 설치 : npm install --save-dev nodemon
로컬에서 설치를 할 경우,
nodemon은 개발 환경에서만 사용하기 때문에 --save-dev 옵션을 넣어서 설치를 해야 한다.
아니면 npm install -D nodemon 이렇게 설치를 해주면 된다.

'Backend > Node.js' 카테고리의 다른 글
Node.js로 웹 서버 만들기 (1) | 2024.12.15 |
---|---|
Index.js 파일 (0) | 2024.12.15 |
Module 캐싱 (0) | 2024.12.14 |
CommonJS와 ECMAScript module의 차이 (0) | 2024.12.14 |
module 생성하기 (0) | 2024.12.14 |
github : https://github.com/dnjfht
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!