최초 작성일 : 2024.09.28
최종 수정일 : 2024.09.28
1. 개요
이번에 토스에서 진행한 "프론트엔드 파이트 클럽"에 온라인으로 참관하게 되었다. 토론 주제중 하나가 "yarn vs pnpm"이었는데 토론 내용이 인상적이어서 이번 기회에 두 패키지매니저의 특징을 간단하게 비교해보았다.
2. yarn

yarn 공식 홈페이지 : https://yarnpkg.com/
Home page | Yarn
Yarn, the modern JavaScript package manager
yarnpkg.com
yarn은 Facebook(현 Meta)에서 기존 npm의 속도, 안정성 문제를 해결하기 위해 새로 설계해 만든 패키지 매니저이다.
yarn은 속도, 안정성, 보안성을 핵심 철학으로 갖고 있으며, 프로젝트 관리는 @yarnpkg/core, 명령어 실행은 @yarnpkg/cli등 모듈화된 구조를 갖고 있다.
특징
- 빠른 속도
패키지 설치시 병렬 처리를 통해 속도가 빠르다. - offline caching
패키지를 설치할 때 .yarn/cache에 압축 형태로 패키지를 저장한다. 이후 yarn은 .yarn/cache에서 패키지를 검색함으로써 오프라인 상황에서도 패키지를 설치할 수 있다. - Plug'n'Play
node_modules를 사용하지 않고도 패키지를 관리할 수 있다. .pnp.cjs를 통해 패키지가 어디있는지 알리고 Node.js가 이를 기반으로 패키지를 찾아 로드한다.
3. pnpm

pnpm 공식 홈페이지 : https://pnpm.io/
Fast, disk space efficient package manager | pnpm
Fast, disk space efficient package manager
pnpm.io
pnpm역시 기존 npm이 갖고 있는 단점을 해결하고 빠르고, 효율적인 관리를 위한 패키지 매니저이다.
패키지를 공유함으로써 디스크 사용 효율을 높이고, 빠른 속도를 기본 철학으로 갖고 있다.
특징
- 효율적인 디스크 관리
만약 프로젝트가 100개가 동일한 패키지를 이용한다면 디스크 에는 동일한 패키지 100개가 설치된다. pnpm을 패키지를 중앙 저장소에 저장하고 관리하는 방식을 이용하기 때문에 동일한 패키지가 중복해서 설치되는 비효율성을 막을 수 있다. - 빠른 속도
의존성 해결 - 디렉토리 구조 계산 - 의존성 연결 세 단계 설치 과정을 통해 기존 npm보다 속도가 빠르다. - non-flat node_modules
pnpm은 모든 패키지를 중앙 저장소에 저장하고 node_modules에는 symbolic link또는 hard link를 통해 연결한다. 이를 통해 프로젝트는 명시적으로 설치한 패키지에만 접근할 수 있다.
4. 어떤걸 써야 할까?
"반드시 이걸 써야 한다!"는 없다. 진행할 프로젝트의 규모, 특징을 파악하고 그에 맞는 패키지 매니저를 선택하는것이 좋을 것이라 생각한다.
'프론트엔드' 카테고리의 다른 글
| [Javascript] Promise, async, await를 알아보자! (10) | 2024.11.07 |
|---|---|
| [React-Native] XCode16 업데이트 후 unsupported option '-G' for target 'arm64-apple-ios15.6-simulator' 오류 해결 (1) | 2024.10.25 |
| [후기] TDD를 체험해보자 - Newstream (2) | 2024.09.23 |
| useCallback, useMemo, React.memo에 대해 알아보자! (0) | 2024.09.10 |
| [Jest] Jest의 unit test와 matcher들을 알아보자 (2) | 2024.09.05 |