MSA

[MFA] Node 패키지 매니저, 워크스페이스 개념(soft-navigation,hard-navigation)

차노도리 2023. 11. 19. 12:44

Npm

  • package.json을 사용하여 프로젝트 의존성 및 구성을 관리한다.
  • 프로젝트에 필요한 외부 라이브러리나 도구들을 손쉽게 추가하고 관리할 수 있다.
  • 패키지들 간의 의존성을 자동으로 해결해 준다.
  • 스크립트를 정의하여 빌드, 테스트, 시작등 작업을 간편하게 실행할 수 있다.
  • 한 번에 하나씩 순차적으로 설치한다. (npm5부터는 병렬설치로 개선)
  • lock파일의 도입으로 정확한 의존성 해결과 패키지 설치를 보장한다.
    • 모든 환경에서 동일한 패키지 버전이 사용되어 일관된 동작이 가능해진다.
    • 이전에 설치된 패키지를 캐싱하여 더 빠른 재설치가 가능하다.
    • 패키지 버전을 명시적으로 기록하여 예상치 못한 업그레이드 방지하여 프로젝트의 안정성과, 보안 측면이 좋다.
  • 워크스페이스 기능을 도입되었다. (npm7버전 부터 제공)

 

Yarn

  • package.json 외에도 yarn.lock 파일을 사용하여 프로젝트 의존성 및 구성을 관리한다.
  • 여러 패키지를 동시에 가져와서 설치하도록 최적화되어 있다.
  • 워크스페이스 기능을 도입되었다.
  • 기본적으로 명시적인 의존 관계를 나태내야 사용이 가능하다.
  • node_mouels에 패키지를 저장하는 방식이 아니라 패키지를 압축하여 한 개의. yarn/cache 폴더에 수평적으로 저장한다.
    • 수평적으로 존재하기 때문에 빠르게 찾을 수 있다.
    • 압축 파일을 설치하여 설치가 빠르다.
    • 팬텀 디펜던시가 발생하지 않는다.

 

Pnpm

  • 의존성을 효율적으로 관리하는데 초점을 맞춘 패키지 관리자이다
  • 워크스페이스 기능을 제공한다.
  • 패키지 의존성을 하나의 디렉터리에 설치하여 엄격한 의존 관리가 가능
  • 시스템 내에 단일 패키지 스토어에 모든 의존성을 보관하여 디스크 공간이 절약하고, 하드 네비게이션 과정을 통하여 설치 속도가 빠르다.
  • 소프트 네비게이션을 사용하여 프로젝트의 직접적인 의존성만 모듈 디렉토리의 루트에 추가한다.

 

워크스페이스 기능이란?

  • 하드 네비게이션과, 소프트 네비게이션을 통하여 디스크 공간을 절약한다
    • 하드 네비게이션
      • 여러 프로젝트 간에 공통 의존성을 하드 네비게이션으로 생성하여 사용
      • 파일의 사본 역할을 하여 원본 파일이 삭제되더라도 하드 네비게이션에 데이터가 포함되어 있어서 데이터에 엑세스 가 가능하다.
    • 소프트 네비게이션
      • 하나의 프로젝트가 여러 프로젝트에 공유될 때 심볼릭 링크를 사용
      • 소프트 링크는 파일 이름에 대한 포인터를 참조하는 역할을 하여 원본 파일이 삭제되거나 이동할 경우 동작하지 않는다.
      • 심볼릭 링크 : https://en.wikipedia.org/wiki/Symbolic_link
  • 모든 프로젝트의 의존성 버전을 통합적으로 관리한다.
  • 단일 코드베이스에서 모든 프로젝트를 함께 빌드하고 테스트할 수 있다.