[JS 패키지 매니저] npm, yarn, yarn berry, pnpm

CHAENG·2023년 12월 13일
0

FrontEnd

목록 보기
3/10

✅ 패키지 매니저

패키지 매니저는 Node.js의 실행환경(runtime)에서 수행하며, 프로젝트가 의존하고 있는 패키지를 효과적으로 설치, 갱신, 삭제할 수 있도록 도와주는 관리 도구이다.

아무리 간단한 자바스크립트 프로젝트라고 해도 적게는 수십게 많게는 수백개의 다른 패키지에 의존하기 때문에 패키지 매니저는 중요한 역할을 한다.

자바스크립트는 npmyarn 이라는 두 가지 대표적인 패키지 매니저가 존재한다.
npm, yarn, 그리고 yarn berry, pnpm에 대해서 알아보겠다.

패키지 매니저 주요기능

  1. 패키지 설치
  • 프로젝트에 필요한 패키지를 설치할 수 있다.
  • 일반적으로 오픈소스 라이브러리이며, 패키지 매니저를 통해 패키지의 이름 또는 버전을 지정하여 설치할 수 있다.
  1. 의존성 관리
  • 패키지는 다른 패키지에 의존할 수 있으며, 패키지 매니저는 이러한 의존성을 자동으로 해결하여 필요한 패키지들을 설치한다.
  1. 버전 관리
  • 패키지의 다양한 버전을 관리한다.
  • 이를 통해 특정 버전의 패키지를 설치하거나 업데이트 할 수 있으며, 프로젝트가 정확한 버전의 패키지를 사용하도록 보장할 수 있다.
  1. 스크립트 실행
  • 프로젝트의 미리 정의된 스크립트를 실행하는 기능을 제공한다.
  • 이를 통해 빌드, 테스트, 배포 등의 자동화된 작업을 수행할 수 있다.

✅ npm

Node.js의 공식 패키지 매니저이다.
자바스크립트 프로그램에서 사용되는 모든 종류의 패키지를 다운로드하고 설치할 수 있다.
npm은 쉽게 사용 가능한 CLI를 제공하며 Node.js와 함께 자동으로 설치된다.

차이점

패키지 설치 시 패키지들을 각각 별도로 설치한다.
이로 인해 공유된 의존성이 중복으로 설치될 수 있다.

의존성 트리가 깊어질수록 패키지 설치 속도가 느려지고, 디스크 공간을 많이 차지할 수 있다.

✅ yarn

2016년 Facebook에서 개발한 패키지 매니저로 npm보다 빠르고 안정적인 설치 및 의존성 관리를 제공한다.
또한 yarn.lock 파일을 사용하여 프로젝트에서 사용되는 의존성 버전을 명시적으로 지정할 수 있으므로, 의존성 버전 충돌을 방지할 수 있습니다.

차이점

여러 패키지를 동시에 가져오고 설치하도록 최적화되어 있어 npm보다 빠른 의존성 설치 속도와 패키지 버전 관리를 제공한다.
yarn.lock 파일을 사용하여 의존성 트리를 고정시켜 재현 가능한 빌드를 지원한다. 캐시 기능을 제공하여 패키지 다운로드를 최적화한다.

하지만 npm과 yarn의 차이는 거의 느끼지 못한다.
yarn의 가장 큰 장점은 패키지 버전 잠금이다. 패키지 버전 잠금을 통해 여러 환경에서 항상 동일한 작업 환경을 가져갈 수 있다.

✅ pnpm

npm, yarn과 비슷하지만, 다른 방식으로 의존성을 관리한다.
일반적인 패키지 매니저와 달리, pnpm은 모든 프로젝트에 대해 공유되는 의존성을 설치하고 링크한다. 이를 통해 디스크 공간과 설치 시간을 절약할 수 있다.

차이점

npm과 달리 의존성을 공유하여 저장 공간을 최적화 한다.
Flat node_modules 구조를 사용하여 파일 시스템의 깊이를 줄이고 의존성 트리를 단순화한다.
동시 설치 기능을 지원하여 의존성 설치 속도를 향상시킨다.

✅ yarn berry

yarn의 새로운 버전으로 다중 패키지 프로젝트를 위한 기능을 강화한 패키지 매니저다.
Zero-installPlug'n'Play를 통해 의존성 설치 속도를 향상시키고 저장 공간을 절약한다.
Workspaces 기능을 제공하여 여러 패키지를 하나의 저장소로 관리할 수 있다.

차이점

Zero-install 기능을 통해 의존성을 로컬에 별도로 설치하지 않고 필요한 시점에 즉석에서 사용한다.
Plug’n’Play를 통해 가상 파일 시스템을 사용하여 의존성 설치를 최적화한다.
Workspaces 기능을 통해 모노레포 형식의 프로젝트를 관리할 수 있다.


마무리

npm은 기본적인 패키지 매니저이며,
pnpm은 npm의 의존성 문제를 해결한 패키지 매니저다.

yarn은 npm보다 빠른 의존성 설치와 버전 관리를 제공하는 패키지 매니저이며,
yarn berry는 다중 패키지 프로젝트를 위한 기능을 강화한 yarn의 버전이다.

pnpm과 yarn berry는 모노레포 환경에서 효과적으로 사용될 수 있다.


yarn berry를 선택한 이유?

npm의 속도가 느리고 파일이 무겁다는 단점, 유령의존성 때문에 새로운 패키지 매니저 도구를 찾던 중, yarn 패키지 매니저를 알게 되었다.

yarn berry를 선택한 이유는

  1. Type Script
    npm, yarn과 달리 Yarn Berry는 TypeScript로 작성되어 완전히 타입 체크가 되어 있다.

  2. 유령 의존성 해결
    npm과 yarn 버전1 에서는 유령 의존성 문제가 있었음.
    중복해서 설치되는 node_modules 을 아끼기 위해서 끌어올리는 (Hoisting) 기법을 사용하는데, 이 기법을 사용함에 따라 직접 의존하고 있지 않은 라이브러리를 require 하는 유령 의존성 현상이 발생한다.

yarn berry는 이런 문제점을 Plug'n'Play(Zero Install) 전략을 이용해서 해결할 수 있었다.

  1. Plug'n'Play(Zero Install)
    기존의 로컬 node_module 폴더 대신 패키지를 캐시 폴더에 저장하하여 관리하기 때문에 의존성 문제를 효과적으로 해결할 수 있고, 파일의 용량도 작게 관리할 수 있을 것 같아서 선택하였다.

yarn berry를 사용하며 좋았던 점?

  1. 깃 브랜치를 변경후에 yarn install으 하지 않아도 된다. Zero-install을 사용했기 때문

  2. CI 의존성 설치 시간 단축. Zero install 덕분에 Git Clone으로 저장소를 복제할 때의 시간을 절약할 수 있었다.

profile
FrontEnd Developer.

0개의 댓글

관련 채용 정보