pnpm과 Yarn Berry

pnpm과 Yarn Berry는 의존성 설치 속도와 저장 공간, 재현성을 개선하기 위해 서로 다른 전략을 사용하는 JavaScript 패키지 매니저입니다.

pnpm

pnpm은 npm에 비해 성능과 디스크 효율성을 개선한 패키지 매니저입니다.

일반적으로 npm이나 yarn을 사용하면 프로젝트의 node_modules 폴더에 각 패키지의 실제 복사본이 저장됩니다. 하지만 pnpm은 content-addressable store라는 전역 저장소에 패키지를 보관한 후, 각 프로젝트에서는 하드 링크와 심볼릭 링크를 활용해 해당 패키지의 링크만 참조하도록 합니다. 이로 인해 동일한 패키지를 여러 프로젝트에서 공유할 수 있어 설치 속도가 크게 향상되고 스토리지 용량이 줄어듭니다.

이외에도, 유령 의존성 문제가 발생하지 않으며, workspace 기능을 통해 한 프로젝트에 여러 패키지가 있는 모노레포를 구성하는 데 활용할 수 있다는 장점이 있습니다.

Yarn Berry

Yarn Berry는 Yarn의 2.0 버전 이상을 가리키며, PnP(Plug'n'Play) 와 Zero Install을 도입하여 패키지 관리 방식을 개선한 패키지 매니저입니다.

기존 node_modules 폴더를 없애고 .pnp.cjs 파일을 이용하여 의존성을 관리하는 것이 특징입니다. .pnp.cjs에는 패키지의 위치와 의존성 정보들이 완전하게 기술되어 있어 패키지를 찾는 과정이 효율적이고 정확하게 이뤄집니다.

그리고 패키지들이 .yarn/cache 디렉토리에 zip 압축 파일 형태로 관리되어 용량이 작다는 장점이 있습니다. 이로 인해 패키지 설치 속도가 빠르며 스토리지 용량을 아낄 수 있습니다.
또한 용량이 크게 줄어들었기 때문에 의존성들을 버전 관리에 포함시켜 git으로 관리할 수 있게 되었습니다. 이렇게 의존성을 버전 관리에 포함시키는 것을 Zero Install이라고 부릅니다. 이를 통해 저장소를 새로 복제하거나 브랜치를 이동할 때 의존성을 설치할 필요가 없게 되었습니다.

이외에도 Yarn Berry 역시 유령 의존성이 발생하지 않으며, workspace 기능을 지원한다는 장점을 가지고 있습니다.

추가 질문

  1. 유령 의존성 문제란 무엇이며, pnpm/Yarn Berry는 그 문제를 어떻게 해결했나요? 🤔
  2. pnpm과 yarn berry의 단점은 없나요? 🧐

📚 추가 학습 자료를 공유합니다.

→ 패키지 매니저 pnpm과 yarn berry에 대해 설명해주세요

CSLOG에서 보기