yarn-berry의 도입 이전에 yarn은 뭐고, npm과의 차이점은 뭔지 탐색하는 시간을 가졌습니다.
npm
: node.js의 기본적인 package manager로, 쉽고 간편하게 모듈을 관리할 수 있다는 장점으로 수많은 사용자가 있습니다.
하지만..
와 같은 문제가 존재했습니다.
yarn
: 위와 같은 npm의 문제를 해결하면서 장점을 가지는 yarn이 탄생했습니다.
yarn의 등장으로 npm에도 많은 발전이 있었으나 해결해야할 문제가 많이 존재했습니다.
수많은 패키지, 의존된 모든 모듈을 설치한다면 node_modules는 굉장히 무거워지게 되고, 블랙홀 보다 무거워지는 상황이.. 초래할 지도 모릅니다..^^;
위와 같은 상황을 해결하기 위해 중복을 제거하는 호이스팅 방식을 도입했으나 의존성 때문에 설치되었던 패키지들이 최상단으로 끌어올려져 의도치 않은 사용에 관련된 유령 의존성의 문제가 발생하게 됩니다.
이를 해결할 수 있는 2가지 개념이 yarn에 도입되었습니다.
기존의 node_modules를 과감히 삭제하고 package.json 기반으로 패키지 정보를 zip 파일에 저장하고, 해당 패키지를 찾기 위한 정보를 pnp.cjs 파일에 저장하는 방식을 사용합니다.
별도의 I/O 과정 없이 빠르게 패키지를 탐색하는 것 뿐만 아니라 호이스팅 하지 않기 때문에 유령 의존성 문제 또한 해결할 수 있습니다.
패키지에 대한 정보를 zip 파일로 관리하기 때문에 용량과 파일의 개수가 적기 때문에 git을 활용한 의존성 관리가 가능해집니다.
의존성 자체를 버전 관리에 포함하는 것을 바로 zero-install이라고 하는데, 새로운 브랜치나 클론의 경우에 별도의 yarn install 이 필요 없게 됩니다.
yarn-berry의 PnP 개념이 정말 신기했던 것 같습니다. 또, 공부하면서 느낀 점은 개인 프로젝트에 있어서 zero-install의 개념까지 도입해야 하는 가? 의문을 느꼈습니다.
브랜치를 새롭게 파거나 클론을 발생시킬 가능성이 많지 않은 조건에서는 굳이..?
협업으로 프로젝트가 진행될 때 도입해보고 싶다는 생각을 하게 되었습니다 ㅎㅎ