Yarn Berry vs PNPM

webismewebisme
3 min read

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이 더 적합할 수 있습니다.

0
Subscribe to my newsletter

Read articles from webisme directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

webisme
webisme