모노레포 이식을 고민하며 여러 가지 도구를 알아보았지만, 익숙한 도구와 작업 공간, PnP라는 꽤 매력적인 조합 덕분에 Yarn Berry를 도입하기로 결정했습니다. 이미 Yarn Classic을 사용하고 있다면, 어떻게 버전 업그레이드를 진행해야 할지 알아볼까요?
Yarn Berry로 마이그레이션하기
Yarn Berry로 마이그레이션하는 과정은 아래와 같습니다. 생각보다 간단하죠? 모든 의존성이 이미 설치되어 있음을 전제로 하고 있습니다.
- yarn version 변경하기
- 설치된 의존성 마이그레이션하기
- PnP 적용하기
- 기타 툴 설치
천천히 해 볼까요?
1. Yarn 버전 변경하기
버전 변경은 굉장히 간단합니다. 루트 디렉토리에서 커맨드라인에
yarn set version berry
라고 입력하면 yarn이 버전을 업그레이드합니다. 

2. 설치된 의존성 마이그레이션 하기
버전을 변경하면서 생긴 .yarnrc.yml 파일에
nodeLinker: node-modules
옵션을 추가하고 yarn install
명령어를 실행합니다. 기존에 생성된 yarn.lock 파일을 berry 버전으로 마이그레이션 하는 과정입니다.


3. PnP 적용하기
마이그레이션 하기 위해 임시로 설정했던 nodeLinker 옵션을 제거하고 다시 한번
yarn install
을 수행하면 마이그레이션 된 .lock 파일을 읽어 PnP 버전으로 의존성을 설치합니다.



4. ZipFS 설치하기
위의 이미지에서 볼 수 있는 것처럼 PnP는 의존성을 zip 파일로 관리합니다. 기존 node_modules처럼 낱개 파일로 분리되어 있지 않으니 zip 파일을 읽을 수 있도록 vscode 확장 프로그램을 설치해 주어야 합니다.
또, 타입스크립트를 사용하는 경우 개별 모듈의 타입 파일을 읽고 파싱할 수 있도록 툴킷을 설치해 주어야 합니다. 이 툴킷은
yarn dlx @yarnpkg/sdks vscode
명령어로 설치할 수 있습니다.

이렇게 하면 우선 마이그레이션은 완료입니다. 생성된 파일들을 git에서 관리하면 zero-install도 실현 가능하고, 프로젝트 구성원들끼리 완전히 같은 의존성을 사용한다는 전제에 프로젝트를 운용할 수 있게 됩니다. 물론, 설치 시간과 용량이 줄어들었으니 docker에서 빌드할 때에도 시간이 많이 단축되고요!
공식문서에 마이그레이션 관련 설명이 워낙 잘 되어 있어서 대부분의 문제들은 해결이 가능합니다. 워크스페이스 기능도 향상되어 모노레포에 도전해 보기에도 좋으니 한번 시도해 보는 건 어떨까요?