+44 203 858 0803 hello@hip.property

모노 대 micro repos에 대한 논쟁은 개발자 서클 사이에서 격렬한 논쟁을 불러 일으켰습니다. 탭 대 공간만큼 분열하지는 않지만, 통로 양쪽에서 시간을 보냈습니다.

FinTech의 컨설턴트였던 마지막 직장에서 우리는 마이크로 리포즈를 광범위하게 사용했습니다. 그것은 하나의 프로젝트에서 매우 유익했으며, 또 다른 프로젝트에서는 이익보다 고통을 더 많이 겪었습니다. 그래서, HiP에 합류했을 때 처음에는 모노 레포를 사용하고 빨려들 때 스위치를 사용하기로 결정했습니다. 지금까지는 그렇지 않았습니다.

그러나 우리는 단일 라이브러리에 모든 라이브러리, 마이크로 서비스 및 클라이언트 / 응용 프로그램 코드를 포함하여 소수의 다른 저장소를 보유하고 있습니다. 그러나 빌드 체인의 일부인 도구 중 일부는 티노 그리고, 탈옥 그들 자신의 repos에 살고있다. 이것은 실용적인 균형처럼 느껴집니다.

양측에는 강력한 논쟁이 있으며, 각 접근법의 장점을 알 수 있습니다.

마이크로 레포즈에서

Micro-repos (많은 개별 리포지토리, 일반적으로 아티팩트 당 하나)가 마이크로 서비스 사고 방식에 잘 맞습니다. 우리는 myrepos 툴 체인의 핵심 부분으로, 체크 아웃과 IDE 경험이 정말 즐겁습니다.

다음과 같은 경우에는 micro-repos를 사용해보십시오.

  • 서비스 (또는 라이브러리)는 서로 독립적으로 진화합니다.
  • 이 코드는 별도의 팀에서 작업하며 자체 사이클을 통해 릴리스됩니다.
  • 각 서비스를 자체 서비스로 취급하고 있습니다. 생성물

전문가

  • 짧은 빌드 사이클, 신속한 피드백 제공
  • 적절하게 캡슐화되었을 때, repostiories / projects는 "더 가볍고 느꼈다"
  • 더 자주 출시주기를 권장합니다. 이것 자체는 좋지만, 우리가 자주 발표했기 때문에 우리는 릴리스 사이클을 더 부드럽게 만들기위한 다른 우수 사례를 채택했습니다. 예를 들어 다음과 같이 다른 우수 사례를 채택했습니다. 의미 론적 변경 로그 그리고, 시맨틱 릴리즈
  • 비슷하게, 버전 관리와 서비스 / 프로젝트의 API를 모듈 자체에서 별도로 공개하는 것이 좋은 위생을 시행했습니다. 이러한 마찰은 실제로 변경 사항이 도입되기 전에 변경 사항이 적용되었는지 여부를 고려하여 더 많은 시간을 보냈다는 것을 의미합니다.
  • 다른 속도로 릴리스 (및 업그레이드)를 허용합니다. appA가 LibraryA의 v2.3를 사용하지만 appB가 v2.5를 사용하는 경우 서비스의 큰 영역에서 정상입니다. 이러한 유형의 독립적 인 진화는 micro repos를 사용하면 더욱 자연스러워집니다.

죄수 팀

  • 제어 불능을 쉽게 피할 수 있으며, 모듈 간 종속성 및 릴리스주기를 관리하는 데 많은 시간을 소비하고 있음을 알 수 있습니다.
  • 출시 후 프로젝트 종속성을 최신 상태로 유지하는 것은 어렵습니다. libraryA를 릴리스하면 종종 serviceB 및 frameworkC로 이동하고 업데이트하는 경우가 있었으며 때로는 추가 릴리스가 필요했습니다. 오래 전에 우리는 릴리스 사이클의 긴 체인에있었습니다.
  • 교차 리포 변경 (서비스 또는 주요 기능을 수행 할 때 더 자주 발생)이 발생하면 홍보가 분리되어 전체 변경 사항을 한 곳에서 볼 수 없습니다. 이로 인해 리뷰어는 더 많은 지식을 기억에 담아야만하며, PR 피드백의 전반적인 응집력을 낮추는 것으로 나타났습니다

반 패턴

다음과 같은 경우 Microrepos가 도움이되지 않을 수도 있습니다 (또는 분리 경계가 정확하지 않을 수도 있음).

  • 여러 저장소에서 변경 사항이 자주 발생 함을 알았습니다.
  • 의존성 관리가 어려워진다.

참고 - 마이크로 리포지토리가 잘 작동하는 경우에도 추상화보다는 리포지토리를 그룹별로 그룹화했습니다. 이것은 featureX에 대한 웹 코드가 서비스 코드와 동일한 repo에 존재한다는 것을 의미했습니다. 이것은 특히 유용했으며 팀 전체에서 더 많은 전체 스택 개발을 권장했습니다.

1 회 휴식

Monorepos는 모든 코드가 하나의 큰 저장소 내에있는 곳입니다. 그들은 구글과 페이스 북에서 유명하게 사용되고있다.하지만이 두 가지 접근법을 뒷받침 할 중요한 관례 툴을 만들 필요가있다.

mono-repos if를 사용하는 경우 if:

  • 당신은 작은 팀이거나 함께 출시되는 단일 프로젝트 / 플랫폼에서 작업하는 팀입니다.
  • 당신은 프로젝트에서 새롭고 논리적 인 경계가 어디인지 아직 알지 못합니다. 이것은 모노리스 우선서비스 설계.
  • 전체 플랫폼이 진화하고 함께 테스트됩니다. 서비스를 독립적으로 릴리스하더라도 나머지 서비스는 잠금 단계로 업그레이드해야합니다. 이는 특히 일회용으로 효과적입니다.

전문가

  • 전반적으로 빌드 관리자가 빌드 시간이 오래 걸리지 만 빌드 관리자에게 보내는 시간이 훨씬 적다는 것을 알았습니다.
  • 위와 관련되어 있지만 모듈 구조가 더 간단합니다. BOM 프로젝트, 또는 부모 pom을 논쟁.

죄수 팀

  • 빌드는 오래 걸리고 프로젝트가 성장함에 따라 계속 증가합니다.
  • CD 파이프 라인을 통한 증분 ​​컴파일을위한 툴링은 특히 컨테이너를 빌드 파이프 라인의 일부로 구축하는 경우에 있어야합니다. (Gradle은 여기 좋지만 최종 docker가 장애물을 쌓는 데 걸림돌이됩니다.)
  • 파이프 라인이 '변경된 사항을 그냥 공개'빌드를 지원하기 위해 훨씬 더 맞춤 제작 로직을 필요로합니다. 우리는 현재이 작업을 연기 했으므로 각 릴리스가 새로운 서비스가 아닌 전체 함대를 배치하게됩니다.
  • 일반적으로 모듈 간 종속성이 침입하기가 더 쉽기 때문에 의존성 위생을 추가로 수행해야합니다.
  • 우리는 실제로 아티팩트를 공개하려고하는 동기가 적다. 결과적으로 현재 HiP의 모든 것이 0.1.0-SNAPSHOT. 차례대로 우리는 위의 의미 론적 커밋 로그의 결과를 보지 못한다. 이것은 우리의 커밋 메시지가 낮은 품질로 향하는 경향이 있음을 의미한다.
  • 서비스가 모두 함께 업그레이드되지 않으면 혼란 스러울 수 있습니다. 라이브러리의 이전 버전에 따라 다른 모듈을 사용하지 못하게하는 것은 없지만, 코드를 탐색 할 때 클래스를 탐색하고 사용중인 코드가 저장소에없는 코드를 발견하면 혼란 스럽습니다. Maven에서 풀 버전.

반 패턴

  • 레포의 특정 폴더에 대한 변경 사항이 특별한 승인을 필요로한다는 것을 알게되면 (예 : 변경 사항을 승인해야하는 프로젝트 소유자가 있음) 전체 repostiory 개발자 자치를 가능하게하기 위해 별도의 작업을 고려하십시오.

개요

일반적으로, 나는 monorepo로 전환 (또는 복귀)이 크게 긍정적이라는 것을 알게되었습니다. 그러나 빌드 파이프 라인을보다 스마트하게 만드는 데 더 많은 시간을 투자해야합니다. 마이크로 리포지스로 관리해야했던 것과는 다른 유형의 복잡성입니다.

micro-repos가 가장 잘 작동하는 시간은 모노 리포 (mono-repo)로 시작한 다음 빌드 사이클의 고통을 느끼기 시작한 때였습니다. 그러나, 분리 된 것은 고통 스러웠고 상당한 시간이 걸렸다. 우리가 같은 도구를 사용했다면 탈옥 repos를 분할하기 위해, 그것은 훨씬 빨랐을 것입니다.

위에 나열된 장단점 중 일부는 단순한 정황에 불과하며 모노 대 마이크로 리포지스에만 필요한 것은 아닙니다. 예를 들어, API 변경 사항을 깨고 신중한 자세를 취하는 것은 microrepo이기 때문에 monorepo에서 달성 할 수 있습니다. 그러나보다 세분화 된 출시주기를 통해 자연스럽게 이러한 사항을 검토하고 발표하기 시작했습니다.

mono-repos에서 마이크로 서비스를 지원하기위한 툴링은 여전히 ​​진화 중입니다. 더 나은 솔루션이 곧 출시 될 것으로 예상됩니다. 그러나 지금은 더 빠른 빌드 속도로 인해 더 느린 빌드 비용을 사용하고 있습니다.

저장저장

저장저장

우리는 웹 사이트에서 쿠키를 사용하고 있습니다.

추적 쿠키를 수락하면 확인하십시오. 또한 추적을 거부 할 수 있으므로 제 3 자 서비스로 전송 된 데이터가 없어도 Google 웹 사이트를 계속 방문 할 수 있습니다.