[React] JavaScript 패키지 매니저 비교

yeonddori·2023년 9월 11일
1

AID_WEB

목록 보기
8/14

📍 npm

npm은 세계에서 가장 큰 소프트웨어 등록 기관으로, Node.js 생태계의 가장 대표적인 패키지 매니저이다.

특징

  • Node.js와 함께 기본적으로 설치
  • 강력한 CLI(Command Line Interface)를 제공하여 패키지 설치, 버전 관리, 의존성 해결 등의 기능 수행

차이점

  • 패키지 설치 시 패키지들을 각각 별도로 설치
  • 공유된 의존성이 중복으로 설치될 가능성이 있음.
  • 의존성 트리가 깊어질수록 패키지 설치 속도가 느려지고, 디스크 공간을 많이 차지할 수 있음.

📍 pnpm

npm의 의존성 문제를 해결하기 위해 고안된 빠르고 효율적인 패키지 매니저이다.

특징

  • 고유 설치와 플랫 노드 모듈을 통해 의존성 관리 최적화
  • 다중 프로젝트에서 의존성을 공유하고, 중복 설치를 피하여 저장 공간을 절약할 수 있음.

차이점

  • 의존성을 공유하여 저장 공간 최적화
  • 파일 시스템의 깊이를 줄이고 의존성 트리 단순화
  • 동시 설치 기능을 지원하여 의존성 설치 속도 향상

npm vs pnpm

npm: flattened dependency tree를 통해 의존성을 관리하며, 이러한 방식은 디스크의 크기를 덜 사용하게 되지만, 복잡한 node_modules 디렉토리의 구조를 야기한다.

pnpm: node_modules를 global on-disk content-addressable store에 hard linking과 symbolic linking방식으로 연결하여 관리하며, package.json에 명시되지 않은 모듈을 사용할 수 없게 함으로써 의도되지 않은 버그를 피한다.


📍 yarn

Facebook에서 개발한 패키지 매니저로, npm과 비슷한 목적을 가지고 있다.

특징

  • npm의 단점을 보완
  • 더 나은 성능과 안정성을 제공
  • 여러 개의 패키지를 병렬로 설치하여 빠른 속도 보장
  • yarn.lock을 사용하여 의존성 관리

차이점

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

npm vs yarn

속도(perfomance)

npm: 여러 개의 패키지를 순차적으로 설치하여 속도가 느리다.
yarn: 다운받은 패키지 데이터를 캐시(cache)에 저장하여 중복된 데이터는 다운로드하지 않고, 캐시(cache)에 저장된 파일을 활용함으로써 패키지 설치속도가 매우 빠르다.

안정성(stability) / 보안성(security)

npm: 패키지가 설치될 때 자동으로 코드와 의존성을 실행할 수 있도록 허용하여 안정성을 위협할 수 있다. 특히 보장된 정책 없이 등록한 패키지가 존재할 수 있다는 점에서 더욱 위험도가 높다.
yarn: yarn.lock이나 package.json으로부터 설치만 하며, yarn.lock은 모든 디바이스에 같은 패키지를 설치하는 것을 보장하기 때문에 버전의 차이로 인해 생기는 버그를 방지해줄 수 있다.


📍 Bun

Bun은 Node.js와 같은 JavaScript 런타임 및 패키지 매니저이다.

특징

  • 속도를 우선으로 개발
  • TypeScript 및 JSX를 모두 지원
  • npm과 호환할 수 있는 패키지 매니저 포함
  • ESM 및 CommonJS를 모두 지원하나, 내부적으로는 ESM을 사용
  • 기존에 작업 중인 JavaScript / TypeScript의 개발환경을 그대로 사용할 수 있도록 설계
  • Node.js의 모듈 resolution 알고리즘을 구현하므로 node_modules을 그대로 사용 가능

차이점

  • 빠른 시작 속도
    엣지 컴퓨팅이 cold start 시간을 더욱 중요한 요소로 만들었기 때문에 빠른 시작 속도가 중요함.
  • 빠른 실행 속도
    Bun은 Safari에서 사용하는 성능 중심의 JS 엔진인 JavaScriptCore를 사용하여 빠른 실행 속도를 보장함.
  • 일관된 DX(개발자 경험)
    번들러, 변환기 및 패키지 관리자를 기본적으로 포함하여 좋은 개발자 경험을 제공함.

🪄 마치면서

이렇게 보면 pnpm을 쓰는 것이 가장 좋을 듯 한데, 찾아보니 가끔 없는 패키지라고 뜨는 것이 많다고 하는 것 같다. 그래서 그런가? npm은 많이 봤지만 pnpm을 쓰는 걸 많이 못본 것 같다. bun은 런타임이자 패키지 매니저라니.. 속도에 중점을 둔 만큼 런타임도 Node.js보다 빠르고 패키지 매니저도 pnpm보다 빠르니 좋은 것 같긴 한데.. Node.js랑 좀 더 비교해봐야 알 것 같다.

0개의 댓글

관련 채용 정보