23P by xguru 4달전 | favorite | 댓글 4개

Monorepo란 무엇인가

  • "여러 개의 개별 프로젝트를, 잘 정의된 관계를 통해서 하나의 Repo에 담은 것"
  • Monorepo ≠ Monolith

왜 해야할까 ?

  • 기존의 Polyrepo(여러개의 Repo를 사용하던 방식)를 선택한 이유는 "팀 자율성(team autonomy)" 때문이었음
    • 팀들이 각자 원하는 라이브러리를 선택하고, 누가 코드에 기여하고 사용하는 지를 결정하는게 가능
  • PolyRepo
    • 코드 공유가 번거로움
    • 코드 중복이 많음
    • 공유 라이브러리의 크리티컬 버그 및 큰 변경시 비용이 많이 듬
    • 프로젝트별 일관되지 않은 개발도구 사용
  • Monorepo
    • 새로운 프로젝트를 생성하는 오버헤드가 없음
    • 전체 프로젝트에 걸침 아토믹 커밋
    • 모든 것을 버전 번호 하나로 관리
    • 개발자 모빌리티(프로젝트간 이동)

Monorepo 툴들이 제공하는 기능들과 각 도구간 비교

→ Bazel, Gradle, Lage, Lerna, Nx, Rush, Turborepo

  • 로컬 캐슁
  • 로컬 태스크 오케스트레이션
  • 분산 캐슁
  • 분산 태스크 실행
  • 투명한 리모트 실행
  • 영향받는 프로젝트/패키지 감지
  • 워크스페이스 분석
  • 종속성 그래프 시각화
  • 코드 공유
  • 일관적인 툴링
  • 코드 생성
  • 프로젝트 제약 및 가시성

인식의 전환

모노레포는 여러분의 "조직코드에 대해 생각하는 방식"을 바꿉니다

  • 일관성을 추가하고,
  • 새 프로젝트 생성할 때나 대규모 리팩토링을 수행할 때 마찰을 줄이며,
  • 코드 공유 및 팀간 협업을 촉진함으로써
  • 조직이 보다 효율적으로 작업할 수 있음

다양한 솔루션들이 있지만, 각자 목표가 다름

  • Bazel (by Google) : “A fast, scalable, multi-language and extensible build system.”
  • Gradle (by Gradle, Inc) : “A fast, flexible polyglot build system designed for multi-project builds.”
  • Lage (by Microsoft) : “Task runner in JS monorepos”
  • Lerna : “A tool for managing JavaScript projects with multiple packages.”
  • Nx (by Nrwl) : “Next generation build system with first class monorepo support and powerful integrations.”
  • Rush (by Microsoft) : “Geared for large monorepos with lots of teams and projects. Part of the Rush Stack family of projects.”
  • Turborepo (by Vercel) : “The high-performance build system for JavaScript & TypeScript codebases.”
bbulbum 4달전  [-]

토발즈가 대부분의 상황에서 공유라이브러리는 좋은 생각이 아니라고 했던게 생각나네요.. 최근 적용해보고 있는데 생각보다 공유할만한 부분은 적고 빌드시스템이 꼬이는부분은 커서 저는 모노레포가 기대만큼 이상적인 시스템이 아니라는 생각..

답변달기
kleinstein 4달전  [-]

응용 프로그램을 개발해서 고객사 마다 설치하다보면,
어떤 고객사는 더이상 업그레이드를 원치 않을때도 있고,
어떤 고객사는 그들만의 특별한 버전을 요구할때도 있어요.

그래서 이런 고객사들이 늘어나다 보면,
결국 Repository가 한 수십개의 고객사 맞춤 버전 branch 로 가득합니다.
각 branch 마다 조금씩 다른 버전이 들어있어요.

이런 상황에서 Monorepo 글을 보니까.. 정말 꿈같은 이야기처럼 들리네요. ㅎㅎ

답변달기
galadbran 4달전  [-]

subversion 이 대세이던 시절에는 그냥 너무 당연했던 일인데 뭔가 아이러니하다는 생각이 많이 들어요.
프론트엔드 개발만 한정해서 다뤄지는 것도 의아하고요.
ms 에서 git 도 subversion 처럼 쓸 수 있게 가상파일시스템을 만들었는데 그게 일반화되지 않아서 슬프네요.

답변달기
xguru 4달전  [-]

뭔가 요즘 보면 기술이 돌고 도는 느낌이 더 심하긴 해요.
어 이거 예전에 별로 였던 그거 아냐? 라는 생각이 들 때가 있어서.. 너무 오래 굴렀나 싶어요. 흑흑

답변달기