Yarn Berry vs PNPM
Yarn Berry Plug'n'Play (PnP)
1. Plug'n'Play 기본 개념
Plug'n'Play는 전통적인
node_modules
디렉터리를 없애고, 의존성 파일을.pnp.cjs
파일에 저장합니다.각 패키지는 파일 시스템에 실제로 설치되지 않고, Yarn이 가상 파일 시스템을 관리하여 의존성을 추적하고 로딩합니다.
즉, 패키지를 로드할 때 이
.pnp.cjs
파일을 사용해 의존성을 찾아서 동작하며, 이를 통해 패키지 설치 속도를 대폭 줄일 수 있습니다.
2. PnP의 장점
속도 향상:
node_modules
를 생성하지 않기 때문에 의존성 탐색 및 파일 시스템 접근이 줄어들어, 설치 속도와 런타임 성능이 향상됩니다.파일 시스템 최적화: 실제 패키지 파일을
node_modules
에 복사하지 않으므로 디스크 공간을 절약합니다.Zero-Installs 지원:
.pnp.cjs
파일만으로 의존성 상태를 관리할 수 있기 때문에, Git 저장소에서 코드를 복제하면 추가적인 설치 없이 바로 실행할 수 있습니다.독립성 보장: 각 프로젝트의 의존성을 고립시켜서 패키지 간 충돌을 방지합니다. 덕분에 모노레포 환경에서도 여러 프로젝트가 각자 다른 버전의 패키지를 사용할 수 있습니다.
3. PnP의 단점
호환성 문제: 일부 JavaScript 도구들이
node_modules
에 의존하는 방식으로 설계되어 있기 때문에, PnP 환경에서 제대로 작동하지 않는 경우가 있을 수 있습니다. Yarn은 이를 보완하기 위해 PnP 호환성 플러그인을 제공하지만, 호환성 문제가 완전히 해결된 것은 아닙니다.초기 학습 곡선: 기존 방식과 달라서 처음 사용할 때 설정이나 디버깅에 어려움을 겪을 수 있습니다.
pnpm의 링크 기반 관리
1. pnpm의 기본 개념
pnpm은
node_modules
를 아예 없애지는 않지만, 각 패키지를 실제로 하드 링크 및 심볼릭 링크 방식으로 설치합니다.의존성 파일을 중앙 저장소에 캐싱한 후, 각 프로젝트의
node_modules
디렉터리에는 해당 패키지에 대한 심볼릭 링크만 생성하여, 중복된 패키지 설치를 방지합니다.
2. pnpm의 장점
디스크 공간 절약: 같은 버전의 패키지는 한 번만 설치하고, 이를 링크하여 여러 프로젝트에서 사용할 수 있습니다. 이를 통해 모노레포 환경에서 디스크 사용량을 크게 줄입니다.
빠른 설치: 중앙 저장소에 이미 설치된 패키지를 링크하는 방식이므로, 추가적인 설치 시간이 짧습니다.
호환성: 기존의
node_modules
방식과 유사하게 동작하기 때문에, 대부분의 JavaScript 도구들이 별도의 설정 없이도 pnpm에서 잘 작동합니다.
3. pnpm의 단점
PnP만큼 파일 시스템 상에서 의존성 로드 방식을 최적화하지는 않기 때문에, 아주 대규모 프로젝트에서는 PnP보다 성능이 약간 뒤떨어질 수 있습니다.
링크 구조 때문에 일부 드문 경우에 의존성 문제가 발생할 수 있으나, 이는 매우 특수한 경우에 해당됩니다.
비교: PnP vs pnpm
특징 | Yarn Berry (PnP) | pnpm |
의존성 설치 방식 | node_modules 를 사용하지 않고, PnP 파일로 관리 | node_modules 를 링크 방식으로 관리 |
속도 | 더 빠른 설치 및 의존성 로딩 | 빠른 설치 및 중복된 패키지 링크 방식으로 최적화 |
디스크 공간 | 매우 효율적 (node_modules 없이 관리) | 효율적 (중앙 저장소와 링크를 통해 중복 방지) |
Zero-Installs | 기본 지원 | 지원 |
호환성 | 일부 도구와 호환성 문제가 있을 수 있음 | 대부분의 도구와 호환성 높음 |
사용 난이도 | 초기 설정 및 디버깅이 약간 복잡할 수 있음 | 기존 방식과 유사해 쉽게 사용 가능 |
모노레포 지원 | 매우 뛰어남 | 매우 뛰어남 |
결론:
성능 최적화 및 파일 시스템을 최소화하려는 경우에는 Yarn Berry의 PnP가 더 좋은 선택일 수 있습니다. 다만, 일부 호환성 문제나 초기 설정의 복잡성을 고려해야 합니다.
기존 툴들과의 호환성을 유지하면서도 디스크 절약 및 빠른 속도를 원한다면 pnpm이 더 적합할 수 있습니다.
Subscribe to my newsletter
Read articles from webisme directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by