Pnpm: Fast & efficient 패키지 관리자

2025. 3. 15. 16:28·프로그래밍/도구

MonoRepo하기 좋은 패키지 관리자

TL;DR

hard-link 기반의 효율적인 의존성 관리 툴이다.
빠른 속도, 적은 용량을 사용하는 패키지 관리자이며 MonoRepo에 유용하다.
 


Pnpm (Performant npm)

공식문서의 Motivation 항목이다.
아래의 그림으로 Pnpm의 특징을 이해할 수 있다.

N개의 프로젝트라도, 한 번만 설치된다.

중앙 저장소에 의존성을 설치한다.
그리고 /node_modules에서는 hard-link를 통해 중앙 저장소를 참조한다.
한 번만 설치하면 되기 때문에, 속도와 용량이 줄어드는 건 당연한 이야기이다.
모노레포를 운용하게 된다면, 이 효율성은 더욱 체감이 될 것이다.
 
그렇다면, npm과 yarn은 이 문제를 몰랐을까?
 


 

Npm, Yarn과 /node_moduels의 투쟁기

Npm과 Yarn의 초기버전에도 이러한 문제를 인지하고 있었다.
그래서 종속모듈을 끌어올려서(hoist) 중복을 최소화하는 방식을 선택했다.
효율적이지만 사용하지 않는 모듈또한 node_modules에서 포함되는
유령 의존성(Phantom dependency) 문제가 발생했다.
 


 

Yarn_berry(Yarn v2)의 PnP와 Zero-install

Yarn-berry(Yarn v2)에서는 /node_modules 대신, zip으로 압축하는 과감한 선택을 한다.
그리고 .pnp.cjs 파일을 활용하여 zip의 의존성을 효율적으로 처리한다.
 
의존성이 zip으로 관리된다는 건, git으로 tracking이 된다는 것이다.
즉, 의존성을 설치할 필요가 없다. CI/CD 과정에서 의존성을 설치할 필요가 없어진다.
 


Npm와 Yarn의 추격에도 건재한 Pnpm

pnpm의 효율적인 방식은 npm과 yarn에도 많은 영향을 끼쳤다.
Pnp, Zero-install, workspace 등등.. 필요한 기능들은 다 구현이 되었다.
그럼 Pnpm의 인기는 사그라들지 않았을까?
 
State of JS 2024의 Report에 따르면 여전히 건재하다.

2023년 부터 MonoRepo Rank 1!
Retenation Rank S!

 MonoRepo의 tool로서도 좋은 평가를 받는다.
Retenation 기반의 Rank에서도 S급을 판정 받았다.
 
Yarn-Berry의 pnp와 Zero-install 또한 혁신적이지만, zip방식, pnp.cjs등 러닝 커브가 높고 어색하다.
Pnpm은 기존의 /nodemodules 구조를 유지하면서 해결이 가능하다.
 
Yarn은 안정적인 구조, 다채로운 plugin 그리고 러닝커브가 존재한다.

Pnpm은 준수한 구조와 속도 그리고 러닝커브가 적다.

 

Simple함이 중요한가, 정교함이 중요한가의 호불호인 것 같다.

우리 프로젝트에는 Simple이 더 중요해서 Pnpm을 사용하기로 했다.

 

관련 아티클

 

패키지 매니저의 과거, 토스의 선택, 그리고 미래

토스는 왜 패키지 매니저로 Yarn을 선택했을까요? 이번 라이트닝 토크에서는 JavaScript의 패키지 매니저, 동작 방식, 그리고 토스의 선택과 앞으로의 방향성에 대해 이야기해 보려고 해요.

toss.tech

 

State of JavaScript 2024: Libraries

 

2024.stateofjs.com

 

Fast, disk space efficient package manager | pnpm

Fast, disk space efficient package manager

pnpm.io

저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 > 도구' 카테고리의 다른 글

UV: Rust 기반 python_manager  (1) 2024.12.23
'프로그래밍/도구' 카테고리의 다른 글
  • UV: Rust 기반 python_manager
Tagite
Tagite
예술가가 아닌, 문제 해결사를 향한 여정.
  • Tagite
    수단이 목적이 되지 않도록
    Tagite
  • 전체
    오늘
    어제
    • 분류 전체보기 (8)
      • 프로젝트 (3)
        • 1. ERP (3)
      • 프로그래밍 (4)
        • 기본기 (2)
        • 도구 (2)
      • 마음가짐 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    gRPC
    monorepo
    yarn
    ts-rest
    패키지 관리자
    graphQL
    NPM
    JS
    JIRA
    react
    trpc
    Rye
    모노레포
    repl
    협업
    pnpm
    계약에 의한 개발
    github
    NestJS
    Statement
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
Tagite
Pnpm: Fast & efficient 패키지 관리자
상단으로

티스토리툴바