Monorepo Tools

최경식
6 min readJul 17, 2022

--

다양한 철학을 가진 훌륭한 팀이 구축한 훌륭한 Monorepo Tools가 많이 있습니다. 이러한 Tools는 제공해야 할 조건들이 있습니다.

저장소 모델(Repository Model)에 대한 이야기는 “당신이 알아야할 저장소 모델(Repository Model)”을 통해 확인해 주세요.

Monorepo Tool 조건

Local computation caching

같은 머신에서 같은 것을 두 번 빌드하거나 테스트하지 않습니다.

Local task orchestration

작업을 올바른 순서로 병렬로 실행하는 기능

Distributed computation caching

다양한 환경에서 캐시 아티팩트를 공유하는 기능

Distributed task execution

single machine에서 여러 machine에 명령을 내리는 기능

Detecting affected projects/packages

영향을 받을 수 있는 항목을 결정하여 영향을 받는 프로젝트만 빌드/테스트합니다.

Workspace analysis

추가 구성 없이 작업 공간의 프로젝트 그래프를 이해하는 기능

Dependency graph visualization

프로젝트나 작업 간의 종속 관계를 시각화합니다. 시각화는 사용자와 상호작용하여 그래프에서 노드를 검색, 필터링, 숨기기, 포커스/강조 표시 및 쿼리할 수 있습니다.

Source code sharing

소스 코드의 개별 조각을 쉽게 공유할 수 있습니다.

Consistent tooling

다양한 JavaScript frameworks, Go, Rust, Java 등 프로젝트 개발에 사용하는 것과 상관없이 일관된 경험을 얻을 수 있도록 도와줍니다.

Code generation

generating code를 위한 지원

Project constraints and visibility

리포지토리 내에서 종속성 관계를 제한하는 규칙 정의를 지원합니다.

예를 들어, 개발자는 다른 사람이 프로젝트에 의존할 수 없도록 일부 프로젝트를 팀 전용으로 표시할 수 있습니다. 개발자는 사용된 기술(예: React 또는 Nest.js)을 기반으로 프로젝트를 표시하고 백엔드 프로젝트가 프론트엔드 프로젝트를 가져오지 않도록 할 수도 있습니다.

Monorepo Tools Comparison

Monorepo Tools를 사용한다면 어떤 것을 사용해야 할까?

최근 웹개발에서 많이 언급되는 것은 Turborepo와 Nx가 많이 언급이 되고 있습니다.

Vercel에 배포해서 사용하려면 Turborepo(by Vercel)가 최선의 선택인 것처럼 보입니다(Turborepo는 2021년 12월에 Vercel에의해 인수되었습니다.).

다른 배포 환경이라면 현재 Monorepo Tools에서 가장 많이 사용하는 Nx를 사용해 보는 것도 좋을 것 같습니다.

Turborepo and Nx

아래 내용은 Nx쪽에서 작성된 비교내용이지만 Turborepo가 신생이고 Nx는 5년정도로 오래되었기 때문에 기능상 많은 차이는 있을 수 밖에 없습니다.

다만, Nx에서도 Turborepo에 대해서 관심을 가지고 있고 Turborepo에도 곧 Nx의 기능들이 많이 추가될 것이라 생각하고 있는 것 같습니다. Turborepo의 경우 환경 구성하기가 쉽고 Vercel 배포시 가능성을 생각한다면 Turborepo도 상당히 괜찮은 선택입니다.

개인적으로 CI Tools로 비교하자면 Turborepo는 Travis CI나 CircleCI라고 생각되고 Nx는 Jenkins와 같은 느낌??

참고

관련 내용은 아래 영상에서도 소개되고 있습니다.

--

--

최경식
최경식

Written by 최경식

Lead Software Engineer, Client Side/Lightweight Full stack

No responses yet