Yarn Berry를 왜 사용했는가?
Yarn Berry는 npm과 비교하여 여러 가지 장점을 제공하는 패키지 매니저입니다. 특히 대규모 프로젝트에서 효율성을 극대화할 수 있는 다양한 기능을 제공하지만, 일부 호환성 문제를 고려해야 합니다. Yarn Berry를 도입하려는 팀은 이러한 장점과 단점을 잘 고려하여 선택하는 것이 좋습니다.
얼마 전 2023 ‘토스’ 윈터 인턴 채용에서 패키지 매니저로 Yarn Berry
를 사용한다고 명시되어 있었습니다. 그때부터 궁금증이 생겼습니다. 처음 공부할 때는 Node.js에서 제공하는 npm을 사용했고, 이후 멋사 6기 프론트엔드 스쿨에서 pnpm을 사용했습니다. Yarn이라는 패키지 매니저가 존재한다는 것은 알았지만, Yarn Berry
는 생소했습니다. 이번 기회에 Yarn을 사용해볼 겸 패키지를 Yarn Berry로 구성해보려 합니다.
Yarn을 알기 전, npm부터 알아보자!
npm의 등장과 한계
npm은 Node.js의 기본 패키지 매니저로, 오랜 기간 동안 많은 개발자들에게 사랑받아왔습니다. 하지만 npm도 몇 가지 단점을 가지고 있습니다.
성능 및 설치 속도(순차적 설치)
- npm은 패키지를 순차적으로 설치하기 때문에 대규모 프로젝트에서는 설치 속도가 느려지는 문제가 있습니다.
보안성 취약
- 초기 npm은
package-lock.json
파일이 없어 의존성 충돌이 자주 발생했습니다. 이로 인해 같은 프로젝트에서 개발 환경이 달라질 수 있었습니다.
- 초기 npm은
Yarn의 등장
Yarn은 npm의 이러한 단점을 보완하기 위해 Facebook에서 개발된 패키지 매니저입니다.
- 캐싱 기능: Yarn은 패키지를 캐싱하여 중복 다운로드를 방지합니다.
- 병렬 설치: Yarn은 패키지를 병렬로 설치하여 설치 속도를 크게 개선합니다.
yarn.lock
파일: 모든 디바이스에서 동일한 패키지 버전을 설치하여 버전 충돌 문제를 방지합니다.
현재 npm도 package-lock.json
파일을 제공하여 이러한 문제를 해결했지만, Yarn은 여전히 캐싱과 병렬 설치 등의 기능으로 더 나은 성능을 제공합니다.
Yarn Berry
Yarn의 두 번째 버전인 Yarn Berry는 2020년에 발표되었습니다. Yarn Berry는 패키지 관리 방식을 혁신적으로 개선하여 Plug'n'Play(PnP)
라는 새로운 방식을 도입했습니다.
Plug’n’Play(PnP)
기존의 패키지 관리 방식에서는 패키지를 프로젝트의 node_modules
디렉토리에 저장했습니다. 하지만 PnP는 패키지를 .zip
파일로 압축하여 .yarn/cache
폴더에 저장하고, 패키지 위치 정보를 .pnp.cjs
파일에 기록합니다.
이 방식의 장점은 다음과 같습니다:
- 성능 개선: 패키지 위치를 빠르게 찾을 수 있어 설치 시간이 단축됩니다.
- 중복 설치 방지: 같은 패키지를 여러 번 설치하지 않으므로 스토리지 용량이 절약됩니다.
node_modules
제거:node_modules
디렉토리가 필요 없어지며, 이로 인해 GitHub에 의존성을 포함시킬 수 있습니다.
Zero-Install
Yarn Berry는 zero-install
을 지원합니다. 즉, git clone
이후 별도의 설치 없이 프로젝트를 바로 사용할 수 있습니다. 브랜치 변경 시에도 필요한 의존성 패키지가 이미 존재하므로 yarn install
없이 프로젝트를 실행할 수 있습니다.
스토리지 효율성
패키지를 .zip
파일로 압축하여 저장하기 때문에, 스토리지 용량을 크게 절약할 수 있습니다. 예를 들어, npm을 사용할 때는 node_modules
디렉토리가 약 400MB를 차지했지만, Yarn PnP를 사용하면 의존성 디렉토리 크기가 120MB에 불과합니다.
Yarn Berry 사용 후기와 문제점
Yarn Berry를 사용하면서 몇 가지 문제를 경험했습니다. 그 중 하나는 Jest와의 호환성 문제였습니다.
Jest 호환성 문제
Yarn Berry에서 Jest를 사용하려고 할 때, 아래와 같은 에러 메시지가 발생했습니다.
이 에러는 Jest 버전 5에서 발생하는 호환성 문제로 보입니다. 이 문제를 해결하기 위해 Jest를 4버전으로 내리니 정상적으로 동작했습니다.
Yarn Berry의 장점
- Zero-Install: 별도의 설치 과정 없이 프로젝트를 바로 실행할 수 있어 편리합니다.
- 빠른 설치 속도: 병렬 설치와 캐싱 기능 덕분에 설치 속도가 빠릅니다.
- 스토리지 절약: 압축된 패키지로 인해 스토리지 사용량이 적습니다.
Yarn Berry의 단점
- 호환성 문제: 일부 라이브러리와의 호환성 문제가 발생할 수 있습니다.
- 학습 곡선: 새로운 개념(PnP, Zero-Install 등)을 익혀야 하므로 처음 사용하기에는 다소 어렵습니다.
결론
Yarn Berry는 npm과 비교하여 여러 가지 장점을 제공하는 패키지 매니저입니다. 특히 대규모 프로젝트에서 효율성을 극대화할 수 있는 다양한 기능을 제공하지만, 일부 호환성 문제를 고려해야 합니다. Yarn Berry를 도입하려는 팀은 이러한 장점과 단점을 잘 고려하여 선택하는 것이 좋습니다.