Package Manager _ npm, pnpm, Yarn

예진·2024년 10월 22일

개인 공부

목록 보기
7/15
post-thumbnail

Package Manager

패키지 매니저란?
: 컴퓨터의 운영 체제를 위해 일정한 방식으로 컴퓨터 프로그램의 설치, 업그레이드, 구성, 제거 과정을 자동화하는 소프트웨어 도구들의 모임

→ 패키지를 다루는 작업을 편리하고 안전하게 수행하기 위해 사용하는 프로그램

패키지 매니저 동작 3단계

Resolution, Fetch, Link

- Resolution 단계 : 모든 기기에서 고정된 버전의 라이브러리를 사용할 수 있도록 함
(라이브러리 버전 고정, 라이브러리의 다른 의존성 확인, 라이브러리의 다른 의존성 버전 고정)

- Fetch 단계 : 결정된 버전의 파일을 다운로드 하는 과정

- Link 단계 : Resolution/Fetch 된 라이브러리를 소스 코드에서 사용할 수 있는 환경을 제공하는 과정

  • npm Linker (node_modules 기반 Linker)
    : package.json 에서 명시하는 모든 의존성을 node_modules 디렉토리 밑에다가 하나하나씩 작성
    패키지를 찾을 때 node_modules 를 계속 타고 올라가면서 파일을 여러 번 읽어야 함(-)
    → 속도 느려짐, 디렉토리 크기 커짐

  • pnpm Linker
    : 퍼포먼스가 향상된 npm (npm의 단점을 보완)
    Hard Link를 사용해 alias를 거는 방식(속도 빨라짐)
    기존의 node_modules 디렉토리 그대로 사용, but alias를 사용해 alias가 생기면 바로 접근 → 디스크 하나에만 의존성이 설치됨 → 속도 빠름, 디렉토리 크기 작음

  • PnP Linker
    : node_modules 디렉토리에서 벗어나기 위해 접근한 방법 PnP(node_modules 없이 의존성을 처리하는 방법)
    node_modules 디렉토리가 아닌 JavaScript 객체로 처리
    yarn install → .pnp.cjs 파일 생성
    → 설치 속도 빠름(속도에 집중), but Node.js 프로세스가 뜨는 속도 느림, node_modules 디렉토리와 호환성이 낮음

- npm 가장 오래됨, 다양한 모듈이 있어 쉽게 다운로드 가능, 생태계 풍부함, 의존성이 높아 하나의 문제가 발생하면 다른 것들에도 연이어 문제 발생 가능

- yarn 기존 npm의 단점 보완, 안정성 보장, 병렬적 설치로 인한 빠른 속도

- pnpm 효율적인 npm, global 저장소에 패키지 저장함으로써 저장 공간 절약

- yarn berry(2.x) 기존 yarn(1.x)의 상위 버전, 저장 공간 절약


패키지 매니저 장점

  • 의존성 관리
    : 패키지 매니저는 프로젝트에서 필요한 라이브러리의 버전 충돌을 관리하고, 의존성 문제를 자동으로 해결해줌 (npm 이나 yarn은 설치할 때 의존성 버전을 정확히 지정해 서로 다른 패키지들이 요구하는 다른 버전의 라이브러리들을 적절히 처리 가능)

  • 버전 관리
    : 패키지 매니저는 패키지의 버전을 명시적으로 관리할 수 있어, 프로젝트가 시간이 지나도 안정적으로 특정 버전의 라이브러리 유지 가능 → 이는 프로젝트의 호환성을 보장하고, 배포 환경에서 발생할 수 있는 오류를 방지하는 데 유용함

  • 자동화
    : 수동으로 라이브러리 설치, 제거, 업그레이드를 관리하는 것에 비해 패키지 매니저는 자동화된 방법으로 모든 의존성 작업을 처리하므로 개발 생산성이 크게 향상됨


패키지 매니저 성능 비교

  • 속도 차이
    npm → node_modules 디렉토리를 매번 다시 생성하고 복사하기 때문에 시간이 오래걸림
    pnpm → 저장소를 공유하고 하드 링크를 사용하여 중복을 최소화하면서 속도를 빠르게 할 수 있음

  • 캐싱
    pnpm, yarn → 이전의 설치한 패키지를 캐싱하여, 같은 패키지를 여러 번 설치하는 경우 시간이 절약되는 구조
    npm → 기본적으로 캐싱 성능이 부족함

속도가 중요한 프로젝트 ⇒ pnpm or yarn berry
안정성이 중요한 프로젝트 ⇒ npm or yarn

profile
😊

0개의 댓글