PNPM vs Yarn Berry
February 11, 2025
패키지 매니저를 선택할 때, Yarn Berry와 pnpm은 자주 비교되는 옵션입니다. 두 가지 모두 빠른 속도와 효율적인 디스크 사용을 목표로 하지만, 내부 동작 방식에는 차이가 있습니다.
의존성 관리 방식 비교
패키지 저장 방식
- Yarn Berry는
.yarn/cache
디렉토리에 ZIP 파일 형태로 패키지를 저장 - pnpm은
node_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의 원리
- 패키지 설치 시 의존성 트리를 분석하고
.pnp.cjs
파일에 저장합니다. - 애플리케이션 실행 시 (예:
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 Berry | pnpm |
---|---|---|
패키지 저장 방식 | ZIP 아카이브 | 압축 디렉토리 |
공유 저장소 | 글로벌/프로젝트 캐시 | 하드링크 기반 공유 |
Node Linker | node-modules, pnp | isolated, hoisted, pnp |
PnP 지원 | ✓ | ✓ |
Zero Install | ✓ | ✗ |
플러그인 시스템 | ✓ | ✗ |
Yarn Berry와 pnpm은 모두 빠르고 효율적인 패키지 관리 방식을 제공하지만, 하드링커와 심볼릭과 같은 패키지 매니저의 고유 동작방식이 있기 떄문에 이를 고려해서 선택해야 합니다.