pnpm 코어 팀이 v12를 위해 Rust 기반의 재작성(rewrite) 버전을 출시하고 있습니다. 이를 통해 warm install 시간은 381ms에서 12ms로, clean install 시간은 6.5s에서 2.2s로 대폭 단축되었습니다. 이러한 속도 향상은 매 초가 중요한 지속적 통합(CI) 파이프라인에서 패키지를 실행하는 개발자들에게 가장 큰 의미가 있습니다.
지금 재작성이 중요한 이유
pnpm은 이미 속도 면에서 많은 경쟁자를 압도하고 있지만, Node.js 위에서 실행되기 때문에 명령어를 실행할 때마다 시작 비용(startup cost)이 발생합니다. 이 비용은 의존성을 반복적으로 가져오고 연결하는 CI 작업에서 눈에 띄는 지연 시간으로 나타납니다. 핵심 작업을 pacquet이라는 코드명의 네이티브 Rust 바이너리로 옮김으로써, 팀은 Node.js 부트스트랩 과정을 제거하고 Rust가 단일 스레드로 대규모 파일 시스템 변동(churn)을 처리할 수 있도록 했습니다.
이번 재작성은 재설계가 아닌 포팅(port)입니다. 모든 플래그, lockfile 형식, 그리고 익숙한 node_modules 레이아웃이 그대로 유지되므로 기존 스크립트와 워크플로우를 변경할 필요가 없습니다. v11에서는 이미 pacquet 백엔드를 선택하여 사용할 수 있으며, v12에서는 가져오기(fetching) 및 연결(linking) 작업의 기본값으로 설정됩니다.
측정 가능한 성능 향상
유지 관리자가 제공한 벤치마크 결과는 다음과 같습니다:
- Warm install (캐시를 사용한 반복 실행): 381ms → 12ms, 30배 향상.
- Clean install (캐시 없음): 6.5s → 2.2s, 시간 절반 이상 단축.
리스크 및 트레이드오프
Rust 엔진은 아직 알파 단계입니다. 팀은 v12가 프리릴리스(pre-release) 단계를 벗어날 때까지 프로덕션 환경에서 사용하는 것을 권장하지 않습니다.
지금 바로 테스트하는 방법
개발자는 pnpm self-update next-12를 실행하여 최신 프리릴리스 바이너리를 가져옴으로써 새로운 백엔드를 테스트할 수 있습니다. 이 명령어는 프로젝트의 pnpm-lock.yaml이나 node_modules 레이아웃을 변경하지 않고 JavaScript 엔진을 Rust 엔진으로 교체합니다. CI 파이프라인에 미치는 영향을 평가하려는 팀은 일회성 러너(disposable runner)를 실행하여 pacquet 백엔드를 활성화한 후, 현재 설정과 빌드 시간을 비교해 보아야 합니다.
더 넓은 트렌드
pnpm의 이러한 움직임은 컴파일 언어로 도구들을 이전하려는 흐름을 반영합니다. Biome, Oxc, Deno와 같은 프로젝트들은 모두 개발자 워크플로우의 지연 시간을 줄이기 위해 성능이 중요한 구성 요소들을 Rust 또는 Go로 재구축했습니다.
향후 주목할 점
- 안정성 마일스톤: 릴리스를 모니터링하면 프로덕션 환경에서 안전하게 사용할 수 있는 시점을 알 수 있습니다.
- 기능적 동등성(Feature parity): 사용자는 기능 차이가 있는지 변경 로그(changelog)를 계속 확인해야 합니다.
요약하자면, pnpm의 Rust 재작성은 이미 빠른 패키지 매니저를 반복 설치 시 거의 즉각적인 수준으로 만들어주며, 신규 설치 시간은 절반 이상 단축합니다. 매일 밤 의존성 해결에 수 분을 소비하는 팀에게 이번 업그레이드는 워크플로우를 전면 개편하지 않고도 CI 비용을 눈에 띄게 줄여줄 것을 약속합니다.
