yarn berry가 무엇인지 알아보고 장점과 단점을 파악해보자!
🤔 yarn berry가 뭐야?
- Yarn Berry는 Node.js를 위한 새로운 패키지 관리 시스템.
- 기존의 npm, yarn v1 의 패키지 비효율적인 매니징 방법을 개선함.
😨 기존 NPM의 문제점
- lock 파일이 없다보니 생기는 패키지의 버저닝/의존성 이슈
- ex) 의존성이 커서 수백 개의 파일 중 단 몇 줄의 코드만 삭제해도 동작하지 않음.
- 보안 이슈
- 오픈소스 공유플랫폼 npm에서 컴퓨터에 백도어를 설치하는 악성코드가 포함된 자바스크립트 라이브러리가 발견.
- 백도어(backdoor)란 어떤 제품이나 컴퓨터 시스템, 암호시스템 혹은 알고리즘에서 정상적인 인증 절차를 우회하는 방법론을 뜻함.
- 다른 패키지가 즉시 포함될 수 있도록 하는 코드를 자동으로 실행. 필요하지 않은 코드도 같이 실행.
- 패키지가 늘어날 수록 성능 저하가 발생.
⇒ 위의 문제들을 해결하고자 2016년, Facebook을 중심으로 Google, Exponent, Tilde 회사들과 함께 기존에 있었던 npm 의 문제를 해결해보고자 새로운 패키지 매니저인 yarn을 발표함.
🤩 yarn v1의 장점
- yarn.lock파일 자동 생성. 어느 환경에서든 동일한 패키지를 설치하게 함.
- 의존성 트리 이슈는 lock파일과 설치 알고리즘을 통해 개선.
- 패키지 병렬 설치를 통한 성능 개선.
- cache directory를 통한 오프라인 미러링과 left-pad 이슈 방지.
- directory의 캐시를 오프라인에서도 그대로 쓸 수 있는 걸 말하는 듯?
😰 그래도 해결하지 못했다!?
npm과 yarn v1의 공통적인 문제점.
-
node_modules의 거대함과 depth의 문제.

- 간단한 패키지를 설치해도 node_modules의 depth와 용량은 커짐.
- next.js등과 같이 다양한 기능을 제공하는 프레임워크, 라이브러리를 사용하게 된다면 최소 몇백메가에서 기가 단위의 디스크 용량을 사용하게 됨.
- depth는 점점 깊어지고 설치, 삭제, 수정, 실행 등의 속도에 영향을 끼침.
- 패키지의 내용은 확인하지 못하고 기본적인 의존성 트리만 검증함.
- 의존성 트리란 이렇게 의존 관계이지만 흩어져있는 앱 내의 상태들 혹은 클래스들을 예쁜 트리형태로 만들어주는 것.
-
유령 의존성(Phantom Dependency).

의존성 트리가 왼쪽의 모습을 하고 있다고 가정.
- 직접 의존하고 있지 않은 라이브러리를 require() 할 수 있는 현상을 유령 의존성(Phantom Dependency)이라고 부름.
- 예를 들어 왼쪽 그림을 보면 package-1에서 B (1.0)패키지를 가져다 쓸 수 없는 구조지만 오른쪽 그림을 보면 Hoisted가 되면서 package-1이 B (1.0)을 설치한 적이 없지만 B (1.0)을 가져다 쓸 수 있게 됨.
- 유령 의존성 현상이 발생할 때, package.json에 명시하지 않은 라이브러리를 조용히 사용할 수 있게 됨. 다른 의존성을 package.json 에서 제거했을 때 소리없이 같이 사라지기도 함. 이런 특성은 의존성 관리 시스템을 혼란스럽게 만듦.
😍 yarn berry(v2)의 등장