C.W.K.
Stream
Lesson 01 of 05 · published

pnpm 이 npm 이 안 푸는 무엇을 푸나

~11 min · pnpm, overview, javascript

Level 0초심자
0 XP0/55 lessons0/16 achievements
0/80 XP to next level80 XP to go0% complete

pnpm — Performant npm — 은 가장 무거운 npm 사용자가 가진 두 구체 불만을 fix 하려고 만들어졌어: 낭비된 디스크 공간phantom dependencies. 둘 다 해결, 더 빠르게, 같은 package.json 으로. 그래서 pnpm 이 이 quest 에서 가장 쉬운 'npm 떠나기' 마이그레이션.

디스크 공간. npm 이 모든 패키지를 모든 프로젝트의 node_modules 에 복사. 10개 프로젝트가 React 쓰면 React 가 디스크에 10번. pnpm 은 모든 패키지 버전을 ~/.pnpm-store/ 의 글로벌 content-addressable store 에 한 번 저장, 각 프로젝트의 node_modules 에 hard link 만듦. Hard link 는 inode 레벨로 디스크 공유; 파일은 디스크에서 물리적으로 같지만 여러 path 에서 reach 가능. 결과: 전체적으로 50-70% 적은 디스크 사용 + 바이트가 이미 있어서 install 극적으로 빠름.

Phantom dependencies. npm 의 flat node_modules 가 코드를 package.json 에 선언 안 된 패키지 우연히 import. pnpm 은 strict 중첩 구조 사용 — 명시적으로 선언한 패키지만 reach. 코드가 import x from 'lodash' 하지만 pnpm add lodash 안 했으면 즉시 실패. Strictness 가 기능.

pnpm v10 (2025년 1월) 이 디폴트 보안 추가 — lifecycle scripts (postinstall 등) 가 패키지 별로 opt-in 안 하면 차단. 이 한 변경이 supply-chain 공격의 큰 클래스 제거 — 악성 패키지의 postinstall script 가 모든 install 마다 임의 코드 실행. SHA256 hashing 전체. 더 빠른 cold install 위한 실험적 Global Virtual Store.

pnpm 이 npm 과 같은 package.json 읽음. lockfile 은 package-lock.json 대신 pnpm-lock.yaml. CLI surface 가 대부분 drop-in 호환. 마이그레이션은 한 pnpm import 명령.

Code

왜 pnpm 이 디스크에서 이김·text
  npm:
    project-a/node_modules/react/    (복사본)
    project-b/node_modules/react/    (또 복사본)
    project-c/node_modules/react/    (또또 복사본)
    ... 10개 프로젝트, 10개 복사본

  pnpm:
    ~/.pnpm-store/v3/files/...react@19.0.0  (단일 물리 복사본)
    project-a/node_modules/react -> hard link
    project-b/node_modules/react -> hard link
    project-c/node_modules/react -> hard link
    ... 10개 프로젝트, 디스크에 1개 복사본

External links

Exercise

디스크에 JS 프로젝트 여러 개 있으면 'du -sh */node_modules' 돌려. 계산해 — 그 합계 중 얼마가 중복된 React/Next/lodash/typescript 복사본? 그 숫자가 pnpm 의 content-addressable store 가 압축할 거.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.