Skip to content

자바스크립트 패키지 매니저(npm, yarn, pnpm)

Jiyeon Baek edited this page Nov 22, 2024 · 1 revision

패키지란?

  • 패키지란 공유되고 재사용될 수 있는 소프트웨어 모듈 또는 라이브러리를 말한다.
  • 프로그래밍 언어나 플랫폼에 종속적일 수 있다.
  • 패키지를 사용하면 손쉽게 원하는 기능을 구현할 수 있어서 개발 생산성을 향상시킬 수 있다.

패키지 매니저란?

자바스크립트 프로젝트에서 사용되는 의존성 관리 도구이다. 프로젝트에 필요한 외부 라이브러리, 모듈, 플러그인 등을 손쉽게 설치하고 관리하는 역할을 한다.

패키지 매니저의 주요 기능

  1. 패키지 설치

    패키지 매니저를 사용하여 프로젝트에 필요한 패키지를 설치할 수 있다. 패키지는 일반적으로 오픈 소스 라이브러리이며, 패키지 매니저를 통해 패키지의 이름 또는 버전을 지정하여 설치할 수 있다.

  2. 의존성 관리

    패키지 매니저는 프로젝트의 의존성을 관리한다. 패키지는 다른 패키지에 의존할 수 있으며, 패키지 매니저는 이러한 의존성을 자동으로 해결하여 필요한 패키지들을 설치한다.

  3. 버전 관리

    패키지 매니저는 패키지의 다양한 버전을 관리한다. 이를 통해 특정 버전의 패키지를 설치하거나 업데이트할 수 있으며, 프로젝트가 정확한 버전의 패키지를 사용하도록 보장할 수 있다.

  4. 스크립트 실행

    패키지 매니저는 프로젝트에 미리 정의된 스크립트를 실행하는 기능을 제공한다. 이를 통해 빌드, 테스트, 배포 등의 자동화된 작업을 수행할 수 있다.

대표적인 자바스크립트 패키지 매니저

npm (Node Package Manager)

  • Node.js의 표준 패키지 매니저로, Node.js를 설치하면 같이 딸려온다. 즉, 별도의 설치가 필요 없다.
  • package.json을 이용하여 프로젝트의 종속성(dependencies)을 관리하고, 이를 기반으로 패키지를 설치한다.

npm 명령어

  • npm install <경로> : 특정 저장소 내 패키지 설치. 주로 github를 이와 같이 설치.
  • npm install <패키지이름> -g : 패키지 글로벌 설치. 로컬의 다른 프로젝트도 이 패키지를 사용할 수 있게 된다.
  • npm update : 설치한 패키지들 업데이트
  • npm dedupe : 중복 설치된 패키지들 정리해주는 명령어.

npm의 장단점

  • 장점
    • Node.js 기본 제공: Node.js를 설치하면 기본적으로 제공되므로 별도의 설치 과정이 필요 없다.
    • 커뮤니티 지원 : 오래된 패키지 관리자이기 때문에 커뮤니티와 문서가 풍부하고 지원이 잘 된다.
  • 단점
    • 성능 및 속도 (순차적 설치)

      초기 npm 버전은 패키지를 하나씩 순차적으로 설치했기에 설치 과정이 오래 걸렸다. 현재는 npm도 병렬 설치를 지원하여 속도가 개선되긴 했다.

    • 보안성 취약

    • 중복 설치 문제 : npm은 프로젝트에 필요한 모든 종속성을 node_modules 폴더에 풀어놓는다. 같은 종속성을 필요로 하는 여러 패키지가 있을 경우, 중복으로 설치되어 디스크 공간이 낭비되고 설치 시간이 오래 걸릴 수 있다.

    • 의존성 충돌 : 종속성 문제나 충돌이 발생할 때, 트러블슈팅이 복잡해질 수 있다.

npx (Node Package Runner)

  • npm에서 제공해주는 도구로, 특정 npm 패키지의 최신버전 파일을 불러와 설치하여 실행시키고 실행된 이후에 해당 패키지를 제거하는 방식
  • 주로 일회성으로 사용하는 패키지나 CLI 도구를 실행할 때 유용하게 사용된다.
  • 모듈이 많아 업데이트가 잦은 create-react-app과 같은 경우 npx를 이용해 설치하는 것을 권장한다.
  • npx는 로컬 프로젝트 내에 설치된 프로젝트를 자동으로 인식하여 실행할 수 있다.

yarn

  • 기존의 npm의 단점(속도, 보안)을 보완하면서 등장한 패키지 매니저로, 2017년에 페이스북 개발자들과 구글 개발자들이 함께 내놓은 패키지 매니저이다.

  • npm과 유사한 명령어 체계를 갖고 있어서 npm 사용자들이 쉽게 적응할 수 있다.

  • npm을 이용하여 설치해줘야 한다.

    npm install yarn --global
    

yarn의 장단점

  • 장점
    • 빠른 속도: yarn은 패키지 설치 속도를 개선하기 위해 캐싱 시스템을 사용해 재설치 속도가 빠르다.
    • 일관된 설치 환경: yarn.lock 파일을 통해 일관된 종속성을 유지하여 여러 개발자 간 같은 패키지 버전을 보장한다. ⇒ 이건 npm도 package-lock.json 파일을 통해 제공할 수 있는 장점이기도 하다.
    • 오프라인 모드: 한 번 다운로드한 패키지를 캐싱하여 오프라인에서도 설치가 가능하다.
    • 병렬 설치: 여러 패키지를 동시에 설치하여 더 빠른 설치 속도를 제공한다.
  • 단점
    • 패키지 중복: npm과는 약간 다른 방식의 패키지 관리로 인해 yarn.lockpackage-lock.json 파일이 혼재될 수 있다.
    • 저장소의 종속성: 여전히 npm 레지스트리에 의존하기 때문에 npm과 같은 의존성 충돌 문제가 발생할 수 있다.

yarn-berry

yarn-berry는 yarn 2.0 버전부터 등장한 새로운 버전의 yarn으로, 이전 버전의 yarn과 몇 가지 중요한 차이가 있다.

  • Plug’n’Play(PnP) : yarn berry는 Plug’n’Play 기능을 도입하여 의존성을 더 효율적으로 관리한다. 이로써 node_modules 폴더는 더이상 필요하지 않으며, 디스크 공간을 절약할 수 있다.
  • Zero-installs : yarn berry는 zero-installs를 지원하여 프로젝트의 의존성을 전역적으로 설치하지 않고도 사용할 수 있다. 이것은 빠른 시작과 업데이트를 가능하게 한다.
  • 성능 향상 : yarn berry는 이전 버전에 비해 훨씬 빠르고 효율적인 성능을 제공한다.

pnpm

  • pnpm은 npm과 yarn이 갖고 있는 중복 설치 문제를 해결하기 위해 만들어진 새로운 패키지 매니저이다.

  • 하드 링크(hard link) 방식을 사용하여 중복 패키지를 피하고 디스크 공간을 절약한다.

    하드 링크는 파일의 실제 데이터 블록을 가리키는 또 하나의 파일 이름이다.

  • 기본적으로 node_modules 폴더에서 모든 패키지를 하드 링크를 통해 공유함으로써 메모리 효율을 극대화한다. 중앙 저장소에 패키지를 저장해두고 각 프로젝트에서는 node_modules에 있는 심볼릭 링크를 통해 중앙 저장소에 있는 패키지를 참조하게 된다.

  • 만약 같은 패키지의 다른 버전을 설치하고 싶다면?

    ⇒ 중앙 저장소에 패키지를 버전별로 분리하여 관리하기 때문에 필요한 버전의 패키지를 사용할 수 있다.

pnpm의 장단점

  • 장점
    • 디스크 효율성: 중복 설치 없이 단일 패키지 버전을 저장하므로 큰 프로젝트에서도 디스크 공간을 절약할 수 있다.
    • 빠른 설치 속도: 독특한 설치 방식으로 빠른 설치 속도를 제공한다.
    • 의존성 충돌 해결: 하드 링크 구조 덕분에 패키지 간 의존성 충돌을 줄이고 안정성을 높인다.
    • 일관된 버전 관리: pnpm-lock.yaml 파일을 통해 종속성을 고정하고 일관성을 유지할 수 있다.
  • 단점
    • 호환성 문제: 일부 라이브러리가 node_modules 구조에 의존하는 경우, pnpm의 링크 방식과 호환되지 않아 이슈가 발생할 수 있다.
    • 러닝 커브: 기존의 npm이나 yarn을 사용하던 개발자들에게는 새로운 설치 방식이 익숙하지 않을 수 있고, 호환성
    • 커뮤니티와 문서: 다른 패키지 관리자에 비해 커뮤니티가 비교적 작고, 문서나 자료가 풍부하지 않을 수 있다.

각 패키지 매니저의 장단점 요약

패키지 관리자 장점 단점
npm - Node.js 기본 제공
- 풍부한 커뮤니티 지원
 - 상대적으로 느린 속도
- 중복 설치
- 의존성 충돌
yarn - 빠른 속도
- 캐싱된 패키지는 오프라인 설치도 가능
- 병렬 설치 지원
- 패키지 중복 가능
- 의존성 충돌
pnpm - 디스크 효율성
- 빠른 속도
- 의존성 충돌 적음
- 호환성 문제
- 낮은 커뮤니티 지원

참고자료

👥 팀 강점

🧑‍💻 개발 일지

📌 ALL

📌 FE

📌 BE

💥 트러블 슈팅

📌 FE

📌 BE

🤔 고민

📚 학습 정리

📌 김광현

📌 백지연

📌 전희선

📌 한승헌

🤝 회의록

🗒️ 데일리 스크럼

💬 팀 회고


👨‍👩‍👧‍👦 소개

🌱 문화

🔨 기술 스택

⚙️ 서비스 아키텍쳐

🚧 CI/CD

🌊 Flow

💭 6주를 보내면서

Clone this wiki locally