기본 개요
| 항목 | npm | yarn | pnpm |
|---|
| 출시년도 | 2010 | 2016 | 2017 |
| 속도 | 보통 | 빠름 | 매우 빠름 |
| 저장 방식 | 중복 저장 | 일부 중복 제거 | 중복 없음 (하드 링크) |
| 호환성 | 표준 | npm과 호환 | npm과 거의 완벽 호환 |
| 워크스페이스 | 제한적 (npm@7+) | 지원 | 강력한 지원 |
| 보안 감사 | npm audit | yarn audit | pnpm audit (npm 기반) |
| 설치 체계 | 플랫 구조 (node_modules) | 플랫 구조 | 하드링크 기반 샌드박스 구조 |
실제 성능 벤치마크
| 작업 | npm | yarn | pnpm |
|---|
| 설치 시간 (cold cache) | 45.7s | 31.1s | 16.8s |
| 설치 시간 (warm cache) | 23.2s | 12.4s | 4.3s |
| 디스크 사용량 (node_modules) | 240MB | 180MB | 60MB |
| 복잡한 의존성 해결 시간 | 느림 | 보통 | 빠름 |
대형 리포지토리 기준 패키지 설치 시간 비교이다.(출처: pnpm 공식 벤치마크 https://pnpm.io/benchmarks)
실제 차이점 요약
| 기능 | npm | yarn | pnpm |
|---|
| node_modules 구조 | 중복 많음 | 플랫하지만 무거움 | 샌드박스 + 링크 |
| 설치 시간 | 느림 | 평균적 | 가장 빠름 |
| 캐시 전략 | 단순 | 효율적 | 최고 수준 |
| 모노레포 대응 | 제한적 | 평균적 | 전용 기능 제공 |
| 설치 무결성 | 종종 깨짐 | Lockfile 있음 | 정확하게 고정됨 |
| 디스크 용량 | 가장 큼 | 중간 | 가장 작음 |
상황에 따른 패키지 매니저 선택
| 상황 | 추천 패키지 매니저 |
|---|
| 단일 프로젝트 개발 | yarn, pnpm 모두 가능 |
| 빠른 설치 속도, 최소 디스크 사용이 필요한 경우 | pnpm |
| 복잡한 모노레포 (workspace) 관리 | pnpm or yarn |
| 오래된 프로젝트, npm 기본 생태계에 맞출 경우 | npm |
| Facebook 생태계(React Native 등)에서의 일관성 유지 | yarn |
결론
pnpm은 가장 빠르고 효율적인 설치 속도를 제공하며, 대규모 프로젝트나 모노레포 관리에 적합하다.
yarn은 광범위한 생태계 지원과 좋은 사용자 경험을 제공하지만, 디스크 사용 측면에서 pnpm에 비해 다소 불리하다.
npm은 기본적인 도구로서 여전히 유효하지만, 속도나 구조 측면에서는 pnpm과 yarn보다 뒤처질 수 있다.