본문 바로가기
개발노트

Yarn Berry

by 전지적진영시점 2025. 5. 30.
Yarn berry를 도입하게 된 계기는 특정 프로젝트에 노드 버전이 명시되어있지 않아 CI/CD 환경 설정에서
노드 버전을 설정 후 빌드할 때 난항을 겪었습니다. (계속된 의존성 버전 충돌)
그래서 node 최신 안정화 버전으로 셋팅하는걸로 인프라팀과 논의 후 작업하는데 프로젝트에 내장된 패키지 버전을 마이그레이션하는 작업을 진행했습니다.
하지만 특정 패키지의 구버전을 캐싱하고 있는 파일을 모두 제거하고 재설치해도 계속 어디선가 구버전을 강제 설치하고 있어 
해결을 위해 패키지 관리 관련 문서를 찾아보았고 Yarn berry(v2)를 도입하게 되었습니다.

 

Yarn Berry

Yarn Berry는 Yarn 2.0 이상 버전을 지칭하는 별칭입니다.
기존에 사용하던 Yarn v1은 node_modules 구조를 사용했고, Yarn v2부터는 node_modules를 사용안하고 PnP(Plug'n'play) 사용합니다.
 
기존 패키지 관리 도구 : yarn (v1)
도입 패키지 관리 도구 : yarn berry (v2)
 
Yarn Berry의 장점
1. yarn을 프로젝트에 포함시켜 버전을 고정할 수 있습니다.
    - 기존 각 개발자들의 yarn 버전을 통일되어 있지 않아 yarn install의 결과가 다른경우가 발생할 수 있음
    - 모든 팀원이 동일한 yarn 환경에서 작업하므로 동작이 일치함
    - CI/CD 안정성, 어떤 서버든 같은 yarn 버전으로 yarn install이 실행됨
    - 오래된 프로젝트 유지보수에 용이 -> 과거 프로젝트도 특정 yarn 버전으로 유지 가능
 
2. Zero-Installs 지원 
    zero-installs란 Git 클론 직후 yarn install 없이 바로 개발/빌드/실행이 가능함
    이게 왜 가능하냐?
    -.yarn/cache/ 폴더에 모든 의존성 패키지를 저장하고 이를 깃에 커밋함 
      : 기존 node_modules는 깃에 커밋되지 않아 git clone 후 yarn install이 필요 
3. 의존성 충돌 최소화
Yarn Berry 구조 예시
my-project/
├── .yarn/
│   ├── cache/                # 패키지 압축 캐시 파일들이 있음 (.zip)
│   └── releases/             # yarn 버전 고정 (yarn-berry.js 등)
├── .yarnrc.yml               # Yarn 설정
├── package.json
├── yarn.lock

Yarn Berry 도입 시 주의사항

위에서 설명 드렸듯이 기존 yarn(v1)은 node_modules를 사용하고 새로 도입하는 yarn berry(v2)는 node_modules를 사용하지 않습니다.
오랜 기간 유지보수 해온 대규모 프로젝트는 node_modules 의존성이 크기 때문에 yarn berry를 도입하는 건 리스크가 있습니다.
따라서 전역 yarn은 v1을 사용하고 프로젝트마다 필요한 yarn 버전을 .yarn/releases에 고정하겠습니다.
 
레거시 프로젝트 
: yarn v1 사용 (2025.05.30 기준 최신  Yarn v1 버전 : 1.22.19)
  yarn v1 전역 설정 명령문 -> npm install -g yarn@1.22.19
or
: PnP를 꺼두고 node_modules 호환 모드로 설정
  - yarnrc.yml 파일 생성하여 아래 옵션 추가
    -> nodeLinker: node-modules
 
Yarn berry 프로젝트 
: yarn v2 사용
  yarn berry 설정 명령문 -> yarn set version berry

 

*********참고 자료*********
 

댓글