1. npm (Node Package Manager)
특징
- Node.js와 함께 기본 제공되는 패키지 매니저.
- 가장 널리 사용되며 생태계가 매우 크다.
- Lock 파일: package-lock.json을 통해 설치된 패키지의 정확한 버전을 잠금.
- 워크스페이스: npm v7부터 모노레포를 지원하는 워크스페이스 기능 추가.
장점
- Node.js 설치 시 기본 제공.
- 생태계가 크고 문서와 리소스가 풍부.
- 보안 검사 도구 내장(npm audit).
- 단순하고 익숙한 명령어.
단점
- 느린 속도 (v5 이후 개선).
- 이전에는 종속성 설치 시 디스크 사용량이 비효율적.
2. Yarn
특징
- Facebook이 개발한 패키지 매니저.
- npm의 문제점을 보완한 대안으로 등장.
- Lock 파일: yarn.lock으로 재현 가능한 빌드 제공.
- PnP(Plug and Play): 노드 모듈 디렉터리를 제거하고 패키지를 효율적으로 관리.
장점
- 빠른 속도 (병렬 설치 및 캐싱 기능).
- 기본적으로 종속성을 더 효율적으로 처리.
- 설치 시 예측 가능성이 높음.
- yarn workspace로 모노레포 지원.
단점
- npm 대비 학습 곡선이 조금 더 높을 수 있음.
- 일부 환경에서 호환성 문제.
3. pnpm (Performant npm)
특징
- 효율성 중심의 패키지 매니저.
- 패키지를 공유 저장소에 저장해 디스크 공간 절약.
- 파일 시스템의 하드 링크를 사용하여 설치 속도 개선.
- Lock 파일: pnpm-lock.yaml을 통해 재현 가능한 빌드 보장.
장점
- 디스크 공간 절약.
- 빠른 설치 속도.
- 모노레포 지원(pnpm workspace).
- Node.js 패키지 호환성 보장.
단점
- 덜 알려져 있으며, 일부 팀원들에게 학습 곡선이 있을 수 있음.
- 일부 도구나 환경에서 초기 설정 필요.
비교 표
속도 | 느림 | 빠름 | 매우 빠름 |
디스크 사용량 | 높음 | 높음 | 낮음 (공유 저장소) |
모노레포 지원 | 지원 (v7+) | 지원 | 지원 |
Lock 파일 이름 | package-lock.json | yarn.lock | pnpm-lock.yaml |
Plug and Play | 없음 | 지원 | 지원 |
캐싱 및 병렬 설치 | 제한적 | 우수 | 매우 우수 |