Skip to main content

Command Palette

Search for a command to run...

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

Updated
3 min readView as Markdown
[FrontEnd] Pnpm는 또 뭔데?!하는 사람들을 위한 설명

🔥 목차

  • 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

More from this blog

[회고] 풀스택 개발자로 (곧) 1년...

정말 정말 오랜만에 글을 작성한다 🤭 나는 현재 개발자로 취업한 지 거의 1년이 다 되어간다. 이제 10개월임 ! 처음에는 무조건 프론트엔드 개발자로 취업할거임!! 풀스택 NO ! 라는 마음으로 준비했던 취업.. 하지만 현실은 풀스택으로 취업하게 되었다. 취업을 하고 나니 여러가지 생각과 감정이 들었고 맨날 회고 적어야지 ~ 적어야지 ~ 했는데 10개

May 29, 20263 min read

[React] 클라이언트에서 이미지를 압축해보자

우리는 서버 비용을 직접 부담하고 있기 때문에 항상 최적화와 비용 절감 방법을 고민하게 된다. 현재 자유게시판이 활성화가 많이 되지는 않았지만 사용자들이 업로드하는 이미지가 평균 5MB 이상일 경우를 대비해서 클라이언트에서 이미지 압축을 진행했다. 웹에서는 크게 두 가지 방법이 있었는데 Canvas API를 직접 사용하는 방법 browser-image-compression 라이브러리를 활용하는 방법 이 있다. 여러 장점을 고려해 brow...

Oct 8, 20252 min read
[React] 클라이언트에서 이미지를 압축해보자

[책 추천] 프론트엔드 개발자라면 반드시 알아야 할 '웹 접근성' 이야기

내가 생각하는 프론트엔드 개발자는 단순히 보이는 화면만 구현하는 것을 넘어서 누구나 접근할 수 있는 웹을 만드는 데 중요한 역할을 해야 한다고 생각한다. 실무에 바로 적용하는 웹 접근성 가이드북 이번에 이 책을 받고 프엔들이 읽기에 너무 좋다고 생각해서 블로그에 추천 글까지 적게 되었다 ! 목차 Chatper1. 쉽게 이해하는 접근성 Chapter2. 웹 접근성의 기초 Chapter3. HTML 태그, 의미 있게 사용하기 Chpater4...

Jul 27, 20255 min read
[책 추천] 프론트엔드 개발자라면 반드시 알아야 할 '웹 접근성' 이야기

[Next.js] 나만의 학습 블로그 만들기#3-다국어 지원 (Feat.next-i18next)

오늘은 다국어 지원 가능한 기능 구현 과정을 적어보려고 한다. 원래는 댓글기능보다 먼저 구현하려고 했는데 ,, 갑자기 댓글기능 알아보다가 재밌어서 먼저 끝내버렸다,,,🙄 시작하기 전에 정말 어려웠다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 어려움이 많아서 기능 적용하는 데 시간이 꽤 걸렸다 ,,, 다국어 지원 기능 나는 영어랑 일본어를 추가해줬다 ! (해외취업도 관심 있기 때문에 나중에 이력서 낼 때 도움이 되지 않을까? ..🤭) 다국어 구현 방법 구현 방...

Jul 15, 20254 min read
[Next.js] 나만의 학습 블로그 만들기#3-다국어 지원 (Feat.next-i18next)

[Next.js] 나만의 학습 블로그 만들기#4 - 댓글 기능(Feat. Giscus)

댓글기능이 있으면 무조건 재밌을 거 같아서 넣어보려고 한다🤭 아무래도 개발에 관련된 학습 블로그라서 개발자들이 많을 것으로 예상했다 ! 그래서 깃허브 이슈 기반 댓글 시스템을 기반으로 기능을 구현해보려고 한다. 👉🏻 도움이 많이 된 블로그 ! 방법 Giscus | (https://giscus.app) utterances | (https://utteranc.es) 알아봤을 때는 이렇게 두 개가 유명하다고 한다. 그럼 각각의 특징과 장...

Jul 14, 20253 min read
[Next.js] 나만의 학습 블로그 만들기#4 - 댓글 기능(Feat. Giscus)
S

subin-dev-blog

28 posts

끊임없이 배우기 위해 노력합니다. 🌱