FEInterview Prep

build-tools · medium priority

npm vs yarn vs pnpm — 패키지 매니저 비교

의존성 관리의 진화 — 왜 pnpm이 대세가 됐나

basic 난이도2시간토스당근카카오네이버
시작 전
이해도
매우 낮음

학습 개요

탄생 배경

쉬운 설명

복잡한 개념을 실생활 비유로 설명합니다.

도서관 공유 책장

pnpm은 중앙 도서관(~/.pnpm-store)에 책을 한 권씩 보관하고, 각 학생(프로젝트)에게는 그 책에 대한 독서 카드(하드링크)만 줍니다. npm/yarn은 각 학생이 같은 책을 복사해서 가지고 있는 구조입니다. pnpm 방식이 공간 효율적이고 빠릅니다.

핵심 개념

패키지 매니저 비교
npm v7+yarn classicyarn berrypnpm
설치 속도중간빠름빠름매우 빠름
disk 공간많음많음중간매우 적음
유령 의존성있음있음없음없음
Workspacesv7+v1+v2+v1+
실무 사용기본값레거시일부점점 증가

**유령 의존성(Phantom Dependency)**: package.json에 명시하지 않은 패키지를 사용할 수 있는 문제. npm/yarn은 의존성 hoisting으로 모든 패키지가 node_modules 최상위에 있어서 명시하지 않은 패키지도 import 가능합니다. pnpm은 심볼릭 링크 구조로 이를 원천 차단합니다.

실무 적용

어떤 상황에서 사용하는가

모노레포 프로젝트에서 패키지 매니저 선택

어떻게 적용하는가

토스, 카카오 등 대기업은 pnpm + Turborepo 조합을 많이 사용합니다. 빠른 설치, 적은 disk 사용, 엄격한 의존성 관리가 모노레포에 유리합니다. 기존 npm/yarn 프로젝트는 마이그레이션 비용 대비 효과를 고려해 결정합니다.

흔한 실수와 안티패턴

  • pnpm으로 마이그레이션 시 유령 의존성 문제가 드러남 — package.json에 빠진 의존성 추가 필요
  • CI에서 pnpm store 캐시 설정 없이 실행하면 매번 재설치로 느림
  • yarn berry PnP 모드는 일부 도구와 호환 문제 있음
  • lock 파일 충돌 시 수동 해결 필요 — 자동 병합 불가

면접 질문

기초토스당근

답변 방향 힌트

content-addressable store, 유령 의존성

반드시 언급할 키워드

  • 하드링크로 disk 공간 절약
  • 유령 의존성 방지
  • 모노레포 지원

예상 꼬리 질문

  • yarn berry의 PnP 모드는 어떻게 작동하나요?
  • package.json의 peerDependencies는 무엇인가요?

학습 자료