# [FrontEnd] Pnpm는 또 뭔데?!하는 사람들을 위한 설명

### 🔥 목차

* **PNPM이란?**
    
    * **❓ 심볼릭링크**
        
* **그래서 어떤 거 쓰라구요? (yarn** vs **npm** vs **pnpm)**
    
* **설치방법**
    

[🔗 공식문서](https://pnpm.io/ko/)

### 🌱 PNPM이란?

**참고한 사이트 &gt;** [🔗 pnpm이 무엇인가](https://velog.io/@live_in_truth/pnpm%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80#:~:text=PNPM%EC%9D%80%20%ED%8C%A8%ED%82%A4%EC%A7%80%20%EA%B4%80%EB%A6%AC%EC%9D%98,PNPM%EC%9D%84%20%EC%84%A0%ED%83%9D%ED%95%98%EA%B3%A0%20%EC%9E%88%EB%8B%A4)

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1742564432305/51a7346c-80d9-4e5e-a2e9-118d93c21706.png align="left")

* Performant NPM의 약자이다.
    
* 성능과 효율성을 강조한 패키지 매니저이다.
    
* pnpm을 사용하면 의존성이 content-addressable 저장소에 저장된다
    
* pnpm은 symlink를 사용하여 프로젝트의 직접적인 의존성만을 모듈 디렉토리의 루트로 추가한다.
    
* PNPM은 패키지를 설치할 때 디스크 공간을 절약하고, 프로젝트의 종속성을 더 효율적으로 관리할 수 있도록 설계되었다.
    

**🙌🏻 여기서 심볼릭링크란?**

1. 심볼릭 링크(📌 **Symlink** 또는 **Symbolic Link**)는 **파일이나 폴더를 가리키는 가상 경로(바로가기)** 를 의미한다.
    
2. 쉽게 말해, **실제 파일을 복사하지 않고, 해당 파일이 있는 위치를 가리키는 "참조 링크"** 를 생성하는 방식!
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1742564474796/73be3a53-66e0-425f-985c-e223ba517564.png align="center")
    

🚀 `pnpm에서 심볼릭링크 활용 방식?`

* pnpm은 패키지를 전역 저장소에 보관하고, 각 프로젝트의 `node_modules`에 심볼릭 링크를 생성하여 디스크 공간을 절약!
    

### ✨ PNPM 특징

1. **중복 없는 패키지 저장 (하드 링크 & 공유 캐시)**
    
    * `pnpm`은 패키지를 글로벌 스토리지(`~/.pnpm-store`)에 저장하고, 각 프로젝트의 `node_modules` 폴더에는 하드 링크만 생성한다.
        
    * **장점**: 중복 저장을 방지해 **디스크 공간을 절약**하고 **설치 속도가 빨라짐**.
        
2. **빠른 패키지 설치 (병렬 다운로드)**
    
    * `pnpm`은 패키지를 병렬로 다운로드하여 `npm`보다 **훨씬 빠름**.
        
    * `pnpm install`을 실행하면 의존성을 캐싱하고 **불필요한 다운로드를 줄임**.
        
3. **강력한 의존성 관리 (일관성 유지)**
    
    * `pnpm`은 `pnpm-lock.yaml`을 사용해 프로젝트 간 일관성을 유지함.
        
    * `package.json`에서 의존성 변경 없이 `node_modules`가 자동으로 깨지지 않도록 보장.
        
4. **모노레포(Monorepo) 지원**
    
    * 여러 패키지를 하나의 저장소에서 관리하는 **모노레포 프로젝트**에 최적화됨.
        
    * `pnpm workspaces` 기능을 사용하면 여러 패키지 간 의존성을 효과적으로 관리 가능.
        
5. **의존성 격리 (npm과 다른 구조)**
    
    * `pnpm`은 의존성을 **독립적인 디렉토리에 저장**하고, `node_modules` 내부에 심볼릭 링크를 만듦.
        
    * 덕분에 패키지 간 의존성 충돌이 적고, 더 안정적인 환경 제공.
        
6. **빠른 CI/CD 빌드 지원**
    
    * `pnpm`은 글로벌 스토리지를 활용하기 때문에 CI/CD 환경에서 패키지 설치 속도가 빠름.
        
    * `npm`보다 **빌드 시간이 단축**됨.
        
7. **보안 강화**
    
    * `pnpm`은 `node_modules`의 패키지를 심볼릭 링크로 관리해 **의존성이 루트에서 직접 접근하는 것을 방지**.
        
    * 덕분에 **보안성이 강화**됨.
        

### 🤨 그래서 뭐 쓰라고 ?

 `npm` vs `pnpm` vs `yarn`

### **1\. 패키지 저장 방식**

* **🖤 NPM**:
    
    * 각 프로젝트의 `node_modules` 폴더에 패키지를 개별 복사하여 저장.
        
    * 동일한 패키지가 여러 프로젝트에 중복 설치되어 디스크 공간이 낭비될 수 있음.
        
* **💛 PNPM**:
    
    * 패키지를 전역적으로 저장하고, 각 프로젝트의 `node_modules`에는 **심볼릭 링크**를 생성.
        
    * 중복 저장을 방지하여 **디스크 공간 절약 가능**.
        
* **💚 Yarn**:
    
    * **Yarn** : `node_modules`에 패키지를 저장하되, 별도의 캐싱을 활용해 속도를 높임.
        

### **2\. 성능 (설치 속도 & 디스크 사용량)**

* **🖤 NPM**:
    
    * 패키지를 **복사하여 설치**하기 때문에 속도가 상대적으로 느림.
        
    * 디스크 공간을 많이 차지할 수 있음.
        
* **💛 PNPM**:
    
    * 패키지를 **전역적으로 저장 후 하드 링크를 사용**하기 때문에 **설치 속도가 빠르고 디스크 사용량이 적음**.
        
* **💚  Yarn**:
    
    * **Yarn**: 캐싱을 활용하여 속도 개선.
        

### **3\. 일관된 의존성 관리**

* **🖤 NPM**:
    
    * `package-lock.json` 파일을 사용하여 의존성을 관리하지만, **패키지 설치 방식이 다를 수 있음**.
        
* **💛 PNPM**:
    
    * `pnpm-lock.yaml` 파일을 사용하여 **모든 개발자가 동일한 환경에서 동일한 패키지 버전을 사용하도록 보장**.
        
* **💚 Yarn**:
    
    * **Yarn** : `yarn.lock` 파일을 사용하여 의존성을 고정하지만, 일부 환경에서는 충돌이 발생할 수도 있음.
        

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1742564649254/d4aec9ec-9e1d-477c-883f-ab07e93a4f34.png align="center")

### 🛠️ PNPM 설치

[🔗 공식문서](https://pnpm.io/ko/) &gt; `강추`

```javascript
//설치 방법
npm install -g pnpm

//설치 확인
pnpm -v
```
