개발을 진행하며 느낀 점과 리포지토리 관리 전략: 모노레포 vs 멀티레포
product Software Technology

개발을 진행하며 느낀 점과 리포지토리 관리 전략: 모노레포 vs 멀티레포

블로그 운영과 함께 다양한 제품(KuroCMS, KuroEditor, KuroNote 등)을 개발하면서 겪은 파일 및 리포지토리 관리의 어려움과 모노레포 도입에 관한 실전 고찰입니다.


블로그 운영을 위해 시작한 KuroCMS를 필두로, WYSIWYG 에디터인 KuroEditor, Cloudflare Worker의 보안을 책임지는 WorkerOps, 그리고 현재 개발 중인 KuroNote와 같은 모바일 앱에 이르기까지 쿠로우사기는 여러 독립적인 제품들을 개발해 오고 있습니다. 각 제품은 독립적인 서비스이지만, 공통 코드 모듈을 공유하여 사용하는 경우가 많습니다. 지금까지는 제품마다 별도의 리포지토리를 만들어 관리했으나, 실제 개발 과정에서 수많은 문제와 비효율이 발생했습니다. 겪었던 주요 문제점들을 간략히 정리해 봅니다.

멀티 리포지토리(Multi-repo) 관리에서 발생한 문제들#

  • 복잡하고 제각각인 릴리스 과정: 코드 수정부터 배포까지의 절차가 제품 및 라이브러리마다 달라 혼란과 관리 비용이 가중되었습니다.
  • 코드 복제와 버전 불일치: KuroCMS와 KuroNote는 모두 KuroEditor를 사용합니다. 그러나 리포지토리가 분리되어 있어 각 프로젝트에 KuroEditor 복사본을 둘 수밖에 없었고, 최신 업데이트가 어긋나는 현상이 발생했습니다. 특히 AI 어시스턴트를 활용할 때 AI가 원본 라이브러리가 아닌 복사본을 수정해 원본과 충돌을 일으키는 일도 잦았습니다.
  • 분산된 환경변수 및 보안 정보 관리: .env 파일(Worker 시크릿, 배포용 패스워드 등)이 프로젝트 폴더마다 흩어져 있어 관리가 번거로워졌고, 동일한 환경변수 이름 간 충돌로 인해 오류 해결에 오랜 시간이 걸리기도 했습니다.

개발 규모가 커질수록 멀티레포의 단점이 두드러졌습니다. 하지만 멀티레포 방식에도 분명한 장점들이 존재합니다.

멀티 리포지토리의 장점#

  • 높은 독립성: 각 프로젝트별로 권한 설정, CI/CD 파이프라인, 개발 도구를 자유롭게 최적화할 수 있습니다. 웹 애플리케이션의 경우 GitHub Actions와 연동하여 git push만으로 상용 환경에 자동 배포하는 편리함이 있습니다. 다만 GitHub Actions의 무료 제공량은 제한적이어서 빈번한 배포 시 금방 한도에 도달합니다. 기업이라면 비용 문제가 없겠지만, 1인 개발 환경에서는 Wrangler와 같은 CLI 명령어로 Cloudflare에 직접 배포하는 편이 구조가 훨씬 단순합니다.
  • 경량화 및 빠른 속도: 제품 단위로 리포지토리가 나뉘어 있어 크기가 작고, 클론이나 브랜치 전환 작업이 매우 신속합니다.
  • 영향 범위의 제한: 특정 리포지토리의 버그나 리팩터링이 다른 무관한 시스템에 직접적인 영향을 미치지 않습니다.

Cloudflare 배포용 Wrangler 명령어 사용 시 유의사항

가장 큰 불편함은 wrangler login 시 로그인된 계정을 전환하는 작업입니다. 개인 계정과 법인 계정 간 전환 시 매번 OAuth 인증을 거쳐야 하는 번거로움이 있습니다. 여러 환경을 오가는 개발자라면 Wrangler의 환경 전환 기능과 환경변수 설정을 활용하여 사전 인증된 프로필을 전환하며 사용하는 방식을 강력히 추천합니다.

대안으로 주목받는 모노리포지토리(Monorepo)란?#

말 그대로 모든 제품, 라이브러리, 도구들을 하나의 거대한 리포지토리에 모아서 관리하는 방식입니다. 단순해 보이지만 멀티레포에서 겪는 수많은 문제들을 말끔히 해결해 줍니다.

<주요 장점>

  • 간편한 코드 공통화: 별도의 복사본을 만들 필요가 없습니다. 모든 프로젝트가 한 리포지토리에 있어 상대 경로로 최신 라이브러리 코드를 바로 import할 수 있으며, 구조적으로 최신성이 항상 보장됩니다. AI가 복사본을 엉뚱하게 수정하는 실수도 방지됩니다.
  • 유기적인 횡단 수정: API 스펙 변경과 클라이언트 수정을 단 한 번의 커밋으로 동시에 반영할 수 있습니다. AI 협업 시에도 큰 이점입니다. 라이브러리마다 세션이 나뉘면 AI 컨텍스트 영역의 차이로 인해 이전 작업 내용을 잊거나 엉뚱한 코드를 작성하기 쉬우며, AGENTS.md에 작성해 두어도 놓치는 경우가 많기 때문입니다.
  • 전체 아키텍처 파악 용이: 전체 소스코드가 한곳에 있어 다른 프로젝트의 코드를 참고하기 쉽고 전반적인 시스템 이해도가 높아집니다.

<단점 및 고려사항>

  • 리포지토리 용량 증가: 코드 양이 늘어남에 따라 클론 및 빌드 시간이 증가할 수 있습니다. 하지만 최근 Git의 Partial Clone이나 Sparse Checkout 등의 기능을 활용하면 멀티레포 수준의 쾌적한 속도를 유지할 수 있습니다.
  • 권한 관리 및 CI 복잡도: 리포지토리 전체에 대한 세분화된 접근 권한과 CI 파이프라인 설계에 신경을 써야 합니다. 그러나 1인 개발 환경이고 모바일 앱 위주의 개발과 Wrangler 직접 배포를 활용한다면 이러한 단점은 거의 체감되지 않습니다.

CI/CD란 정확히 무엇인가?

CI/CD는 지속적 통합(Continuous Integration)과 지속적 배포/전달(Continuous Delivery / Continuous Deployment)의 약자입니다. 개발 중인 코드를 테스트나 운영 환경에 자주 배포하여 즉각적인 피드백을 통해 개발 속도를 끌어올리는 개발 방법론을 뜻하며, 주로 GitHub Actions와 배포 스크립트를 연동해 git push만으로 배포와 결과 확인을 자동화합니다.

과거 유행했던 애자일 개발이나 익스트림 프로그래밍(XP)과 목적을 같이하며, 배포 자동화에 초점을 맞춘 개념입니다.

글로벌 빅테크 기업들이 오래전부터 사용해 온 모노레포#

실제로 구글, 메타, 마이크로소프트 등 글로벌 빅테크 기업들은 수만 명의 엔지니어가 수십억 줄의 코드를 하나의 거대한 모노레포에서 관리하는 것으로 유명합니다. 우버, 스트라이프, 에어비앤비, 스포티파이 등 유수의 기업들도 중복 코드 작성을 방지하기 위해 모노레포를 적극적으로 활용해 왔습니다.

대기업들은 이를 위해 자체 Git 인프라를 구축하기도 하지만, 최근 GitHub의 무료 기능 확대와 경량 도구들의 발전 덕분에 1인 개발자나 소규모 팀도 얼마든지 모노레포의 혜택을 온전히 누릴 수 있습니다.

자신이 축적한 코드 자산을 후속 제품 개발에 낭비 없이 활용하고, 특히 AI 시대에 걸맞은 간결하고 직관적인 구조를 갖추는 것이 개발 생산성 향상의 확실한 지름길이 될 것입니다.



この記事はいかがでしたか?