PNPM vs Yarn Berry

February 11, 2025


패키지 매니저를 선택할 때, Yarn Berry와 pnpm은 자주 비교되는 옵션입니다. 두 가지 모두 빠른 속도와 효율적인 디스크 사용을 목표로 하지만, 내부 동작 방식에는 차이가 있습니다.

의존성 관리 방식 비교

패키지 저장 방식

  • Yarn Berry.yarn/cache 디렉토리에 ZIP 파일 형태로 패키지를 저장
  • pnpmnode_modules/.pnpm 디렉토리에 압축된 형태로 저장하며, 전역 저장소를 활용하여 패키지를 하드링크로 연결

디스크 공간 최적화

  • Yarn Berry는 글로벌 캐시에 패키지를 저장하면서도, 필요에 따라 프로젝트별 캐시 저장을 지원
  • pnpm은 공통 패키지를 물리적으로 하나만 유지하며, 하드링크를 통해 여러 프로젝트에서 공유

Node Linker 설정 방법

Yarn Berry의 옵션

  • node-modules: 기존 npm 방식과 유사한 디렉토리 구조
  • pnp: .pnp.cjs 파일을 이용해 의존성을 직접 관리

pnpm의 옵션

  • isolated: 기본 설정, 하드링크와 심볼릭 링크를 활용하여 디스크 공간 절약
  • hoisted: npm 방식처럼 평탄화된 구조로 구성
  • pnp: .pnp.cjs 파일을 기반으로 의존성을 관리하여 node_modules 디렉토리를 없앨 수 있음

Plug'n'Play (PnP)란?

PnP는 기존의 node_modules 폴더 없이도 패키지를 사용할 수 있도록 만든 새로운 방식입니다.

PnP의 원리

  1. 패키지 설치 시 의존성 트리를 분석하고 .pnp.cjs 파일에 저장합니다.
  2. 애플리케이션 실행 시 (예: npm run dev로 개발 서버 실행 또는 npm run build로 빌드 수행), .pnp.cjs가 Node.js의 require() 또는 import 요청을 가로채어, 정확한 패키지 위치를 즉시 찾아줍니다.

PnP의 장점

  • 패키지 탐색 속도가 빨라지고, 불필요한 파일 시스템 접근이 줄어듭니다.
  • 팬텀 의존성 문제(사용하지 않는 패키지가 설치되는 문제)가 해결됩니다.
  • PnP는 모듈을 찾는 방식만 최적화할 뿐, 런타임 성능에는 직접적인 영향을 주지 않습니다.

PnP의 단점

  • 일부 레거시 패키지와 호환되지 않을 수 있습니다. (node_modules 디렉토리에 의존하는 패키지)

Yarn Berry만의 강점

1. Zero Install

Yarn Berry는 패키지 캐시를 git에 포함할 수 있어, 별도의 yarn install 과정 없이 바로 실행할 수 있습니다.

2. 플러그인 시스템

Yarn Berry는 플러그인 시스템을 지원하여, 커스텀 명령어나 자동화된 작업을 추가할 수 있습니다. 이를 활용하면 배포, 코드 포맷팅 등의 워크플로우를 개선할 수 있습니다.

비교 요약

기능Yarn Berrypnpm
패키지 저장 방식ZIP 아카이브압축 디렉토리
공유 저장소글로벌/프로젝트 캐시하드링크 기반 공유
Node Linkernode-modules, pnpisolated, hoisted, pnp
PnP 지원
Zero Install
플러그인 시스템

Yarn Berry와 pnpm은 모두 빠르고 효율적인 패키지 관리 방식을 제공하지만, 하드링커와 심볼릭과 같은 패키지 매니저의 고유 동작방식이 있기 떄문에 이를 고려해서 선택해야 합니다.