npm install과 npm ci 명령어 알아보기

npm
npm install과 npm ci 명령어 알아보기

안녕하세요! 오늘은 npm 패키지를 설치할 때 많이 사용되는 두가지 명령어, npm installnpm ci란 무엇이고, 차이점은 무엇인지 알아보겠습니다.

1. npm install

npm install 명령어는 npm 패키지를 설치하기 위해서 가장 많이 사용되는 명령어입니다. 별칭 npm i를 사용해도 동일하게 작동합니다.


npm install을 사용할 수 있는 방법은 대표적으로 두가지가 있습니다.

첫번째는, npm install 명령어 뒤에 설치하려는 패키지명을 넣어서 곧바로 패키지를 설치하는 방법입니다. 프로젝트가 진행 중일때는 해당 방법으로 가장 많이 패키지를 설치하기도 합니다.

npm install react // react 패키지 설치

두번째는, package.json에 명시된 모든 패키지를 설치하려고 할때 인데요. 예를들어 React.js로 만들어진 프로젝트를 GitHub에서 clone 하고나서 에디터를 열면, 해당 프로젝트에서 사용되는 패키지들을 모두 다운로드 해야하는 경우가 생깁니다.

이때 npm install 명령어를 치면, 해당 명령어가 실행된 프로젝트의 package.json 파일에 명시된 모든 npm 패키지를 설치해줍니다. 내가 사용하려는 패키지 명과 버전이 package.json에 명시된 경우에는 이 방법을 많이 사용합니다.

npm install

1-1. package-lock.json

읽기 전에 패키지 버저닝 방법들인 틸드와 캐럿에 대해서 알고 계시면 좋습니다. https://yiyb-blog.vercel.app/posts/npm-tilde-carrot

만약 package.json 파일에 명시된 패키지가 틸드와 캐럿을 사용한 버저닝을 사용했을때 패키지를 로컬에서 설치할때마다 각기 다른 버전이 설치될 수 있는 문제가 있는데요. 특히 협업에서 이런 문제가 많이 발생합니다.

{
  "dependencies": {
    "next": "^12.2.0"
  }
}

위처럼 캐럿을 통해 명시된 버전이 있을때, A 개발자는 12.2.0, B 개발자는 12.2.1, C 개발자는 12.3.0 등 각기 다른 버전이 설치되어 예기치 않은 오류를 발생시킬 수 있습니다.


이처럼 버전이 다르게 설치되지 않도록 해주는 파일이 바로 package-lock.json 입니다. package-lock.json은 캐럿, 틸드 버저닝의 패키지를 설치할때, 범위 내에서 정확하게 어떤 버전의 패키지를 설치할지 명시해주는 역할을 합니다.


만약 package-lock.json을 소유한 프로젝트에서는 이제 모든 사람이 동일한 버전의 패키지를 설치하며, 위처럼 버전이 각기 다르게 설치되는 현상을 없앨 수 있습니다.

styled-components@^5.3.6:
  version "5.3.6" // ^5.3.6으로 지정된 버전은 5.3.6으로 설치

react@^17.0.2:
  version "17.0.2" // ^17.0.2으로 지정된 버전은 17.0.2으로 설치

npm, yarn, pnpm에서 사용할 수 있는 lock 파일명은 아래와 같습니다.

패키지 매니저lock 파일명
npmpackage-lock.json
yarnyarn.lock
pnpmpnpm-lock.yaml

2. npm ci

npm ciclean install의 줄임말로, npm install과 유사한 패키지 설치 명령어지만 조금의 차이가 있습니다.


npm cipackage-lock.json 파일을 필요로 하며 (없을경우 오류 발생) package.json과 버전이 매칭되는지 검사하여 package-lock.json 파일을 기반으로 패키지들을 설치합니다.

한번에 프로젝트의 모든 의존성을 설치하는 역할이므로, 패키지 개별적으로 사용하는 것은 불가능합니다.


패키지 버전 범위에서 설치해야하는 버전을 알아내는 연산이 있는 npm install과 비교해서 해당 연산이 없기때문에 더 빠른 속도로 설치가 가능합니다. 그렇기에 Jenkins, GitHub Actions와 같은 CI 환경에서 해당 명령어를 사용하면 시간을 단축시킬 수 있을것 같습니다.


그리고 항상 이전의 node_modules를 삭제 후 재설치 한다는 특징이 있는데요. 이는 일관성 있는 패키지 설치 환경을 보장하고, 깨끗한 상태에서 시작합니다.


npm, yarn, pnpm에서 사용할 수 있는 ci 명령어는 아래와 같습니다.

패키지 매니저lock 파일명
npmnpm ci
yarnyarn install --frozon-lockfile
pnpmpnpm install --frozon-lockfile

3. 마치며 📌

오늘은 npm install, npm ci란 무엇이고, 차이점에 대해서 간단하게 알아보았는데요. 처음엔 npm ci라는 명령어가 낯설게 느껴졌는데, 자세히 알아보니 기존의 CI 성능에 도움이 되는 좋은 명령어였네요.


많은분들이 이 글을 보고 도움이 되었다면 좋겠습니다. 이상으로 글을 마치겠습니다. 감사합니다!

자주 사용되는 HTTP 캐시 옵션 알아보기
이전글

자주 사용되는 HTTP 캐시 옵션 알아보기

웹 서비스에서 자주 사용되는 HTTP 캐시 옵션에 대해서 알아봅시다.

타입스크립트 맵드 타입(Mapped Type) 알아보기
다음글

타입스크립트 맵드 타입(Mapped Type) 알아보기

타입스크립트의 타입 시스템 문법, 맵드 타입에 대해서 알아보겠습니다.