250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

[NPM] npm i (or npm install) vs npm ci (npm clean-install) 차이점은? 본문

[Snow-ball]프로그래밍(컴퓨터)/NPM

[NPM] npm i (or npm install) vs npm ci (npm clean-install) 차이점은?

Snow-ball 2022. 11. 28. 17:25
반응형

npm i (npm install)

npm 은 Node.js 프로젝트의 기본 패키지 관리자이다. npm 을 사용하면 종속 항목을 쉽게 설치하고 업데이트 할 수 있다. 예를 들어 Vue.js 프레임워크와 같이 npmjs 에 나열된 종속성은 터미널에 복사하여 붙여넣을 수 있는 설치 명령도 표시한다.

npm ci (npm clean-install) 의 경우는 npm v6 부터 도입된 명령어이다.

 

npm install 명령어는 package.json 과 package-lock.json 과 연관이 있다.

package.json 은 우리가 설치하고자 하는 모듈에 대한 의존성 목록이 존재한다.

여기서 의존성 목록의 버전은 version range 를 따르고 있다. 

 

 

 

 

version range 로 인해 발생할 수 있는 이슈는 각자 서로 다른 node_modules를 생성할 수 있다는 것이다.

예를 들어, 하나의 프로젝트에 여러 명의 개발자가 협업을 할 경우를 보자.

각자의 로컬 환경에서 npm, node 버전 등이 서로 다를 수 있다.

이러한 상황에서 각자 npm install 을 실행한다면, 서로 다른 버전을 가지는 모듈을 가지는 경우가 생길 수 있다.

이러한 이슈는 로컬 환경뿐만 아니라 CI/CD 등 서로 다른 환경에 의해 발생할 수 있다.

 

그래서 package-lock.json 이 존재한다.

package-lock.json 은 version range 와는 다르게 정확하게 버전이 명시되어 있다.

 

 

 

위처럼 version range 가 아닌 정확하게 명시된 버전을 모두가 바라보게 된다면, 결국 모두 같은 버전의 의존성을 가지게 된다.

이러한 이유로 package-lock.json 을 같이 커밋해서 사용하고 있는 것이다.

 

 


 

공통점과 차이점..

 

npm i 와 npm ci 명령어들은 결과적으로 의존성 목록을 설치하는 것이다.

 

npm i 와 npm ci 의 공통점은 두 방식 모두 package-lock.json 을 먼저 확인하고 만약 존재하면 해당 Lockfile 을 이용해서 의존하고 있는 패키지 정보를 파악하고 node_modules 에 설치한다. 그리고 node_modules 나 package.json 에 변화가 생기면 package-lock.json 을 업데이트하여 의존 패키지 정보를 기록한다.

 

npm ci (npm clean-install) 은 package-lock.json 에 명시되어 있는 패키지 정보를 활용해서 node_modules 를 삭제하고 완전히 동일한 버전의 패키지들을 설치한다. 또한 package-lock.json 이 무조건 존재해야만하고, 없을 때는 에러가 발생한다. 

 

npm i (npm install) 은 package.json 을 읽어 의존성 목록을 만들고 package-lock.json 을 통해 설치할 의존성의 버전을 알려주는 것이다. npm install [패키지] 을 실행하면 package.json 에 의존성 목록에 추가될 것이고 package-lock.json 도 업데이트 될 것이다. 이것이 의미하는 것은 npm install 명령어는 package.json, package-lock.json 에 모두 쓰기 권한을 가지고 있다.

 

npm blog 에서 npm ci 의 장점중 하나는 삐른 설치 속도라고 한다. npm i 와 커맨드가 유사하나, npm i 를 사용하는 것보다 두배정도가 빠르며, 이를 통해 CI/CD 가 잦은 조직에서 중요한 성능 향상을 보여준다고 한다.

 

 


 

 

npm ci vs npm i - 어떤 것을 사용할 것인가?

npm v6를 사용할 경우 :

* npm install 은 새로 디펜던시를 설치할때, 또는 기존의 디펜던시를 업그레이드할 때 (ex : version1 > version2 업데이트)

* npm ci 는 지속적인 통합(Continuous Integration) 을 사용하거나, 또는 package-lock.json 을 수정 없이 디펜던시 설치를 원할때

 

npm v5 이하를 사용할 경우 :

* npm install 은 오직 디펜던시 설치와 업그레이드 할때 

* npm ci 를 사용하기 위해 최근의 버전으로 업그레이드를 추천한다. 이외에도 종속성 보안 취약점을 보다 쉽게 식별하고 수정할 수 있는 npm audit 명령어도 포함되어있다. 더욱이 디펜던시 설치시 npm v6가 더 빠르다.

 

 

 

 

referance

* CI 환경을 위한 npm ci - Npm ci for Continuous Integration - Kern yoo

* npm ci vs. npm install - Which Should You Use in Your Node.js Projects? - Ali Kamalizade

* [NPM] npm i 과 npm ci 차이점은? - by HandHand

* npm install vs npm ci :: 마이구미

 

 

반응형
Comments