왜 npm 대신 pnpm을 사용하게 됐을까? npm <-> pnpm 알아보기

개발 · 2025. 9. 11.

개요

새로 시작하게 될 프로젝트의 Node.js 패키지 매니저를 pnpm으로 정했습니다. 사실 pnpm은 npm 보다 좋다고 말만 들어봤지 정확히 어떤 부분에서 좋은지 분석해보지는 않았는데요. 이번 글에서는 npm으로 환경 구성된 프로토 타입을 pnpm으로 마이그레이션 하면서 알게 된 npm과 pnpm의 차이점, 장/단점에 대해서 기록하고 다음 글에서는 마이그레이션 과정을 정리해보고자 합니다.

 

npm이란?

자바스크립트 생태계에서 npm(Node Package Magner)은 Npde.js와 함께 배포되는 기본 패키지 매니저입니다.

Node.js가 처음 등장했을 때, 개발자들이 다양한 모듈 및 라이브러리들을 공유하기 위한 저장소가 필요했는데 그 결과가 npm 레지스트리와 이를 다루는 CLI 도구인 npm이 됐습니다.

 

npm의 핵심 역할

  • 패키지 설치(`npm install`)
  • 프로젝트 의존성 설치(`package.json`)
  • 스크립트 실행(`npm run`)
  • 전 세계 개발자들이 만든 라이브러리 연결

즉, npm은 Javascript 생태계의 기본 뼈대 역할을 합니다.

pnpm의 등장

npm은 오랫동안 Node.js의 표준이었지만, 몇 가지 문제점이 있었는데 아래와 같습니다.

  1. 디스크 공간 낭비
    - 여러 프로젝트에서 같은 패키지를 사용해도, 각 프로젝트의 `node_modules`와 같은 복사본을 따로 저장했습니다.
    예를 들어, `lodash` 하나만 수십 번 중복 설치되는 일이 흔했습니다.
  2. 설치 속도가 느림
    - 수천 개의 패키지를 복사 및 설치하기 때문에 시간이 오래 걸립니다.
  3. 의존성 트리 문제
    - npm은 `node_modules`를 평탄화해서 설치하기 때문에, 어떤 경우에는 잘못된 `peerDependencies`가 있어도 그냥 넘어가버리는 일이 있었습니다. 그래서 내 로컬에서는 되는데, 배포 환경에서는 깨지는 버그가 발생하기도 했다고 합니다.

이런 문제들을 해결하기 위해 등장한 게 바로 pnpm(Perforamant npm)입니다.

 

pnpm의 특징

  • 모든 패키지를 전역 저장소(`.pnpm-store`)에 저장
  • 프로젝트별로 패키지를 복사하지 않고 링크(하드링크/심볼릭)해서 연결
  • 의존성 트리를 엄격하게 관리하여 잘못된 의존성 구조를 미리 확인

npm과 pnpm의 차이

 구분  npm  pnpm
 저장 방식  프로젝트마다 패키지 복사  전역 저장소에 한 번만 설치 후 링크
 디스크 효율  중복 발생 -> 낭비  공유 저장소 활용 -> 절약
 설치 속도  상대적으로 느림  빠름 
 의존성 관리  관리가 느슨하여 버그가 알려지지 않음  관리가 엄격하여 버그를 초기에 발견
 호환성  모든 패키지 완벽 지원  드물게 구식 패키지에서는 충돌 발생

pnpm의 좋은 점

  • 성능과 효율성
    - 큰 프로젝트에서 `npm install`은 시간이 오래 걸릴 수 있지만 pnpm에서는 몇 초 단위로 끝날 수 있습니다.
    - SSD 용량을 아끼고 CI/CD 서버에서도 빌드 시간을 단축할 수 있습니다.
  • 모노레포(Monorepo) 친화적
    - 요즘의 대규모 프로젝트는 여러 패키지를 하나의 레포지토리에서 관리하는 모노레포 구조를 많이 사용합니다.
    pnpm은 `pnpm workspaces` 기능으로 모노레포 관리에 최적화되어 있습니다.
  • 엄격한 의존성 관리
    - pnpm은 의존성을 트리 구조 그대로 설치하기 때문에 `peerDependencies 충돌` 같은 문제를 빨리 발견할 수 있습니다.
    - 개발 초기 단계에서 에러를 잡아주므로 장기적으로 프로젝트 안정성이 올라갑니다.
  • 커뮤니티 트렌드
    - Vite, Vue, Next.js, Angluar 팀 등 많은 오픈소스 프로젝트가 pnpm으로 마이그레이션 하고 있습니다.
    - 대기업(예: Microsoft, Tencent 등)에서도 CI/CD 최적화 때문에 pnpm을 채택하고 있는 사례가 늘고 있습니다.

npm, pnpm 중에 고르자면

  • npm을 선택하면 좋은 경우
    -> 작은 프로젝트, 별도 설정 없이 바로 시작하고 싶을 때,
  • pnpm을 선택하면 좋을 경우
    -> 대규모 프로젝트, 협업 환경, 빌드/배포 속도가 중요한 경우