모노레포 구축
카테고리 | 기술 |
---|---|
태그 | |
수정일 | Dec 18, 2023 |
작성일 | Nov 24, 2023 |
개념
정의
하나의 대규모 저장소(repository)에 여러 프로젝트나 애플리케이션의 코드를 포함하는 소프트웨어 개발 방식
개념도
Untitled.png
모노리틱 아키텍처, 멀티 레포, 모노 레포 비교 표
특징/속성 | 모노리틱 아키텍처 | 멀티 레포지토리 | 모노 레포지토리 |
---|---|---|---|
개념적 일관성 | 높음 | 낮음 | 높음 |
코드 공유 및 재사용 | 용이 | 어려움 | 용이 |
빌드 및 배포 통합 | 용이 | 어려움 | 용이 |
프로젝트 간 의존성 관리 | 용이 | 어려움 | 용이 |
통합된 버전 관리 | 용이 | 어려움 | 용이 |
협업과 통합 테스트 | 편리 | 어려움 | 편리 |
유연성 | 낮음 | ||
(하나의 기술 스택) | 높음 | ||
(다양한 기술 스택 사용 가능) | 높음 | ||
(다양한 기술 스택 사용 가능) | |||
큰 프로젝트에서 관리 용이성 | 어려움 (커다란 코드베이스 관리 어려움) | 어려움 (다수의 저장소 관리 어려움) | 편리 |
도구 및 자동화 지원 | 풍부한 지원 | 일부 도구들은 멀티레포注意 | 일부 도구들은 모노레포지토리에 적합함 |
도구
모노레포 구현을 위한 도구로는 대표적으로 Lerna
, Turberepo
, Nx
와 같은 것들이 있다.
Lerna
특징:
- 주로 JavaScript 프로젝트의 모노레포를 관리하기 위한 도구.
- 프로젝트를 패키지로 분리하고, 각 패키지를 개별적으로 관리할 수 있도록 지원.
- 패키지 간 의존성 관리 및 공통된 빌드 및 배포 프로세스를 제공.
장점:
- 간단하고 가볍다.
- 기본적인 모노레포 요구 사항을 충족시킬 수 있다.
단점:
- 일부 복잡한 멀티레포 요구 사항에는 한계가 있을 수 있다.
Turborepo
특징:
- Bazel 빌드 시스템을 기반으로 한 고성능 모노레포 도구.
- 대규모 프로젝트 및 고성능 빌드에 최적화되어 있음.
- 다양한 언어 및 플랫폼에서 사용 가능.
장점:
- 높은 성능과 확장성을 제공.
- 복잡한 모노레포 환경에서 효과적으로 작동.
단점:
- 학습 곡선이 다소 가파르다.
- 설정 및 구성이 다른 도구에 비해 더 복잡할 수 있다.
Nx
특징:
- Angular용으로 시작된 오픈 소스 도구. 이제는 Angular 이외의 프로젝트도 지원.
- 모노레포를 구성하고, 코드의 일관성을 유지하며, 빌드 및 테스트를 효율적으로 수행.
- 코드 생성, 의존성 분석, 테스트 등을 위한 **`풍부한 기능`** 제공.
장점:
- Angular 프로젝트와 관련된 개발에 특히 적합.
- 개발자 경험을 향상시키기 위한 다양한 도구와 플러그인을 제공.
단점:
- Angular 이외의 프로젝트에 대한 지원이 덜 강조될 수 있음.
구현 예시
설치
# 프로젝트 폴더 생성
mkdir lerna-sample
cd lerna-sample
# lerna 설치 및 실행
npx lerna init -i
설정
// lerna.json 수정
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"version": "independent",
"packages": [
"packages/*"
],
"npmClient": "yarn"
}
version: "independent"
- 패키지 배포와 관련된 버전을 패키지별로 독립적으로 가져가기 위한 설정
`npmClient: "yarn"`
- `npm` 대신에 `yarn`을 사용하기 위해 선언
패키지 추가
**lerna create** **<패키지명>**
의존성 설치
# 공통 의존성 설치
**yarn add <모듈명>**
# 개별 의존성 설치
**yarn workspace <모듈명> add <패키지명>**
실제 사용 사례 예시를 쓰고 싶은데 너무나 시간이 부족하다 🫠
Previous Nov 23, 2023
« 코딩 컨벤션
« 코딩 컨벤션
Nov 25, 2023 Next
서울의 봄 (2023) »
서울의 봄 (2023) »