카테고리 없음
패키지 매니저 비교(NPM / PNPM / Yarn)
학습하는 청년
2024. 12. 14. 01:28
최종 수정 : 2024.12.14
패키지 매니저 비교(NPM / PNPM / Yarn)
포트폴리오용 프로젝트 생성에 앞서 새로운 패키지매니저를 사용해보고 싶었다. 간단한 프로젝트나 부트캠프 당시에도 npm만 사용했기에 다른 것을 살펴보고 싶었다. 또한, NPM이 익숙하다고 느껴서 계속 벗어나지 못하는 것 같아 이번에는 공부도 할겸 정리해 보고 싶었다.
요즘은 새로운 패키지 매니저 burn도 나왔다고 하는데, 아직 비교적 사용자들이 적어 개발을 익혀가는 과정에서는 다음에 하는 게 낫겠다는 판단이 들어 배제했다. 대표적인 패키지 매니저 NPM, PNPM, Yarn을 비교 정리하면서 얼핏 알고 있던 것도 다시금 확인할 수 있어서 좋았다.
최근 Yarn이 2.0 버전이 나오면서 기존 Yarn은 유지보수만 하게 됐다. 따라서, 장기적인 관점에서 Yarn( ≠ Yarn Barry)을 권하지는 않는다.
상세 비교표
특징 | NPM | PNPM | Yarn |
설치 방법 | Node.js와 함께 기본 제공 | npm install -g pnpm | npm install -g yarn |
설치 속도 | 가장 느림 | 가장 빠름 | 중간 |
디스크 사용량 | 높음(중복 설치) | 매우 낮음(하드링크 사용) | 중간 |
node_modules 구조 | 중첩 구조 | 평탄화된 구조 + 심볼릭 링크 | 평탄화된 구조 |
병렬 설치 | 부분 지원 | 완벽 지원 | 완벽 지원 |
오프라인 캐시 | 제한적 지원 | 완벽 지원 | 완벽 지원 |
Lock 파일 | package-lock.json | pnpm-lock.yaml | yarn.lock |
Monorepo 지원 | 제한적 (wordspaces) | 뛰어남 | 좋음 (workspaces) |
유령 의존성 | 발생 가능 | 방지됨 | 발생 가능 |
시장 점유율 | 가장 높음 | 성장 중 | 높음 |
학습 곡선 | 낮음 | 중간 | 중간 |
보안성 | 기본 | 향상됨 | 향상됨 |
커뮤니티 크기 | 매우 큼 | 성장 중 | 큼 |
상세 설명
NPM (Node Package Manager)
장점
- Node.js의 기본 패키지 매니저로 별도 설치 불필요
- 가장 큰 커뮤니티와 풍부한 문서
- 초보자가 시작하기 쉬움
- 대부분의 튜토리얼이 NPM 기준으로 작성됨
단점
- 상대적으로 느린 설치 속도
- 비효율적인 디스크 공간 사용
- 의존성 해결이 때때로 일관적이지 않음
- 보안취약점에 더 노출될 수 있음
PNPM (Performant NPM)
장점
- 획기적인 빠른 설치 속도
- 디스크 공간을 효율적으로 사용 (하드링크 활용)
- 엄격한 의존성 관리로 유정 의존성 방지
- 뛰어난 모노레포 지원
- 보안성이 향상된 패키지 관리
단점
- 비교적 새로운 도구라 참고자료가 적음
- NPM과 Yarn에 비해 적은 커뮤니티
- 일부 레거시 패키지와의 호환성 문제 가능성
- 학습곡선이 약간 높음
Yarn (Yet Another Resourse Nagotiator)
장점
- NPM 보다 빠른 설치 속도
- 병렬 다운로드 지원
- 향상된 보안 기능 (체크섬 검증)
- 안정적인 의존성 관리
- 풍부한 기능과 플러그인 시스템
단점
- 별도 설치 필요
- 가끔 NPM과의 호환성 문제 발생
- 디스크 공간 사용이 NPM과 비슷
- 설정이 다소 복잡할 수 있음
주요 명령어 비교
작업 | NPM | PNPM | Yarn |
패키지 설치 | npm install | pnpm install | yarn |
패키지 추가 | npm install [pkg] | pnpm add [pkg] | yarn add [pkg] |
개발 의존성 추가 | npm install --save-dev [pkg] | pnpm add -D [pkg] | yarn add --dev [pkg] |
전역 설치 | npm install -g [pkg] | pnpm add -g [pkg] | yarn global add [pkg] |
스크립트 실행 | npm run [script] | pnpm [script] | yarn [script] |
캐시 정리 | npm cache clean | pnpm store prune | yarn cache clean |
의존성 업데이트 | npm update | pnpm update | yarn upgrade |
잠금 파일 업데이트 | npm install | pnpm install --force | yarn install --force |
프로젝트 유형별 추천
소규모 프로젝트
- NPM이나 Yarn 추천
- 간단한 설정과 친숙한 환경
대규모/엔터프라이즈 프로젝트
- PNPM 강력추천
- 디스크 공간 졸약과 빠른 설치 속도가 중요
모노레포 프로젝트
- PNPM이나 Yarn Berry 추천
- 우수한 workspace 관리
레거시 프로젝트
- NPM 이나 Yarn Classic 추천
- 호환성 문제 최소화