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: 하드링크를 활용해 중복 패키지 설치를 최소화. 대규모 프로젝트에서 디스크 공간과 설치 속도가 매우 뛰어남.

스크립트 실행 및 명령어

  • npmnpm run <script>
  • Yarnyarn <script>
  • pnpmpnpm <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 모두 장단점이 뚜렷하니, 프로젝트의 성격과 팀의 협업 방식에 맞게 현명하게 선택하는 것이 중요합니다.

실전에서 겪은 시행착오를 바탕으로, 앞으로는 더 깊이 이해하고 현명하게 활용하는 개발자가 되고 싶습니다.