Yarn Berry의 zero-Install 도입

NSH·2024년 4월 11일
0
post-thumbnail

Yarn Berry란?

YarnJavaScript 패키지 매니저로, npm과 비슷하게 패키지를 설치하고 관리하는 도구이다. Yarn은 여러 버전이 존재하며 버전1은 Yarn이라고 부르고 버전2는 Yarn Berry라고 부른다.

Yarn 버전 별 차이점

Yarn v1

Yarn v1은 2016년도에 발표되었으며 아래와 같은 특징을 활용해 종속성의 안전한 관리와 효율성을 모두 향상시킨다.

일관된 설치 결과 제공

yarn install를 실행하면 Yarn은 yarn.lock파일을 생성한다. 이 파일은 프로젝트의 각 종속성과 하위 종속성의 정확한 버전을 기록한다. 따라서 다른 개발자가 동일한 yarn.lock파일을 사용하여 yarn install을 실행하면 Yarn은 패키지들을 동일한 버전으로 설치한다. 즉, 다양한 환경에서 일관성이 보장되는 것이다.

오프라인 설치 가능

처음 패키지를 설치할 때 Yarn은 패키지 복사본을 컴퓨터 글로벌 캐시에 저장한다. 동일한 패키지를 재설치할 때 인터넷에서 다운하지 않고 캐시에 저장된 복사본을 활용해 설치할 수 있다.

Yarn v2(Yarn Berry)

Yarn Berry는 2019년에 발표되었으며 아래와 같은 특징을 가진다.

더 빠른 설치 속도

Yarn Berry는 효율적인 알고리즘과 작업을 병렬화해 Yarn v1보다 더 빠른 종속성 설치를 제공한다.

효율적인 저장 공간

Yarn Berry는 저장 공간 사용량을 줄이기 위해서 종속성을 효율적으로 저장한다. v1은 프로젝트 마다 패키지를 복제한다면 v2(yarn berry)는 단일 캐시를 사용해 프로젝트 간에 패키지를 공유할 수 있다.

모노래포 지원

하나의 작업 공간에서 여러 패키지(프로젝트)를 관리할 수 있다. 각 패키지들의 종속성을 서로 연결하여 중앙에서 관리할 수 있다. 이를 통해 대규모 프로젝트의 종속성 관리를 단순화하는 동시에 개발 워크플로우를 간소화할 수 있다.

⭐PnP(Plug And Play) 모드 지원⭐

PnP를 활용해 Zero Install 기능을 제공할 수 있다. PnP는 기존 node_modules폴더를 사용하지 않고 종속성을 관리하는 새로운 방법을 제공한다. 대신 종속성 경로를 맵핑하는 .pnp.cjs파일을 필요로 한다.

PnP 모드에서의 Zero Install

Zero Install은 말 그대로 yarn install과 같은 설치 명령어 없이 프로젝트를 바로 실행할 수 있도록 해준다. Yarn Berry의 PnP모드와 캐시 매커니즘을 활용해 Zero Install이 동작한다.

.pnp.cjs 파일 역할

PnP는 종속성 및 해당 위치에 대한 모든 정보를 .pnp.cjs라는 단일 파일에 저장하며 아래와 같은 내용이 포함된다.

  • 패키지 목록 및 버전
  • 패키지 종속 관계
  • yarn/.cache에 저장되어있는 패키지들의 경로

모듈 해석 방법

코드에서 requre('some-package') 또는 import 'some-package'가 확인되면 Node의 모듈 확인 프로세스는 Yarn BerryPnP에 의해서 차단되며 아래의 순서로 모듈을 해석한다.

  1. Node의 모듈 확인 프로세스가 Yarn BerryPnP에 의해 차단
  2. Yarn Berry PnP가 모듈 확인 프로세스를 인계 받음
  3. .pnp.cjs에 요청된 모듈의 정보를 확인하고 yarn/.cache에서 직접 패키지를 로드한다.
  4. yarn/.cache에서 모듈을 찾을 수 없다면 Yarn은 인터넷에서 누락된 모듈을 다운로드하고 yarn/.cache에 저장하여 동적으로 종속성 문제를 해결한다.
  5. 추후에 프로젝트 실행 시 이미 다운로드 되어 yarn/.cache에 저장된 모듈을 사용하므로 더 빠르고 효율적으로 모듈 확인이 가능해진다.

요약

Yarn Berry(Yarn v2)PnP(Plug And Play)기능을 활용해 Zero Install을 도입하면 yarn install과 같은 설치 명령어 없이 바로 프로젝트 실행이 가능하여 상당히 편리하다.

코드에서 모듈(패키지)를 가져오려고 시도하면 Node의 모듈 해석 프로세스를 PnP에서 가로챈다. PnP는 로컬 캐시(yarn/.cache)를 확인하고 해당 모듈이 있으면 로드하고 없으면 인터넷에서 모듈을 다운받고 캐시에 저장하는 과정을 통해 동적으로 문제를 해결한다.

도입 후기

시간이 지나면서Yarn의 버전도 상당히 많이 업그레이드가 되었다. 최적화된 Yarn의 기능들을 사용하기 위해 버전 업그레이드는 꼭 필요한 상황있었다. 덕분에 PnP기능을 통해 Zero Install도 도입할 수 있는 기회로 만들 수 있었다.

Zero Install이 도입되면서 빌드 시 node_modules와 같은 거대한 디렉터리를 탐색할 필요가 없어졌으므로 빌드 시간을 조금 더 단축할 수 있는 장점도 있어서 상당히 만족스러운 결과를 얻었다.😀

profile
잘 하고 싶다.

0개의 댓글