티스토리 뷰

개발환경

[개발환경] npm vs yarn vs pnpm

zi존코딩맨 2024. 5. 5. 10:43

 

Npm 로고

 

npm : Node Package Manager

 

  • Node.js의 기본 패키지 관리자로, Node.js 생태계와의 원활한 통합과 광범위한 패키지 레지스트리로 유명합니다.
  • Node.js 프로젝트에서 코드 종속성을 설치, 관리 및 공유하는 프로세스를 단순화하기 위해 만들어졌습니다.
  • 200만 개가 넘는 패키지의 방대한 저장소를 제공합니다.

 

장점

  1. 빠른 업데이트 속도를 가지고 있어 최신 기능을 빠르게 활용할 수 있습니다.
  2. 개발자는 Npm run 명령을 사용하여 실행할 수 있는 "package.json" 파일에 사용자 정의 스크립트를 정의할 수 있습니다.
    이 기능을 사용하면 빌드, 테스트, 배포 등 다양한 개발 작업을 자동화하여 개발 workflow를 간소화 할 수 있습니다.
  3. 패키지, 스크립트 및 구성을 관리하기 위한 광범위한 명령과 옵션이 포함된 포괄적인 명령 인터페이스(CLI)를 제공합니다.

 

단점

  1. 의존성이 많은 대규모 프로젝트에서 존성 설치가 느리고, 빌드 속도가 느려 성능 문제로 어려움이 있을 수 있습니다.
  2. 복잡한 의존성 트리가 있는 프로젝트에서는 npm을 사용하여 패키지 버전 및 의존성 충돌이 발생할 수 있습니다.

 

 

프로젝트 구조

my-project/
|-- node_modules/          // 의존성 패키지가 설치되는 디렉터리
|-- package.json           // 프로젝트 정보와 의존성 목록이 정의된 파일
|-- package-lock.json      // 의존성 트리의 정확한 버전이 고정된 파일
|-- README.md              // 프로젝트의 설명이나 문서가 포함된 파일
|-- src/                   // 소스 코드가 위치하는 디렉터리
    |-- index.js           // 메인 소스 코드 파일

 

 

 

 

 

 

yarn 로고

 

yarn

 

  • Facebook(현 meta) 에서 개발한 Node.js용 패키지 관리자입니다.
  • npm에서 발생하는 일부 제한 사항과 성능 문제를 해결하기 위해 만들어 졌습니다.
    성능, 안정성 및 결정론적 의존성 해결에 중점을 두고 있습니다.

 

장점

  • 병렬 설치로 인해 npm에 비해 설치 시간이 더 빠릅니다.
  • 의존성의 정확한 버전을 캡처하는 잠금파일인 yarn.lock 파일을 사용하여 의존성 버전을 일관되게 유지합니다.
  • 패키지 관리 및 스크립트 실행을 위한 명확하고 간결한 명령이 포함된 직관적인 명령 인터페이스(CLI)를 제공합니다.
  • 꾸준히 사용자가 늘어나는 중입니다.

 

단점

  • 가끔 호환성 문제가 있거나 동작차이가 있어서 npm → yarn 으로 마이그레이션을 할 때 예상치 못한 예외가 발생할 수 있습니다.
  • 병렬 설치는 특히 대규모 의존성 트리가 있는 프로젝트에서 상당한 시스템 리소스를 소비할 수 있다. 그래서 오래되거나 리소스 제한이 있으면 개발환경 성능에 영향을 미칠 수 있습니다.
    즉,  npm 보다 용량이 크고 무겁다.

 

 

프로젝트 구조

my-project/
|-- node_modules/          // 의존성 패키지가 설치되는 디렉터리
|-- package.json           // 프로젝트 정보와 의존성 목록이 정의된 파일
|-- yarn.lock              // 의존성 트리의 정확한 버전이 고정된 파일
|-- README.md              // 프로젝트의 설명이나 문서가 포함된 파일
|-- src/                   // 소스 코드가 위치하는 디렉터리
    |-- index.js           // 메인 소스 코드 파일

 

 

 

 

 

 

pnpm 로고

 

pnpm : Performant Npm

 

  • "Performant npm"의 약자인 pnpm은 Node.js 애플리케이션용 패키지 관리자입니다.
  • npm 및 Yarn과 같은 기존 패키지 관리자와 달리 pnpm은 종속성 관리에 대한 고유한 접근 방식을 취하여 효율성, 디스크 공간 최적화 및 설치 속도를 강조합니다.

 

 

장점

  • 하드 링크를 사용하여 디스크 공간을 절약하여 스토리지 리소스를 절약합니다.
  • 로컬 캐시를 사용하여 의존성 트리가 큰 프로젝트에서도 빠른 설치 속도를 제공합니다.
  • 동시성 설치로 더 빠른 의존성 해결을 제공합니다.
  • 패키지 설치, 업데이트 및 관리를 위한 명령이 포함된 직관적인 CLI를 제공합니다.

 

단점

  • 아직까지는 npm 및 yarn보다 사용자 수가 적고 규모가 작습니다.
  • pnpm과 관련된 새로운 명령어, workflow를 배워야합니다.
  • 가끔 호환성 문제가 있거나 동작차이가 있어서 예상치 못한 예외가 발생할 수 있습니다.

 

프로젝트 구조

my-project/
|-- node_modules/          // 의존성 패키지가 설치되는 디렉터리 (심볼릭 링크를 사용하여 공유됨)
|-- package.json           // 프로젝트 정보와 의존성 목록이 정의된 파일
|-- pnpm-lock.yaml         // 의존성 트리의 정확한 버전이 고정된 파일
|-- README.md              // 프로젝트의 설명이나 문서가 포함된 파일
|-- src/                   // 소스 코드가 위치하는 디렉터리
    |-- index.js           // 메인 소스 코드 파일

 

 

 

 

 

결론적으로 뭘 선택해야 할까?

 

1 : 제일 낮은 점수 , 3 : 높은 점수

패키지 매니저 점수
출처 : https://nodesource.com/blog/nodejs-package-manager-comparative-guide-2024/

 

npm과 yarn이 사람들이 많이 사용한는 건 사실이지만 앞으로 pnpm이 너무 유망해 보입니다.

솔직히 npm과 yarn은 개인 취향 같지만

pnpm은 npm보다 3배 빠르고 효율적이고, cold 캐시와 hot 캐시는 yarn보다 빠릅니다.

 

 

 

감사합니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함