새로운 사이드 프로젝트를 시작하면서 처음 알게 된 모노레포이다.
사용 방법은 어렵지 않은것 같지만 한번 정리해본다.
모노레포(Monorepo)는 여러 개의 프로젝트를 단일 저장소에 포함시키는 방식을 의미한다. 이는 소프트웨어 개발 및 관리를 단순화하고 개발자들 간의 협업을 용이하게 만들어준다.
리액트에서 모노레포를 구성할 때는 주로 Yarn 또는 npm과 함께 Lerna 또는 Yarn Workspaces와 같은 도구를 사용한다.
코드 공유
여러 프로젝트 간에 코드를 공유할 수 있다. 이는 중복 코드를 중리고 유지 보수성을 향상시킨다.
의존성 관리
모든 프로젝트가 동일한 저장소에 있기 때문에 의존성을 관리하기가 더 쉽다. 버전 충돌 및 호환성 문제를 줄일 수 있다.
통합 및 배포
단일 저장소에서 모든 프로젝트를 관리하기 때문에 통합 및 배포 프로세스를 단순화 할 수 있다.
공통 리소스
공통 컴포넌트, 라이브러리 및 도구를 사용할 수 있다. 이는 일관된 UI/UX를 유지하고 개발 생산성을 높이는 데 도움이 된다.
테스트 및 개발 환경
통합된 테스트 및 개발 환경을 설정할 수 있다. 이는 개발자들이 통합된 환경에서 작업하여 개발 및 테스트를 효율적으로 수행할 수 있도록 도와준다.
my-monorepo/
packages/
package1/
src/
package.json
package2/
src/
package.json
package.json
yarn.lock
여기서 packages/
디렉토리는 모노레포의 모든 프로젝트를 포함한다. 각 프로젝트는 별도의 디렉토리로 구분되어 있다.
아래는 최상위 package.json
파일이다.
{
"name": "my-monorepo",
"version": "1.0.0",
"private": true,
"workspaces": [
"packages/*"
],
"scripts": {
"start": "echo 'Start script for the entire monorepo'",
"build": "echo 'Build script for the entire monorepo'"
}
}
name
: 모노레포의 이름을 지정한다.version
: 모노레포의 버전을 지정한다.private
: 개인적인 프로젝트인지 여부를 나타낸다. true
로 설정되면, npm 레지스트리에 배포할 수 없다.workspaces
: Yarn Workspaces나 Lerna와 같은 도구가 사용하는 설정으로, 모노레포 내의 모든 패키지가 있는 디렉토리를 지정한다.scripts
: 모노레포 전체에 대한 스크립트를 정의한다.