모노레포 마법: Turbo, Nx, Lerna로 JS 코드를 가속화하다
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
JavaScript 프로젝트에서 모노레포 아키텍처를 사용하거나 Next.js, React 등 프레임워크 기반 개발을 수행하는 개발자
핵심 요약
- 모노레포는
apps/
및packages/
폴더 구조로 구성되어 다중 프로젝트 코드 공유 및 패키지 관리를 가능하게 한다. - Turborepo는
turbo.json
을 통해 병렬 처리와 캐싱 기능을 제공해 빠른 빌드 속도를 구현한다. - Nx는 패키지 관리와 빌드 오케스트레이션, 제너레이터 도구를 통합하여 전체적인 모노레포 툴킷으로 기능한다.
- Lerna는 버전 관리 및 패키지 출판에 특화되며, Nx와 연동하여 고급 기능을 활용할 수 있다.
섹션별 세부 요약
1. 모노레포란?
- 모노레포는
apps/
와packages/
폴더 구조로 구성되어 공유 코드 및 다중 프로젝트 관리를 지원한다. pnpm-workspace.yaml
또는package.json
의workspaces
필드로 패키지 관리가 가능하다.- 공유 라이브러리 또는 유틸리티 함수를 중앙 집중적으로 관리해 중복 코드 제거와 업데이트 효율성을 향상시킨다.
2. 모노레포 도구 비교 (Turborepo, Nx, Lerna)
- Turborepo
- turbo.json
파일을 통해 빌드/테스트/리인트 등의 작업을 정의한다.
- 병렬 처리 및 캐싱 기능으로 빠른 빌드 성능을 제공한다.
- 패키지 관리 기능은 없으며, 작업 오케스트레이션에 특화되어 있다.
- Nx
- 패키지 관리 (Lerna 기능 포함) 및 빌드 오케스트레이션 (Turborepo 기능 포함)을 통합한 전체적인 모노레포 툴킷이다.
- 제너레이터 도구와 의존성 그래프 분석 기능을 제공해 시스템 설계 최적화에 도움을 준다.
- React, Angular, Node.js 등 다양한 프레임워크와 호환된다.
- Lerna
- 버전 관리 및 패키지 출판에 특화된 모노레포 패키지 관리자이다.
- Nx와 연동하여 작업 오케스트레이션 기능을 활용할 수 있다.
- 내부 라이브러리 관리에 적합하다.
3. 모노레포 구조 예시
my-monorepo/
├── package.json
├── pnpm-workspace.yaml
├── turbo.json
├── apps/
│ ├── web/
│ │ └── package.json
│ └── blog/
│ └── package.json
└── packages/
├── ui-library/
│ └── package.json
└── utils/
└── package.json
- 각 package.json
에 "build": "next build"
와 같은 빌드 스크립트를 정의하고, Turborepo 또는 Nx가 작업 순서를 자동으로 처리한다.
결론
- Turborepo는 빠른 빌드 성능이 필요한 프로젝트에 적합하며, Nx는 전체적인 모노레포 관리에 최적화되어 있다.
- Lerna는 패키지 버전 관리에 특화되어 있으나, Nx와 연동하여 고급 기능을 활용해야 한다.
- 모노레포 도구 선택 시 프로젝트 규모와 필요 기능을 고려해 Turborepo, Nx, Lerna의 강점을 조합하여 사용하는 것이 효과적이다.