알고는 가자 - npm install 과 npm ci

BackEnd_Ash.log·2024년 12월 7일
0

데브옵스

목록 보기
3/4

npm installnpm ci는 모두 Node.js 프로젝트에서 의존성을 설치하는 명령어이지만, 사용하는 목적과 동작 방식에서 중요한 차이점이 있습니다.


1. npm install

동작 방식

  • 설치 대상:
    • package.json에 정의된 의존성을 기반으로 의존성을 설치합니다.
    • 만약 package-lock.json 파일이 존재하면, 해당 파일을 참조하여 버전을 설치합니다.
  • 파일 생성 및 수정:
    • package-lock.json 파일이 없으면 새로 생성하고, 기존 파일이 있으면 업데이트할 수 있습니다.
    • 새로 추가된 패키지가 있으면 package-lock.json을 업데이트하거나 생성합니다.
  • 버전 처리:
    • package.json의 버전 범위(^, ~ 등)에 따라 최신 버전이 설치될 수 있습니다.

주요 사용 사례

  • 개발 환경에서 새로운 패키지를 추가하거나 기존 패키지를 업데이트할 때 사용.

2. npm ci (Clean Install)

동작 방식

  • 설치 대상:
    • 반드시 package-lock.json(또는 npm-shrinkwrap.json) 파일을 기반으로 의존성을 설치합니다.
    • package-lock.json에 명시된 버전과 완전히 동일한 버전을 설치합니다.
  • 파일 생성 및 수정:
    • package-lock.json 파일을 절대 수정하지 않습니다.
    • package-lock.json 파일이 없으면 에러를 발생시킵니다.
  • 설치 과정:
    • 기존 node_modules 폴더를 삭제한 후 의존성을 다시 설치합니다.

주요 사용 사례

  • CI/CD(Continuous Integration/Continuous Deployment) 환경에서 의존성을 재현 가능한 방식으로 설치할 때 사용.
  • 프로젝트 팀원 간 동일한 환경을 보장하고자 할 때 유용.

3. 주요 차이점

기능npm installnpm ci
대상 파일package.json을 기준으로 설치, package-lock.json이 있으면 참조package-lock.json 또는 npm-shrinkwrap.json만을 기준으로 설치
package-lock.json 수정필요한 경우 생성하거나 수정절대 수정하지 않음
기존 node_modules 처리기존 폴더 유지기존 폴더 삭제 후 재설치
버전 일치package.json의 버전 범위를 허용package-lock.json의 정확한 버전만 설치
속도느릴 수 있음더 빠름
사용 목적개발 환경에서 유연한 설치CI/CD 및 재현 가능한 환경 보장

4. 언제 사용해야 할까?

  • npm install:

    • 새로운 패키지를 추가하거나 업데이트할 때.
    • 개발 환경에서 유연한 패키지 관리를 원할 때.
  • npm ci:

    • CI/CD 환경에서 항상 동일한 의존성 버전을 보장하고자 할 때.
    • 다른 개발자와의 협업에서 의존성 설치 환경을 일치시키고자 할 때.

5. 요약

  • npm install은 유연성을 제공하지만 의존성 버전이 다를 수 있어 환경 차이가 발생할 수 있습니다.
  • npm ci는 항상 고정된 환경을 제공하며, 속도가 더 빠르고, CI/CD에서 재현성을 보장합니다.

npm ci 가 대부분 좋을것 같지만 프로젝트를 하다보면 생각보다 패키지를 수정하거나 추가할때가 많다.
팀원이 늘어나게 되면 npm ci 를 사용하는게 좋을수도 있지만 초기엔 유연하게 가져가는게 더 좋지 않을까 생각이든다.

profile
꾸준함이란 ... ?

0개의 댓글