패키지 매니저 pnpm과 yarn berry에 대해 설명해주세요.
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 기능을 지원한다는 장점을 가지고 있습니다.
추가 질문
- 유령 의존성 문제란 무엇이며, pnpm/Yarn Berry는 그 문제를 어떻게 해결했나요? 🤔
- pnpm과 yarn berry의 단점은 없나요? 🧐