npm, pnpm, npx, yarn 정
date
Aug 16, 2024
slug
npm-pnpm-npx-yarn
author
status
Public
tags
Study
summary
npm, pnpm, npx, yarn 정리
type
Post
thumbnail
category
✍️ Study
updatedAt
May 30, 2025 04:29 PM
JavaScript 프로젝트 관리 도구들
개발을 하다 보면 JavaScript 프로젝트를 관리하고 실행하기 위해 여러 도구를 사용하게 됩니다. 대표적으로
npm, pnpm, npx, yarn 등이 있습니다. 이 도구들은 프로젝트 개발 및 유지보수를 효율적으로 만들어줍니다. 하지만 어떤 도구를 언제 어떻게 사용해야 하는지 알기 어려워 이 포스트를 작성하게 되었습니다.개발 및 유지보수를 도와주는 방법
1. 의존성 관리
패키지 매니저인 npm이나 yarn을 사용하여 프로젝트에 필요한 의존성을 명시하고 쉽게 설치할 수 있습니다. 의존성은 프로젝트가 올바르게 동작하고 기능을 수행하기 위해 필요한 외부 코드나 라이브러리입니다. 패키지 매니저를 통해 이러한 의존성들을 버전 충돌 없이 프로젝트에 통합할 수 있습니다.
2. 버전 관리
프로젝트의 라이브러리와 모듈은 지속적으로 업데이트됩니다. 패키지 매니저는 각 패키지의 버전을 명시하고 프로젝트에 적용된 버전을 추적합니다. 이를 통해 특정 버전에서 발생하는 문제를 파악하고, 안정적인 업데이트를 수행할 수 있습니다.
3. 초기 환경 설정 및 빌드 스크립트
패키지 매니저를 이용해 초기 프로젝트 설정을 간편하게 수행할 수 있습니다. 또한 npm 또는 yarn을 사용해 빌드 스크립트를 구성하면 개발 환경을 쉽게 설정하고, 빌드 및 배포 프로세스를 효율적으로 관리할 수 있습니다.
4. 일회성 명령어 실행
특정 작업을 위해 다양한 도구를 사용해야 합니다.
npx를 통해 로컬에 설치하지 않고도 필요한 도구를 일회성으로 실행할 수 있습니다. 예를 들어, 프로젝트에 특정 테스트 도구가 필요한 경우, npx를 사용해 해당 도구를 간편하게 실행할 수 있습니다.5. 성능 및 안정성 개선
프로젝트의 성능이나 안정성을 개선해야 합니다.
yarn은 npm보다 빠른 의존성 설치 속도와 캐시 기능을 제공하여 프로젝트의 빌드 및 실행 속도를 향상시킬 수 있습니다. 또한, 안정성 측면에서도 yarn은 예측 가능한 의존성 해결을 제공합니다.이렇게 프로젝트의 개발과 유지보수를 효율적으로 진행할 수 있습니다.
npm, pnpm, npx, yarn 장단점과 차이점
npm
장점
- Node.js에 내장되어 있어 추가로 설치할 필요가 없습니다.
- 사용자들이 만들어 놓은 다양한 모듈을 쉽게 사용할 수 있습니다.
단점
- npm은 패키지 매니저의 시초와 같아 생태계가 매우 풍부하지만, node_modules 폴더 크기가 커져 불필요한 프로젝트 삭제 시 시간이 오래 걸립니다.
- 패키지 간의 의존성 문제가 발생할 수 있어, 이를 해결하기 위해 package.json이 필요합니다.
pnpm
장점
- 다른 JavaScript 패키지 매니저에 비해 최대 2배 이상 빠릅니다. (의존성마다 설치가 병렬적으로 수행되기 때문)
- 프로젝트별로 node_modules에 매번 패키지를 설치하는 대신, global 저장소에 패키지를 한 번만 저장하여 저장 공간을 절약할 수 있습니다.
- npm을 사용했던 개발자들이 쉽게 적용할 수 있습니다.
- 모노레포 지원
- npm 9.4v 부터 isolated node_modules 모듈 지원
단점
- 특정 패키지를 한 번만 설치하기 때문에 프로젝트별로 연결을 해놓으면 호환 문제가 발생할 수 있습니다. 따라서 프로젝트 간 호환 문제를 피하기 위해 버전 관리를 철저히 해야 합니다.
npx
장점
- npx를 통해 프로젝트에 필요한 도구를 쉽게 실행할 수 있습니다.
- 로컬에 설치하지 않고 일회성으로 패키지를 실행할 수 있습니다.
- 패키지를 설치하고 업데이트하지 않더라도, npm 레지스트리에 올라가 있는 최신 버전을 실행시킬 수 있습니다.
- 필요할 때만 실행하므로, 프로젝트 간에 패키지 충돌을 피할 수 있습니다.
단점
- 인터넷 연결이 필요합니다.
- 내부적으로 캐시를 사용하고, 이를 관리하기 위한 추가적인 과정이 필요합니다.
- 보안 및 버전 관리에 대한 주의가 필요합니다.
yarn
장점
- lock 파일은 package.json에서 사용하는 버전 숫자의 혼란을 줄여줍니다.
- npm의 보안 문제를 해결하고 안정성을 보장합니다.
- 여러 개의 패키지를 병렬로 설치해 속도 측면에서 우수합니다.
단점
- yarn.lock 파일의 버전 관리로 인해 기존 모듈이 최신화될 수 있으며, 이 경우 하위 호환을 보장하지 않는 모듈의 경우 에러가 발생할 수 있습니다.
- 최근 버전의 npm에서도 성능이 개선되어 성능 차이가 크게 나지 않을 수 있습니다.
- npm보다 다운로드 크기가 크고, 디스크 공간을 더 많이 차지할 수 있습니다.
- 더 많은 메모리를 사용할 수 있습니다.
그러면 어떤 상황에서 어떤걸 써야 할까?
📌 npm
웹 애플리케이션 개발, 서버 개발, CLI 도구 등 다양한 유형의 프로젝트에 적합
📌 pnpm
여러 프로젝트 간에 의존성을 공유하고자 하거나, 디스크 공간을 효율적으로 사용하고자 하는 프로젝트에 적합
📌 npx
특정 스크립트나 도구를 일회성으로 실행해야 하는 경우에 적합
📌 yarn
대규모의 웹 애플리케이션 또는 모듈화된 프로젝트에 적합
기능 비교
기능 | pnpm | yarn | npm |
워크스페이스 지원 | ✔️ | ✔️ | ✔️ |
격리된 node_modules | ✔️ - 기본값 | ✔️ | ✔️ |
호이스팅된 node_modules | ✔️ | ✔️ | ✔️ - 기본값 |
피어 자동 설치 | ✔️ | ❌ | ✔️ |
Plug'n'Play | ✔️ | ✔️ - 기본값 | ❌ |
Zero-Installs | ❌ | ✔️ | ❌ |
의존성 패치 | ✔️ | ✔️ | ❌ |
Node.js 버전 관리 | ✔️ | ❌ | ❌ |
lockfile 보유 | ✔️ - pnpm-lock.yaml | ✔️ - yarn.lock | ✔️ - package-lock.json |
재정의 지원 | ✔️ | ✔️ - resolution을 통해 | ✔️ |
Content-addressable 저장소 | ✔️ | ❌ | ❌ |
동적 패키지 실행 | ✔️ - pnpm dlx를 통해 | ✔️ - yarn dlx를 통해 | ✔️ - npx를 통해 |
부작용 캐시 | ✔️ | ❌ | ❌ |
Listing licenses | ✔️ - pnpm licenses list | ✔️ - Via a plugin | ❌ |