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

송수빈송수빈
3 min read

🔥 목차

  • PNPM이란?

    • ❓ 심볼릭링크
  • 그래서 어떤 거 쓰라구요? (yarn vs npm vs pnpm)

  • 설치방법

🔗 공식문서

🌱 PNPM이란?

참고한 사이트 > 🔗 pnpm이 무엇인가

  • Performant NPM의 약자이다.

  • 성능과 효율성을 강조한 패키지 매니저이다.

  • pnpm을 사용하면 의존성이 content-addressable 저장소에 저장된다

  • pnpm은 symlink를 사용하여 프로젝트의 직접적인 의존성만을 모듈 디렉토리의 루트로 추가한다.

  • PNPM은 패키지를 설치할 때 디스크 공간을 절약하고, 프로젝트의 종속성을 더 효율적으로 관리할 수 있도록 설계되었다.

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

  1. 심볼릭 링크(📌 Symlink 또는 Symbolic Link)는 파일이나 폴더를 가리키는 가상 경로(바로가기) 를 의미한다.

  2. 쉽게 말해, 실제 파일을 복사하지 않고, 해당 파일이 있는 위치를 가리키는 "참조 링크" 를 생성하는 방식!

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

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

✨ PNPM 특징

  1. 중복 없는 패키지 저장 (하드 링크 & 공유 캐시)

    • pnpm은 패키지를 글로벌 스토리지(~/.pnpm-store)에 저장하고, 각 프로젝트의 node_modules 폴더에는 하드 링크만 생성한다.

    • 장점: 중복 저장을 방지해 디스크 공간을 절약하고 설치 속도가 빨라짐.

  2. 빠른 패키지 설치 (병렬 다운로드)

    • pnpm은 패키지를 병렬로 다운로드하여 npm보다 훨씬 빠름.

    • pnpm install을 실행하면 의존성을 캐싱하고 불필요한 다운로드를 줄임.

  3. 강력한 의존성 관리 (일관성 유지)

    • pnpmpnpm-lock.yaml을 사용해 프로젝트 간 일관성을 유지함.

    • package.json에서 의존성 변경 없이 node_modules가 자동으로 깨지지 않도록 보장.

  4. 모노레포(Monorepo) 지원

    • 여러 패키지를 하나의 저장소에서 관리하는 모노레포 프로젝트에 최적화됨.

    • pnpm workspaces 기능을 사용하면 여러 패키지 간 의존성을 효과적으로 관리 가능.

  5. 의존성 격리 (npm과 다른 구조)

    • pnpm은 의존성을 독립적인 디렉토리에 저장하고, node_modules 내부에 심볼릭 링크를 만듦.

    • 덕분에 패키지 간 의존성 충돌이 적고, 더 안정적인 환경 제공.

  6. 빠른 CI/CD 빌드 지원

    • pnpm은 글로벌 스토리지를 활용하기 때문에 CI/CD 환경에서 패키지 설치 속도가 빠름.

    • npm보다 빌드 시간이 단축됨.

  7. 보안 강화

    • pnpmnode_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 파일을 사용하여 의존성을 고정하지만, 일부 환경에서는 충돌이 발생할 수도 있음.

🛠️ PNPM 설치

🔗 공식문서 > 강추

//설치 방법
npm install -g pnpm

//설치 확인
pnpm -v
0
Subscribe to my newsletter

Read articles from 송수빈 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

송수빈
송수빈