npm, Yarn, pnpm의 기본 동작 비교와 실전 선택 가이드
Node.js 생태계에서 npm, Yarn, pnpm은 가장 널리 쓰이는 패키지 매니저입니다.
최근 각 매니저의 기본 동작과 차이, 그리고 실제 어떤 상황에서 어떤 패키지 매니저를 선택하면 좋은지에 대해 깊이 고민해보게 되었습니다.
이 글에서는 실전 경험과 조사 내용을 바탕으로 패키지 매니저의 기본 동작, 차이점, 그리고 상황별 선택 기준까지 모두 정리해봅니다.
1. 대표 패키지 매니저들의 기본 동작 비교
의존성 설치 방식과 node_modules 구조
패키지 매니저 | 기본 설치 명령어 | node_modules 구조 | 캐시 전략 | lock 파일 이름 | workspace 지원 |
---|---|---|---|---|---|
npm | npm install |
플랫(flat) 구조 | 디스크 기반, 기본 | package-lock.json | O (v7+) |
Yarn | yarn install |
플랫(flat) 구조 | 디스크 기반, 빠름 | yarn.lock | O (v1+), 강점 |
pnpm | pnpm install |
하드링크 기반, 중복 최소화 | 전용 저장소, 매우 빠름 | pnpm-lock.yaml | O (강력) |
- npm: node_modules에 모든 패키지를 플랫하게 설치. 표준적이고 널리 쓰임.
- Yarn: npm과 유사하지만, 캐시 속도와 workspace 지원이 더 뛰어남.
- pnpm: 하드링크를 활용해 중복 패키지 설치를 최소화. 대규모 프로젝트에서 디스크 공간과 설치 속도가 매우 뛰어남.
스크립트 실행 및 명령어
- npm:
npm run <script>
- Yarn:
yarn <script>
- pnpm:
pnpm <script>
lock 파일 및 일관성
- npm: package-lock.json
- Yarn: yarn.lock
- pnpm: pnpm-lock.yaml
workspace 및 모노레포 지원
- npm: v7부터 workspace 지원 시작.
- Yarn: v1부터 지원, 모노레포에 매우 강점.
- pnpm: workspace 기능이 매우 강력하고 빠름.
2. 실전에서 느낀 차이점과 경험
설치 속도와 디스크 사용량
- pnpm이 하드링크 기반이라 대규모 프로젝트에서 디스크 공간과 설치 속도 모두에서 가장 뛰어났습니다.
- Yarn도 캐시가 잘 되어 있어 npm보다 빠른 느낌을 받았습니다.
명령어의 일관성과 편의성
- Yarn, pnpm은 run을 생략할 수 있어 자주 쓰는 스크립트 실행이 편리했습니다.
workspace/모노레포 관리
- 여러 패키지를 한 레포에서 관리할 때는 Yarn과 pnpm의 workspace 기능이 npm보다 훨씬 직관적이고 강력했습니다.
3. 어떤 상황에 무슨 패키지 매니저를 써야할까?
npm
추천 상황
- 가장 표준적인 환경을 원할 때
- 빠르게 시작하는 소규모 프로젝트
- 최신 Node.js와의 호환성이 최우선일 때
- 외부 협업자, 오픈소스 등에서 가장 보편적인 선택을 원할 때
장점
- Node.js 설치 시 기본 제공, 추가 설치 필요 없음
- 공식 문서와 커뮤니티 자료가 매우 풍부
- 최근 버전(v7+)부터 workspace 지원 등 기능이 많이 개선됨
단점
- 대규모 모노레포, workspace 관리에서는 Yarn/pnpm에 비해 다소 불편할 수 있음
Yarn
추천 상황
- 모노레포(여러 패키지 관리) 프로젝트를 운영할 때
- 빠른 설치 속도와 강력한 캐시 기능이 중요할 때
- run 명령어 생략 등 개발 편의성을 중시할 때
- 대규모 팀/조직에서 일관된 개발 환경을 유지하고 싶을 때
장점
- workspace, 캐시, 병렬 설치 등 대형 프로젝트에 유리
- yarn.lock을 통한 일관된 의존성 관리
- run 생략 등 개발자 경험(Developer Experience)이 좋음
단점
- 일부 패키지/툴에서 npm만 공식 지원하는 경우가 있음
- Yarn 1과 2/3 버전 차이가 커서, 버전 관리에 주의 필요
pnpm
추천 상황
- 설치 속도와 디스크 효율이 가장 중요한 대규모 프로젝트
- 하드링크 기반의 최소한의 디스크 사용량이 필요할 때
- workspace 기능을 적극적으로 활용하는 모노레포 환경
- 최신 기술 도입에 적극적이고, 오픈소스 커뮤니티에 익숙할 때
장점
- 하드링크 기반으로 디스크 공간 절약, 설치 속도 매우 빠름
- workspace, 모노레포 관리에 강력
- node_modules 구조가 깔끔해 의존성 충돌 최소화
단점
- 일부 레거시 툴/패키지와의 호환성 이슈가 있을 수 있음
- npm, Yarn에 비해 커뮤니티/레퍼런스가 상대적으로 적음
상황별 선택 기준 요약
상황/목적 | 추천 패키지 매니저 |
---|---|
빠른 시작, 표준 환경 | npm |
대규모 프로젝트, workspace/모노레포 | Yarn, pnpm |
설치 속도, 디스크 효율 최우선 | pnpm |
오픈소스/외부 협업, 범용성 | npm, Yarn |
최신 기능, 적극적 실험 | pnpm |
4. 앞으로의 다짐
프로젝트 시작 시 패키지 매니저를 팀 내에서 명확히 통일
lock 파일과 설치 방식이 달라 혼용하면 큰 혼란이 생길 수 있습니다.
빌드/배포 환경에서 필요한 의존성 명확히 확인
devDependencies만 설치하면 되는지, 실제 빌드가 어디서 이뤄지는지 반드시 체크해야 합니다.
공식 문서와 커뮤니티 사례 꾸준히 학습
각 패키지 매니저의 최신 동작 방식과 옵션을 항상 확인하는 습관을 들이려고 합니다.
마치며
패키지 매니저는 단순히 패키지를 설치하는 도구가 아니라, 프로젝트의 구조와 협업, 배포 효율성까지 좌우하는 핵심 인프라임을 다시 한 번 느꼈습니다.
npm, Yarn, pnpm 모두 장단점이 뚜렷하니, 프로젝트의 성격과 팀의 협업 방식에 맞게 현명하게 선택하는 것이 중요합니다.
실전에서 겪은 시행착오를 바탕으로, 앞으로는 더 깊이 이해하고 현명하게 활용하는 개발자가 되고 싶습니다.