Node.js pnpm

IT 위키

pnpm은 Node.js 및 JavaScript 프로젝트의 의존성 관리를 위한 오픈소스 패키지 매니저로, 빠른 설치와 디스크 공간 효율을 목표로 하는 npm 대안 CLI이다.

pnpm은 npm, Yarn과 함께 Node.js 생태계에서 사용되는 패키지 매니저이다. Node.js 공식 문서는 npm을 Node.js의 표준 패키지 매니저로 설명하면서, Yarn과 pnpm을 npm CLI의 대안으로 함께 언급한다.[1]

pnpm의 공식 설명은 “빠르고 디스크 공간을 효율적으로 사용하는 패키지 매니저”이다. pnpm은 패키지를 프로젝트마다 반복 복사하는 대신 콘텐츠 주소화 저장소(content-addressable store)에 저장하고, 프로젝트의 node_modules에는 하드 링크 또는 리플링크를 통해 연결하는 방식을 사용한다.[2]

2026년 6월 7일 확인 기준 npm 레지스트리의 pnpm 최신 배포판은 11.5.2이며, 라이선스는 MIT이다. 해당 패키지의 engines 필드는 Node.js 22.13 이상을 요구한다.[3]

특징 설명
디스크 공간 절약 패키지를 전역 콘텐츠 주소화 저장소에 보관하고 프로젝트별 node_modules에는 링크를 배치하여 중복 저장을 줄인다.
빠른 설치 이미 저장소에 존재하는 패키지는 다시 내려받기보다 링크를 통해 재사용할 수 있다.
엄격한 의존성 구조 패키지가 자신의 package.json에 명시된 의존성만 접근하도록 하는 구조를 지향한다.
결정적 설치 pnpm-lock.yaml 잠금 파일을 사용해 설치 결과의 재현성을 높인다.
모노레포 지원 pnpm-workspace.yaml을 기반으로 여러 패키지를 하나의 저장소에서 관리할 수 있다.

pnpm의 주요 특징은 전역 콘텐츠 주소화 저장소, 링크 기반 node_modules 구성, 엄격한 의존성 접근, 워크스페이스 지원으로 요약된다.[2]

pnpm 11.x 문서 기준, standalone script 또는 @pnpm/exe를 사용하지 않는 경우 pnpm 실행을 위해 Node.js 22 이상이 필요하다. 설치 방법으로는 Corepack, npm, Homebrew, winget, Scoop, Chocolatey 등이 안내되어 있다. Corepack을 사용하면 프로젝트의 package.json에 packageManager 필드를 기록해 팀 내에서 동일한 pnpm 버전을 사용하도록 고정할 수 있다.[4]

# Corepack 사용
npm install --global corepack@latest
corepack enable pnpm
corepack use pnpm@latest-11

# npm으로 전역 설치
npm install -g pnpm@latest-11

주요 명령어

[편집 | 원본 편집]
명령어 용도
pnpm install 프로젝트의 모든 의존성을 설치한다.
pnpm add 패키지명 패키지를 dependencies에 추가한다.
pnpm add -D 패키지명 패키지를 devDependencies에 추가한다.
pnpm add -O 패키지명 패키지를 optionalDependencies에 추가한다.
pnpm add -g 패키지명 패키지를 전역으로 설치한다.
pnpm update package.json의 버전 범위에 따라 의존성을 갱신한다.
pnpm list 설치된 패키지와 의존성 트리를 조회한다.
pnpm store pnpm 패키지 저장소를 점검하거나 정리한다.

주요 CLI 명령은 패키지 설치, 의존성 추가, 갱신, 조회, 저장소 관리 기능으로 구성된다.[5]

워크스페이스

[편집 | 원본 편집]

pnpm은 모노레포 또는 멀티 패키지 저장소를 위한 워크스페이스 기능을 내장하고 있다. 워크스페이스를 사용하려면 저장소 루트에 pnpm-workspace.yaml 파일을 두어야 한다. 워크스페이스 내부 패키지는 workspace: 프로토콜로 참조할 수 있으며, 이 프로토콜을 사용하면 레지스트리의 외부 패키지가 아니라 로컬 워크스페이스 패키지만 해석 대상으로 삼도록 강제할 수 있다.[6]

packages:
  - "packages/*"
  - "apps/*"
{
  "dependencies": {
    "@example/shared": "workspace:*"
  }
}

pnpm 11은 2026년 4월 28일 공개되었다. 이 버전은 Node.js 22 이상을 요구하며, pnpm 자체가 순수 ESM으로 배포된다. 또한 공급망 보안 기본값 강화, npm CLI에 위임하지 않는 자체 publish 흐름, SQLite 기반 저장소 인덱스, 전역 설치 격리 등이 주요 변경점으로 소개되었다. 2026년 6월 5일 공개된 pnpm 11.5.2는 lockfile 검증, peer dependency 해석, Windows 네트워크 요청 종료 시 충돌 회피, 동시 설치 상황에서의 패키지 materialization 문제 수정 등을 포함한 패치 릴리스이다.[7]

npm과의 차이

[편집 | 원본 편집]

npm은 Node.js의 표준 패키지 매니저로 널리 사용되며, pnpm은 npm 레지스트리와 package.json 생태계를 활용하면서 설치 구조와 저장 방식에서 차이를 둔다. pnpm은 패키지를 저장소에 한 번 보관하고 프로젝트별로 링크하는 방식, 엄격한 의존성 접근, pnpm-lock.yaml 기반 잠금 파일, 모노레포 워크스페이스 기능을 주요 차별점으로 삼는다.[1][2]

활용 분야

[편집 | 원본 편집]

pnpm은 다음과 같은 환경에서 자주 사용된다.

  • 여러 Node.js 프로젝트를 동시에 다루어 로컬 디스크 사용량을 줄이고 싶은 개발 환경
  • 의존성이 많은 프론트엔드 또는 백엔드 JavaScript 프로젝트
  • 단일 저장소에서 여러 패키지를 관리하는 모노레포
  • CI/CD에서 설치 속도와 잠금 파일 재현성이 중요한 프로젝트
  • package.json에 명시되지 않은 의존성 접근을 줄이고 싶은 프로젝트

같이 보기

[편집 | 원본 편집]
  1. 1.0 1.1 Node.js, 「An introduction to the npm package manager」, https://nodejs.org/learn/getting-started/an-introduction-to-the-npm-package-manager, 확인일: 2026년 6월 7일.
  2. 2.0 2.1 2.2 pnpm, 「pnpm 공식 웹사이트」, https://pnpm.io/; pnpm GitHub 저장소, 「pnpm/pnpm README」, https://github.com/pnpm/pnpm, 확인일: 2026년 6월 7일.
  3. npm Registry, 「pnpm latest package metadata」, https://registry.npmjs.org/pnpm/latest, 확인일: 2026년 6월 7일.
  4. pnpm, 「Installation」, https://pnpm.io/installation, 확인일: 2026년 6월 7일.
  5. pnpm, 「CLI commands」, https://pnpm.io/cli/add; https://pnpm.io/cli/install; https://pnpm.io/cli/update; https://pnpm.io/cli/list; https://pnpm.io/cli/store, 확인일: 2026년 6월 7일.
  6. pnpm, 「Workspace」, https://pnpm.io/workspaces, 확인일: 2026년 6월 7일.
  7. pnpm, 「pnpm 11.0」, https://pnpm.io/blog/releases/11.0; GitHub, 「Release pnpm 11.5.2 · pnpm/pnpm」, https://github.com/pnpm/pnpm/releases/tag/v11.5.2, 확인일: 2026년 6월 7일.