[DevOps] MonoRepo란?

Song-YunMin·2021년 5월 21일
7

DevOps

목록 보기
2/9

MonoRepo란

MonoRepoMonolithic Repositories 의 약자로, 하나의 리포지토리에서 여러개의 프로젝트가 구성된 것을 의미합니다.

일반적으로는 보통 하나의 리포지토리 안에 하나의 프로젝트가 들어있는 것이 일반적입니다. 이러한 일반적인 형태의 프로젝트 구성을 Multi-repo , PolyRepo 라고 합니다.

MonoRepo를 사용하는 이유

MonoRepo 를 사용하는 이유는 여러가지가 있습니다. 물론 장점만 있는것은 아니기에 프로젝트의 목적 및 환경 등 여러가지 조건을 고려해서 결정하면 좋을것 같습니다.

장점 1. 하나의 리포지토리로 여러개의 프로젝트 관리

하나의 리포지토리가 여러개의 프로젝트를 포함하고 있는것은 큰 편의성을 가집니다. 코드를 짜는 입장에서도 IDE를 열거나, IDE에서 프로젝트를 스위치해가며 개발할 필요없이 하나의 IDE에서 하위폴더로 구분된 여러 패키지들이 코드를 작성할 수 있습니다.

장점 2. 중첩되는 코드의 공통화

A, B, C, D 패키지로 구성된 MonoRepo 가 있고, 여러 프로젝트들이 공통으로 사용해야 하는 로직이 있을때, 이를 쉽게 추가적인 E 패키지로 분리하고, A~D 패키지에서 import 하여 사용할 수 있습니다.

장점 3. 중첩되는 모듈은 하나만 설치해서 사용

A, B, C, D 패키지 모두 node 16.1.0 버전을 사용한다고 가정하면, 각각의 패키지에서 node를 설치할 필요 없이, root path에만 node 를 설치하고 A~D 에서 끌어다 쓸 수 있습니다.

단점 1. Dependency 충돌 문제

특정 패키지가 특정 버전의 모듈을 필요로 하는 경우, 다른 버전의 모듈을 사용하는 패키지와 Dependency 충돌이 발생할 수 있습니다.

단점 2. 단일 리포지토리 문제

여러 프로젝트를 하나의 리포지토리에서 관리하기 때문에 오히려 관리가 어려워 질 수 있습니다.

MonoRepo 로 관리하는 패키지가 많지 않을 경우에는 해당되지 않지만, 관리하는 패키지가 증가함에 따라 오히려 가독성이나 여러가지 측면에서 비효율적이게 될 수 있습니다.

단점 3. 긴 초기 프로젝트 설정시간

MonoRepo 로 포함되는 모든 프로젝트를 사용한다면 상관없지만, 그 중 일부만 필요한 경우에도 node_module 설치가 이루어 져야 합니다.

MonoRepo를 구성하는 여러가지 방법

MonoRepo 를 구성하는 방법은 아래와 같이 여러가지 방법이 있습니다.

1. yarn workspace

node package manager 중에 하나인 yarn 에서는 workspace 기능을 통해서 MonoRepo 를 가능하게 해 줍니다.

2. Lerna

Lerna 는 node module로, yarn 의 workspace와 같은 역할을 합니다. MonoRepo 를 가능하게 해주는 기능을 제공함과 동시에, 설치된 의존성을 제거해주는 clean 기능이나, MonoRepo 로 구성한 package를 npm 배포할 수 있는 기능들을 제공합니다.

yarn workspace로 MonoRepo 구성하기

yarn 의 workspace 기능을 통해서 MonoRepo 를 구성하는 방식은 아주 간단합니다.

yarn init

위 커맨드를 통해서 Project를 초기화 하고, package.json 에 아래와 같이 privateworkspaces Property를 설정하면 됩니다.

// package.json
{
  ...
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  ...
}

Dependency 관리 방식

위 방식대로 설정을 마치고, 패키지를 구성한 뒤 의존성을 설치하게 되면, 패키지 각각의 패키지에서 요구하는 모듈의 버전을 확인하여 공통되는 부분은 root의 node_modules 폴더 안에 설치를 하고 symlink를 통해 각각의 패키지로 연결하여 사용하면 됩니다.

Reference

Monorepo With Yarn Workspaces

profile
고독한 서버 개발 3년차

0개의 댓글