패키지 관리시스템 Yarn Berry
Yarn Berry는 기존 npm의 node_modules 문제점을 해결하기 위해 기획된 패키지 관리 시스템입니다. 기존 node_modules의 문제는 1. Node가 파일시스템에 접근하여 직접 I/O(Input/Output)를 실행하여, 패키지를 찾기 위해 계속 상위 디렉토리의 node_modules를 탐색하였습니다. 따라서 수많은 폴더와 파일을 실제로 열고 닫으면서 계속 검색을 하기 때문에 비효율 적으로 모듈을 탐색했습니다. 2. 중복 설치를 방지하기 위해 종속성 패키지를 최상위로 호이스팅해서 직접 의존하고 있지 않은 라이브러리를 사용할 수 있게 했는데요. 문제는 package.json에 명시되지 않은 라이브러리를 조용히 사용할 수도 있기 때문에 만약 원본 패키지 모듈을 삭제한다면 사용 중이던 해당 패키지도 조용히(?) 삭제가 되어 버그를 유발할 수 있었습니다. Yarn Berry는 Plug'n'Play를 도입하여 이러한 문제를 해결하였습니다. 1. .yarn/cache 폴더에 의존성 정보가 저장되고, .pnp.cjs 파일에 의존성을 찾을 수 있는 의존성 트리를 중첩된 Map 자료구조로 표현하였습니다. Node가 파일시스템에 접근하여 직접 I/O를 실행하던 비효율 적인 탐색과정을 자료구조를 메모리에 올리는 방식으로 효율적으로 탐색을 최적화 한 것입니다. 2. 각 의존성은 Zip 아카이브로 관리되어 .pnp.cjs 파일이 지정하는 바에 따라 동적으로 Zip 아카이브 내용이 참조됩니다(인터페이스 링커). 링커를 통해 의존성을 쉽게 검증할 수 있어, 호이스팅을 하지 않아 유령 의존성 문제도 해결하였습니다. 3. .yarn 폴더의 파일들은 install 과정 없이 실행되기 때문에 어떤 환경에서든 같은 상황임을 보장합니다. 이는 잘못된 의존성 버전으로 인한 버그를 막아주며, 오프라인 캐시 역할도 해줍니다. 별도의 설치 과정이 없기 때문에 빌드 시간 단축 및 CI시간의 절약, 로컬 과 리모트 환경에서의 빌드 결과물의 동일함을 명시적으로 보장합니다. 알려드리는 포스트에서는 Yarn Berry에 대한 소개와 함께, yarn 클래식에서 Yarn Berry로의 마이그레이션 방법을 디테일하게 알려주고 있습니다. 에디터 설정 에서부터 Vite 같은 번들러 이슈들까지 소개해 주고 있어, YarnBerry에 관심이 있거나 실무에서 도입을 고려 중인 분들께는 읽어보시는 것을 추천드립니다.