Monorepo Tool

Monorepo Tool (Lerna, Nx, Rush, Turborepo)

패키지 매니저 워크스페이스의 기능들 외에 전문적으로 개발하기 위해 필요한 도구 및 기능들 (속도, 분석, 관리 측면)

https://monorepo.tools/

  • 개발 과정 중 여러 패키지들을 사용할 때 패키지의 코드를 그냥 사용하는 것이 아닌 빌드 과정이 필요하기 때문에 코드를 실행하기 전 매번 빌드를 해주어야하는 번거로움이 있다.

    • 모노리포 툴을 활용한다면, 코드 변경점이 없는 경우 캐싱된 빌드 파일을 사용한다거나 이런 번거로움을 해소해주는 많은 기능들이 포함되어 있다.

  • 리포지토리 내 워크스페이스에 대한 분석과 시각화 기능을 활용하여 전체적인 참조 의존 관계를 파악하기 효과적

  • 스케폴딩이나 코드 공유, 패키지 사용 제한 등의 관리를 수작업이 아닌 도구들을 활용하면 편함

  • 모노레포 도구를 살펴보면서 몰랐던 모노리포의 유용한 기능들을 파악할 수 있다.

Package Manager Workspaces란?

패키지 매니저(NPM, Yarn, Pnpm)에서 루트 프로젝트 내부에 workspace 기능으로 여러 하위 패키지들을 생성하고 연결할 수 있다.

패키지 매니저 만으로는 모노리포를 운영하기 아쉬운 부분들이 존재

Monorepo Tool 제공 기능들

속도

  • Local computation caching (로컬 캐싱)

    • Lerna, Nx, Rush, Turborepo

    • 한번 실행된 결과물(빌드)을 캐싱하여 캐싱된 자원을 활용하는 기능

  • Distribute computation caching (분산 캐싱)

    • Lerna, Nx, Rush, Turborepo

    • 같은 컴퓨터가 아닌 여러 작업 환경에서 동일한 캐싱된 빌드 자원을 활용하도록 하는 기능

    • CI 작업할 때 중요

  • Local task orchestration (로컬 작업 오케스트레이션)

    • Lerna, Nx, Rush, Turborepo

    • 종속성 이슈로 빌드의 순서를 제어해서 작업의 순서를 나열해야 한다면 병렬적으로 실행할 수 없게 된다.

    • 종속성 이슈가 없는 부분을 병렬적으로 빌드하도록 설정하는 기능을 제공

  • Distribute task execution (분산 작업)

    • Lerna, Nx

    • 로컬이 아닌 분산 환경에서 작업을 실행하는 기능을 제공

  • Detecting affected packages (변경 감지)

    • Lerna, Nx, Rush, Turborepo

    • 변경 사항에 영향을 받는 항목들만 결정할 수 있는 기능을 제공

    • 특정 패키지의 코드가 수정되면 해당 코드에 영향을 받는 애들만 빌드 또는 테스트를 실행할 수 있게 된다.

분석

  • Workspace analysis (작업 영역 감지 및 분석)

    • Lerna, Nx, Rush, Turborepo

    • 별도의 추가 설정 없이 package.json 을 사용해서 워크스페이스의 프로젝트 그래프를 분석할 수 있는 기능

  • Dependency graph visualization (의존성 그래프 시각화)

    • Nx, Turborepo

    • 프로젝트 패키지의 종속성 관계를 시각화 해주는 기능

    • turborepo는 HTML 문서로만 제공하고 Nx는 검색, 필터링 등 인터렉티브 기능을 추가로 제공

관리

  • Source code sharing (소스 코드 공유)

    • Lerna, Nx, Rush, Turborepo

    • 개별 소스 코드 조각을 쉽게 공유해주는 기능

    • 기본은 NPM Package만 공유사항

  • Code generation (스케폴딩)

    • Nx

    • package.json 만 있다면 스케폴딩을 생성해주는 기능을 제공

  • Consistent tooling (일관된 도구)

    • Nx

    • 일관된 방식으로 여러 도구들을 활용할 수 있는 기능을 제공

  • Project contraints and visibility (종속성 관계 제한)

    • Nx, Rush,

    • 리포지토리 내의 종속성 관계를 제한하는 규칙을 설정

Last updated