4차산업혁명의 일꾼/개발문답

모노레포란 무엇인가요?

르무엘 2025. 6. 19. 10:44

모노레포는 mono(단일) 와 repo(레포지토리) 를 합친 용어로, 여러 프로젝트 또는 패키지를 하나의 코드 저장소에 통합하여 관리하는 방식을 의미합니다.

모노레포를 구성하기 위해 대표적으로 두 가지 구성 방식이 사용됩니다.

먼저, 프로젝트 단위로 분리된 구조를 사용합니다. 모든 프로젝트가 하나의 저장소 안에서 각각 독립적인 폴더로 구성되며, 각 폴더는 독립적인 패키지로 관리됩니다. 이때 프로젝트 간의 공통 의존성은 yarn workspaces나 npm workspaces 같은 기능을 사용해 중앙에서 관리합니다. 이를 통해 중복된 의존성을 최소화하고, 프로젝트 간 코드 공유를 쉽게 합니다.

다음으로, 공통 모듈을 별도의 폴더로 분리하는 방식을 사용합니다. 예를 들어, 여러 프로젝트에서 자주 사용하는 유틸리티 함수, 스타일, 공통 컴포넌트를 shared라는 폴더에 모아두고 각 프로젝트에서 이를 가져다 사용하는 방식입니다. 이렇게 하면 공통 코드를 한 번만 업데이트해도 여러 프로젝트에 즉시 반영할 수 있어 효율적입니다.

모노레포의 장점은 무엇인가요? 🤔
첫째, 여러 프로젝트의 코드 및 설정 등을 일관되게 관리할 수 있다는 점입니다. 예를 들어, 대규모 조직에서 여러 팀이 각기 다른 서비스를 개발하더라도, 모노레포를 통해 동일한 코드베이스에서 협력할 수 있습니다. 이를 통해 공통 모듈이나 설정 등을 공유하여, 불필요한 중복 작업을 줄이고 협업 효율성을 높일 수 있습니다.

둘째, 모노레포는 중앙화된 의존성 관리를 가능하게 해줍니다. 예를 들어, 프로젝트 내에서 공통으로 사용되는 유틸리티나 컴포넌트를 한 번 업데이트하면 모든 관련 프로젝트에 즉시 적용할 수 있습니다.

또한, 여러 프로젝트들이 동일한 버전 관리 시스템을 공유할 수 있습니다. 이를 통해 한 프로젝트에서 변경된 사항이 다른 프로젝트에 미치는 영향을 보다 명확히 추적할 수 있습니다.

모노레포의 단점은 없나요? 🧐
물론, 모노레포에도 단점이 있습니다.

첫째, 스케일링이 복잡하고 어려워집니다. 여러 프로젝트들이 모여 있으니 코드베이스가 빠르게 커지는데, 이때 빌드 및 테스트 시간이 그와 비례하여 길어집니다. 또한, CI/CD 파이프라인 관리의 복잡도가 증가합니다. 이러한 단점을 극복하기 위해 Nx, Turborepo와 같은 모노레포 관리 툴을 이용할 수 있습니다.

또한, 권한 관리가 까다로울 수 있습니다. 모든 프로젝트가 하나의 저장소에 통합되기 때문에 특정 팀이나 프로젝트만 접근 권한을 가지도록 설정하는 것이 어렵습니다.

이러한 단점을 고려했을 때, 작은 규모의 팀이나 단일 프로젝트 중심의 개발 환경에서는 오히려 복잡성을 증가시킬 가능성이 있어 모노레포 사용이 적합하지 않을 수 있습니다.

LIST