Yarn-berry 파헤치기

zena·2023년 7월 13일
2

Front-end

목록 보기
6/9

yarn? npm?

yarn-berry의 도입 이전에 yarn은 뭐고, npm과의 차이점은 뭔지 탐색하는 시간을 가졌습니다.

npm
: node.js의 기본적인 package manager로, 쉽고 간편하게 모듈을 관리할 수 있다는 장점으로 수많은 사용자가 있습니다.

하지만..

  • 일괄적이지 않은 패키지 버전
  • 고정되지 않은 설치 순서
    이게 문제가 되는 이유는, 어떤 의존성에 따라 어떤 패키지를 추가했는지 여부와 관계없이 설치가 진행되기 때문에 각자 다른 환경이 설치될 위험
  • 순차적인 패키지 설치
    한 번에 하나의 패키지의 설치만 발생하기 때문에 소요되는 시간이 길어질 수 있음

와 같은 문제가 존재했습니다.

yarn
: 위와 같은 npm의 문제를 해결하면서 장점을 가지는 yarn이 탄생했습니다.

  • 패키지 버전의 일관성을 통한 안정성 확보
    패키지 버전을 고정하도록 자동으로 yarn.lock 파일을 생성
  • 한 번에 모든 패키지 설치
    npm과 다르게 모든 패키지를 한 번에 설치하기 때문에 필요한 패키지가 많을 수록 npm과의 속도 차이 발생 가능성

참고 링크 - npm vs yarn

yarn-berry?

yarn의 등장으로 npm에도 많은 발전이 있었으나 해결해야할 문제가 많이 존재했습니다.

수많은 패키지, 의존된 모든 모듈을 설치한다면 node_modules는 굉장히 무거워지게 되고, 블랙홀 보다 무거워지는 상황이.. 초래할 지도 모릅니다..^^;

위와 같은 상황을 해결하기 위해 중복을 제거하는 호이스팅 방식을 도입했으나 의존성 때문에 설치되었던 패키지들이 최상단으로 끌어올려져 의도치 않은 사용에 관련된 유령 의존성의 문제가 발생하게 됩니다.

이를 해결할 수 있는 2가지 개념이 yarn에 도입되었습니다.

첫 번째 개념, Plug'n'Play

기존의 node_modules를 과감히 삭제하고 package.json 기반으로 패키지 정보를 zip 파일에 저장하고, 해당 패키지를 찾기 위한 정보를 pnp.cjs 파일에 저장하는 방식을 사용합니다.

별도의 I/O 과정 없이 빠르게 패키지를 탐색하는 것 뿐만 아니라 호이스팅 하지 않기 때문에 유령 의존성 문제 또한 해결할 수 있습니다.

참고 링크 - toss yarn-berry

두 번째 개념, zero-install

패키지에 대한 정보를 zip 파일로 관리하기 때문에 용량과 파일의 개수가 적기 때문에 git을 활용한 의존성 관리가 가능해집니다.

의존성 자체를 버전 관리에 포함하는 것을 바로 zero-install이라고 하는데, 새로운 브랜치나 클론의 경우에 별도의 yarn install 이 필요 없게 됩니다.

결론

yarn-berry의 PnP 개념이 정말 신기했던 것 같습니다. 또, 공부하면서 느낀 점은 개인 프로젝트에 있어서 zero-install의 개념까지 도입해야 하는 가? 의문을 느꼈습니다.

브랜치를 새롭게 파거나 클론을 발생시킬 가능성이 많지 않은 조건에서는 굳이..?
협업으로 프로젝트가 진행될 때 도입해보고 싶다는 생각을 하게 되었습니다 ㅎㅎ

profile
🐤 FE developer 🎧

0개의 댓글