[Package Manager] Yarn Berry 2

세나정·2024년 5월 19일
0

Package-Manager

목록 보기
2/3
post-thumbnail

Yarn Berry (Yarn 2+)의 PnP(Plug'n'Play)는 기존의 Node.js 패키지 관리 방식과는 다른 혁신적인 접근법을 제공합니다. PnP는 패키지의 설치 및 의존성 관리를 효율적으로 처리하여 전통적인 node_modules 폴더를 없애고, 대신 의존성 트리를 간소화하는 방식입니다. 다음은 PnP에 대한 자세한 설명입니다.

PnP(Plug'n'Play)란 무엇인가?

PnP는 다음과 같은 특징과 기능을 지니고 있습니다:

  1. node_modules 폴더 제거:

    • 전통적인 패키지 관리 방식에서는 모든 의존성을 node_modules 폴더에 설치합니다. PnP는 이 폴더를 없애고 대신 패키지 의존성을 .pnp.js 파일을 통해 관리합니다.
  2. 고정된 패키지 트리:

    • PnP는 모든 의존성을 프로젝트 루트의 .pnp.cjs 파일에 기록합니다. 이 파일은 패키지 의존성 트리를 설명하고, 각 패키지가 어디에서 로드되어야 하는지를 지정합니다.
  3. 빠른 설치 시간:

    • PnP는 설치 과정을 최적화하여 node_modules 폴더를 생성하고 파일을 복사하는 시간이 필요 없기 때문에, 패키지 설치 속도가 매우 빠릅니다.
  4. 더 나은 보안 및 무결성:

    • PnP는 패키지 경로를 엄격하게 관리하여, 패키지가 임의로 다른 패키지에 접근하는 것을 방지합니다. 이는 패키지 격리와 보안을 향상시킵니다.

PnP의 동작 방식

PnP는 다음과 같은 방식으로 동작합니다:

  1. 패키지 맵핑:

    • Yarn은 패키지 설치 시, 의존성을 .pnp.cjs 파일에 기록합니다. 이 파일은 각 패키지의 위치와 의존성을 명시합니다.
  2. 런타임 로딩:

    • Node.js 애플리케이션이 실행될 때, .pnp.cjs 파일이 로드됩니다. 이 파일은 Node.js 모듈 해석기를 오버라이드하여, 패키지를 직접 로드하는 역할을 합니다.
  3. 캐싱 및 성능 최적화:

    • PnP는 패키지 로딩 시 캐싱을 통해 성능을 최적화합니다. 이는 동일한 패키지가 여러 번 로드되는 것을 방지합니다.

PnP의 장점

  • 설치 속도: node_modules 폴더를 사용하지 않기 때문에, 패키지 설치 속도가 매우 빠릅니다.
  • 디스크 공간 절약: 중복된 패키지 파일을 제거하여 디스크 공간을 절약합니다.
  • 의존성 충돌 방지: 고정된 의존성 트리를 사용하여 의존성 충돌 문제를 방지합니다.
  • 보안 강화: 패키지가 임의의 다른 패키지에 접근하는 것을 방지하여 보안을 강화합니다.

PnP의 단점

  • 호환성 문제: 일부 패키지나 도구가 node_modules 폴더에 의존할 수 있어, 호환성 문제가 발생할 수 있습니다.
  • 러닝 커브: 기존의 node_modules 폴더 방식에 익숙한 개발자에게는 새로운 방식에 적응하는 데 시간이 걸릴 수 있습니다.

PnP 설정 방법

Yarn에서 PnP를 활성화하려면, 프로젝트 루트에 .yarnrc.yml 파일을 생성하고 다음 설정을 추가합니다:

nodeLinker: pnp

그 후, Yarn 명령어를 실행하여 패키지를 설치하면, PnP가 적용됩니다.

yarn install

이 설정이 적용되면, Yarn은 node_modules 폴더를 생성하지 않고 .pnp.cjs 파일을 통해 패키지를 관리합니다.

결론

PnP는 Yarn Berry의 주요 기능 중 하나로, 패키지 관리의 효율성과 보안을 크게 향상시킵니다. node_modules 폴더를 제거하고, 고정된 의존성 트리를 사용하여, 더 빠르고 안정적인 패키지 관리를 제공합니다. 하지만, 일부 호환성 문제를 고려해야 하므로, 프로젝트에 적용하기 전에 충분한 테스트가 필요합니다.

*Chat GPT를 설명본과 정리본입니다.
profile
기록, 꺼내 쓸 수 있는 즐거움

0개의 댓글

관련 채용 정보