yarn&pnpm 비교

wonyu·2023년 8월 22일

pnpm 공식 문서

Get started

  1. pnpm 설치
# brew
brew install pnpm
# npm
npm install -g pnpm
  1. yarn.lock 파일을 기반으로 lock 파일 생성
pnpm import
  1. pnpm을 사용하여 패키지 설치
pnpm install
  1. 실행
pnpm run <스크립트>

yarn, pnpm

yarn과 pnpm을 사용했을 때 node_modules 폴더 구조는 각각 아래와 같습니다.
(해당 글에서 yarn은 yarn classic(v 1.x)을 의미합니다.)

yarn:

node_modules w/yarn

pnpm:

node_modules w/pnpm

폴더 구조의 차이가 크다는 점이 가장 먼저 눈에 들어옵니다.

먼저 yarn을 사용했을 때 package.json에 명시되지 않은 많은 패키지들이 보이는데, 모든 패키지가 node_modules 폴더의 루트로 호이스팅되기 때문에 위와 같은 구조로 이루어진 것입니다. 이러한 구조에서 소스 코드는 프로젝트에 디펜던시로 추가되지 않은 디펜던시에 접근할 수 있어서 보안상 좋지 않습니다.

pnpm의 경우에는 symlink(symbolic link)를 사용하여 프로젝트에 명시된 디펜던시들만 node_modules 폴더의 루트에 추가합니다. 즉, yarn의 flat한(=모든 패키지가 루트 위치에 나열된) node_modules와 달리 패키지를 격리된 상태로 유지하기 때문에 package.json에 선언된 디펜던시만 프로젝트에서 접근할 수 있습니다.


두 번째로 pnpm에서 동일한 패키지는 한 번만 설치되며 모든 파일은 디스크의 단일 위치에 저장됩니다. 따라서 추가적인 디스크 공간을 사용하지 않습니다.

그리고 pnpm을 사용할 경우 여러 버전의 디펜던시에 의존할 때, 다른 파일들만 저장소에 추가됩니다. 예를 들어 100개의 파일이 있고 새 버전에서 1개의 파일만 변경된 경우 pnpm update는 전체 종속성을 변경하는 대신 저장소에 새 파일 하나만 추가합니다.

반면 yarn을 사용하면 100개의 프로젝트가 어떤 패키지에 의존할 때, 해당 패키지는 100번 설치되고 디스크에서 100개의 위치에 기록될 가능성이 높습니다.

따라서 pnpm을 사용할 경우 디스크 공간을 절약할 수 있고 설치 속도가 빨라집니다.


실제로 pnpm을 사용해서 패키지를 설치했을 때 yarn에 비해 체감될 정도로 속도가 빠르다고 느꼈습니다.

측정 결과 디펜던시가 대략 10개 정도인 작은 프로젝트임에도 설치 시간이 3배 이상 차이났습니다.

yarn:

yarn install

pnpm:

pnpm install


1개의 댓글

comment-user-thumbnail
2023년 8월 22일

저도 pnpm 을 사용하고 있어요!! 좋은 글 감사합니다 :)

답글 달기