[JavaScript] npm, yarn, pnpm 패키지 매니저 비교

Sara Jo·2025년 3월 31일
post-thumbnail

패키지 매니저(Package Manager)란, 라이브러리를 설치하거나 프로젝트 의존성을 관리하고, 버전을 고정하거나 공유할 때 사용되는 도구이다. 즉, 외부 코드를 효율적으로 가져와 프로젝트에 통합할 수 있도록 도와주는 시스템이라고 할 수 있다.

현재 자바스크립트 생태계에서 대표적인 패키지 매니저에는 npm, yarn, pnpm이 있는데, 이 세 가지 패키지 매니저를 하나씩 알아보고 서로 비교해보자!


1. npm (Node Package Manager)

  • npm은 가장 오래됐고, 기본적인 패키지 매니저이다.
  • Node.js를 설치하면 같이 설치되어 따로 설정할 필요가 없으며, 전 세계적으로 가장 많이 사용되는 도구이다.
  • package-lock.json을 통해 의존성 버전을 고정할 수 있고, 사용 방법도 비교적 단순하다.

하지만 npm의 가장 큰 단점 중 하나는 중복 설치로 인한 디스크 낭비이다.

❓왜 중복되는 패키지가 많은가?

npm각 패키지가 필요로 하는 의존성을 해당 위치에 따로따로 설치한다.
예를 들어, A라는 패키지가 lodash@4.17.15를 필요로 하고, B는 lodash@4.17.21을 필요로 한다면, 이 두 버전은 각각 따로 node_modules에 설치된다.
뿐만 아니라, 동일한 패키지를 여러 프로젝트에서 사용할 경우에도 각 프로젝트의 node_modules 안에 개별적으로 복사되어 설치된다.

이러한 구조 때문에 디스크 사용량이 빠르게 증가하고, 프로젝트가 많아질수록 관리가 어려워질 수 있다.


2. Yarn

  • Yarn은 Facebook에서 만든 npm의 대안으로, 안정성과 속도를 개선한 패키지 매니저이다.
  • yarn.lock을 통해 더 일관된 의존성 고정을 제공하며, 병렬 설치와 캐시 기능을 통해 빠른 속도를 자랑한다.

하지만 최근에는 Yarn v2 (Yarn Berry)로 업그레이드되면서 설정이 복잡해지고, 기존 방식과의 호환성 문제가 발생하기도 해서 오히려 이전 버전인 yarn v1을 계속 사용하는 경우도 많다.


3. pnpm

  • npm과 거의 동일한 명령어를 사용하면서도, 내부적으로는 더 효율적인 구조를 가진다.
  • 설치 속도, 디스크 절약, monorepo 지원 측면에서 강력하다.

✅ 디스크 공간 절약

pnpm은 패키지를 설치할 때 하드 링크(hard link) 방식을 사용한다.
즉, 실제 패키지는 공통 저장소에 한 번만 설치되고, 각 프로젝트에서는 그 파일에 대한 링크만 생성된다.

📌 하드 링크란?

  • 하드 링크는 하나의 파일을 여러 위치에서 마치 별도로 존재하는 것처럼 참조할 수 있게 해주는 기술이다.
  • 실제로는 하나의 파일만 존재하지만 여러 프로젝트에서 이를 공유할 수 있기 때문에 디스크 공간을 크게 절약할 수 있다.
  • 덕분에 동일한 라이브러리를 여러 프로젝트에서 사용하더라도, 디스크에는 한 번만 설치되고 링크만 생성되므로 효율적이다.

✅ 깔끔한 node_modules 구조

  • npm은 의존성을 트리 구조로 설치해서, 종속성끼리 충돌이 나거나 누가 뭘 의존하는지 헷갈릴 때가 있다.
  • pnpm은 엄격한 구조를 유지하며 직접 명시하지 않은 패키지는 사용할 수 없게 되어있어서, 실수로 패키지를 설치하지 않고 쓰다가 에러 나는 일을 방지할 수 있다.

✅ monorepo에 강함

Monorepo란 여러 개의 프로젝트(또는 패키지)를 하나의 저장소에서 함께 관리하는 방식이다. 예를 들어, 프론트엔드, 백엔드, 공통 컴포넌트를 각각 packages/ 폴더 아래에 두는 구조인데, pnpm은 이런 구조에 최적화된 기능을 제공한다.

  • pnpm workspace 기능을 통해 여러 패키지를 동시에 설치하고 연결할 수 있다.
  • 동일한 라이브러리를 여러 패키지에서 사용할 경우에도, 중복 설치 없이 하나의 저장소에서 관리된다.
  • 내부 패키지 간 의존성 연결이 간편하고, 자동 감지가 가능하다.

📌 패키지 매니저 비교

항목npmyarnpnpm
설치 속도보통빠름매우 빠름
디스크 사용량많음보통적음
락파일package-lock.jsonyarn.lockpnpm-lock.yaml
하드 링크 사용❌ 사용 안 함❌ 사용 안 함✅ 사용함
monorepo 지원❌ 낮음⚠️ 보통✅ 높음

0개의 댓글