
사실 나는 pnpm을 쓰면서도 정확한 이유를 잘 알지 못했다.
프로젝트를 시작할 때 그냥 자연스럽게 pnpm을 선택했다.
이유는 단순했다.
“요즘 다 pnpm 쓴다던데?”
“설치 속도가 빠르다던데?”
그 정도면 충분하다고 생각했다.
어차피 패키지 매니저는 npm, yarn, pnpm 중 하나일 뿐이라고 여겼다.
그런데 문득 이런 생각이 들었다.
나는 왜 pnpm을 쓰는 걸까?
정말 단순히 빠르기 때문일까?
어쩌면 ‘남들이 많이 쓰니까’라는 이유로 아무 생각 없이 선택하고 있었던 건 아닐까?
그래서 이번에는 막연한 이유가 아니라, 구조적인 이유를 이해해보기로 했다.
pnpm은 왜 등장했는지,
모노레포와는 어떤 관계가 있는지,
그리고 나는 왜 이 도구를 계속 쓰고 있는지.
하나씩 정리해보려 한다.
🧱 모노레포라는 개념부터 이해하기
pnpm 이야기를 하려면
먼저 모노레포(Monorepo)를 알아야 했다.
모노레포는 간단히 말하면,
여러 프로젝트를 하나의 Git 저장소에서 관리하는 방식이다.
예를 들어,
📦 하나의 저장소
├─ web (사용자 웹)
├─ admin (관리자 페이지)
└─ ui (공통 컴포넌트)
이렇게 하나의 레포 안에서
여러 앱과 공통 코드를 함께 관리하는 구조다.
🤔 왜 이렇게 할까?
- 공통 UI를 한 번만 수정하면 모두 반영된다.
- 버전을 따로 맞출 필요가 없다.
- 협업이 더 수월하다.
- 코드 공유가 자연스럽다.
서비스가 커질수록 모노레포 구조가 더 유리해진다.
그리고 이런 구조를 빠르게 관리하기 위한 도구가 있다.
🚀 Turborepo의 등장
모노레포는 편하지만 단점도 있다. 프로젝트가 여러 개니까 빌드를 할 때마다 전부 다시 돌게 되면 느려질 수 있다.
그래서 등장한 도구가 바로 Turborepo 다.
이 도구는
- 변경된 부분만 빌드하고
- 캐시를 활용하고
- 작업을 병렬로 실행한다
즉,
모노레포를 빠르게 만들어주는 엔진 같은 존재다.
특히 Turborepo는 공식 문서에서도
pnpm 기반 예제를 기본으로 제공하고 있다.
https://turborepo.dev/repo/docs
Introduction
Welcome to the Turborepo documentation!
turborepo.dev
📦 그럼 pnpm은 왜 필요할까?
이제 다시 pnpm으로 돌아오면,
모노레포를 사용하면
- 패키지 수가 많아지고
- 의존성도 복잡해지고
- node_modules 크기도 커진다.
여기서 pnpm의 구조가 빛을 발한다.
pnpm은 패키지를
- 전역 저장소에 한 번만 저장하고
- 각 프로젝트에서는 심볼릭 링크로 연결한다.
그래서:
- 디스크 공간을 덜 쓰고
- 설치 속도가 빠르고
- 의존성 충돌이 줄어든다.
공식 문서에서도
pnpm은 workspace(모노레포) 환경을 기본적으로 지원하는 패키지 매니저로 소개된다.
Workspace | pnpm
pnpm has built-in support for monorepositories (AKA multi-package repositories,
pnpm.io
⚡ Next.js에서도 자연스럽게 쓰이는 pnpm
그리고 내가 주로 사용하는 Next.js 역시 Turborepo와 함께 사용하는 예시가 많고, 공식 가이드에서도 pnpm 기반 명령어를 함께 제공한다.
Next.js Docs | Next.js
Welcome to the Next.js Documentation.
nextjs.org
https://turborepo.dev/repo/docs/guides/frameworks/nextjs
Next.js
Learn how to use Next.js in a monorepo.
turborepo.dev
즉,
pnpm은 단순히 “빠른 패키지 매니저”가 아니라
모노레포 생태계에서 자연스럽게 선택되는 도구였다.
📌 내가 pnpm을 쓰는 이유
처음에는 단순히 “설치 속도가 빠르다”는 이유로 사용하기 시작했다.
npm보다 체감상 훨씬 빠르게 의존성이 설치되는 점이 가장 큰 매력이었다.
하지만 정리해보니, pnpm은 단순히 빠르기만 한 도구는 아니었다.
모노레포 구조와 workspace를 기본적으로 지원하고,
의존성 관리가 더 엄격해 프로젝트 규모가 커질수록 장점이 드러나는 구조였다.
아직 모노레포를 직접 운영해본 경험은 없지만,
프로젝트가 확장될 가능성을 고려해 더 안정적이고 관리하기 쉬운 선택지를 유지하고 있다.
이제는 단순히 “요즘 많이 써서”가 아니라, 왜 사용하는지 이해한 상태에서 선택한 도구가 되었다.
아래 글에서 패키지 매니저 비교와 함께 pnpm의 동작 원리를 정리했습니다.
[✨FRONTEND/📍React] - 패키지 관리자 비교
패키지 관리자 비교
프론트엔드 개발을 하다 보면 가장 먼저 마주치는 도구 중 하나가 패키지 매니저다.패키지 매니저는 프로젝트에 필요한 라이브러리를 설치하고, 버전을 관리해 주는 도구다. 대표적으로 npm, Yarn
bori-note.tistory.com
'✨FRONTEND > 📍Next.js' 카테고리의 다른 글
| [Next.js + GSAP] Failed to execute 'removeChild' on 'Node' 에러 원인과 해결 (0) | 2026.01.30 |
|---|---|
| Next.js App Router에서 React Query 쓰면서 metadata 쓰기 (0) | 2025.09.06 |
| Next.js App Router + Tailwind + Prettier + ESLint + husky 세팅하기 (2) | 2025.05.17 |
| 프로필 이미지 업로더 구현하기(feat. 이미지 미리보기) (1) | 2025.05.10 |
| 검색 기능 구현(feat. 디바운스) (0) | 2025.04.07 |