Yarn to Yarn Berry 마이그레이션
Yarn to Yarn Berry 마이그레이션

Yarn to Yarn Berry 마이그레이션

작성자
이태용이태용
카테고리
yarn
태그
yarn berry
migration
 
 

Yarn Berry는 무엇일까?

Yarn classic(v1) 상위 버전인 패키지 관리 시스템이다. 패키지 관리 시스템은 대표적으로 NPM, Yarn, PNPM등이 있다.
 
Yarn Berry는 전통적인 패키지 매니저의 문제(의존성 라이브러리 버전 불일치와 부재 등)를 Plug'n'Play(PnP) 방식을 통해 해결한다. Plug'n'Play(PnP)는 간단히 말해서 node_modules를 제거하고 의존성 라이브러리들을 압축 형태로 저장하는 방법이다. 따라서 빌드 시에 매번 큰 모듈을 다운로드할 필요가 없어지며, 해당 모듈을 찾을 때 node_modules를 순회할 필요 없이 해당 라이브러리의 압축 파일 내에서 필요한 부분만 효율적으로 불러올 수 있다.
 

Yarn Berry 마이그레이션 이유

공부 목적이다. 내 사이드 프로젝트는 규모가 작지도 크지도 않기 때문에 모듈 임포팅과 빌드 속도에서 트레이드오프 할 가치를 찾지 못했다. 하지만, “어느 정도 개선이 될까?” 기대감 하나로 진행했다.
 
사이드 프로젝트의 기술 스택을 결정할 때 Yarn을 선택한 이유는 NPM보다 Yarn이 더 많은 이점을 제공한다고 판단했기 때문이다. NPM은 한 번 업데이트되면 모든 버전이 업데이트되며, 라이브러리의 의존성 버전이 서로 연결되어 있어 라이브러리를 제거하면 관련된 다른 의존성 버전도 함께 사라지는 이슈가 발생할 수 있다. 반면 Yarnyarn.lock 파일을 통해 의존성을 관리하기 때문에 빌드나 업데이트가 발생해도 기존의 의존성 라이브러리들이 안전하게 유지된다.
NPM의 장점은 다양한 라이브러리들이 내장되어 있어 다운로드하기 편리하다는 점인데, 내 프로젝트는 큰 규모가 아니며 사용해야 할 라이브러리들이 Yarn에서도 설치 가능하고, 다양한 라이브러리를 선택할 필요성이 없었기 때문에 NPM에는 특별한 메리트를 느끼지 못했다.
 
NPMYarn 모두 비효율적인 의존성 검색과 설치가 발생한다.
이러한 문제들을 PnP 방식이 시원하게 해결해 주었고, PnP 방식을 채택한 게 Yarn Berry이다.
 

Yarn Berry 마이그레이션

기존에 Yarn으로 사용했기 때문에 바로 Yarn Berry로 셋팅해주었다.
$ yarn set version berry
notion image
 
node_Modules을 삭제한 후 yarn install 하면 아래와 같이 라이브러리들이 알집으로 압축되어 설치되고 있는 것을 볼 수 있다.
notion image
notion image
 
설치가 완료되면 최상단 루트 디렉토리에 .yarnrc.yml 파일이 자동으로 만들어진다. 키값 nodeLinkernode_modules로 설정되어 있는데 pnp로 수정후 다시 yarn install 해주어야 한다. yarnPathPnP가 바라보고 있는 경로이다.
yarnPath: .yarn/releases/yarn-4.0.2.cjs nodeLinker: pnp
.yarnrc.yml
 
Yarn Berrynode_modules를 생성하지 않고, 압축 파일 형태로 의존성을 설치한다. node_modules 디렉토리가 약 500MB 정도 차지했지만, Yarn Berry PnP를 사용했을 때 의존성 디렉토리 크기는 153.2MB로 현저히 줄어들었다.
notion image
 
빌드 속도에서는 차이를 느끼지 못했다…
notion image
 

Zero Install 환경

Yarn Berry의 또 다른 장점은 Zero Install이다. Zero Install은 예를 들어 깃허브 레파지토리에 올려져 있는 프로젝트를 클론 받았을 때 install 받을 필요 없게 만들어준다. Zero Install 원리는 기존 node_modules.gitignore로 원격에 숨겨지도록 해놓았지만, Yarn Berry는 의존성 버전 관리를 원격 레파지토리에 같이 올려놓아 주기만 하면 자동으로 환경이 구축된다.
 
방법은 .gitignore에 아래와 같이 내용을 추가해 준 후 원격에 푸쉬 해주면 된다.
.yarn/* !.yarn/cache // Zero-Install !.yarn/patches !.yarn/plugins !.yarn/releases !.yarn/sdks !.yarn/versions
.gitignore
 
Zero Install 환경이 필요 없다면 아래와 같이 .gitignore를 추가해준다.
.yarn/* !.yarn/patches !.yarn/releases !.yarn/plugins !.yarn/sdks !.yarn/versions .pnp.*
.gitignore
 

댓글

guest