모노레포 절망편, 14개 레포로 부활하기까지 걸린 1년
개요
-
나는 플렉스의 김종혁이다
- 강의 할 생각에 신난다
-
플랙스는 일주일 정기배포를 없앴다
-
14개의 모노레포로 쪼갰다
- 참고로 올해 6월까지였다
-
플렉스는 올인원 플랫폼을 지향한다
- 플렉스는 강한 의존을 가진다
-
플렉스는 규모가 커졌다
- 다른 도메인과의 연결이 중요하다
- 유틸은 어느 패키지든 가져다 쓸 수 있었다
- 모노레포를 도입해야 한다고 생각했다
- 터보레포를 썼다
- 제품의 크기가 커지니까 의존성이 엄청나게 복잡해졌다.
- 변경될때마다 의존성 때문에 전체배포가 필요했다.
- 그래프 그리는 툴이 에러가 날 정도였다.
- 한날 한시에 배포하고 모두가 모니터링 하는 식이었다
- 모노레포가 망했다.
- 정기배포를 그만하고 싶었다
- 이때문에 모노레포를 해체하게 됐다.
- 폴리레포를 사용하게 됐다
- 코드 파편화, 업무 공유 어려움, 원자적 커밋 불가능 <- 해결 가능함
- 레포지토리 안정성, 정기배포 <- 해결하기 어려움
- 빌드, 버저닝, 변경을 분류했다.
- 각각의 패키지를 개별 레포지토리로 분리시켰다.
- 결국 모노레포는 툴링으로 경계를 명확하게 만들어야 올바르게 동작한다
- 폴리레포는 자연스럽게 경계가 만들어진다
- 폴리레포를 사용하게 됐다
- 이때문에 모노레포를 해체하게 됐다.
-
경계 없이 코드를 공유하지 말것
- 경계가 없으면 코드는 엄청나게 확산된다
- 제품 안정성이 떨어진다
- 특정 함수를 export해서 쓰다가 해당 함수를 변경했을때 발생하는 사이드이펙트
- 개발자는 일반적으로 빠르게 작업할 수 있게 사용할 수 있는 코드를 모두 사용하게 된다.
- 쓰지말자 -> 말 안들음
- 결론적으로 잘 정의된 관계가 중요하다
- 경계가 없으면 코드는 엄청나게 확산된다
-
코드베이스를 복잡한 상태로 방치하면 안됨
- 복잡한 코드베이스는 개발자들이 코드 변경이 두려워하게 만든다
- 안정된 환경에서는 모두가 안정을 유지하려고하지만 불안정안 환경은 모두가 구조를 지키지 않는다
- 공유하는 문화가 사라지고 숨기는 문화가 생김
- 공유하려고 만든게 공유가 안됨
- 어디에 뭐가 있는지 모름
- 모듈 1~2개 공유하기 위해 패키지를 자꾸 새로 만듬
- 우린 고구마라는걸 만듬
- 의존성을 고구마 줄기처럼 만들기때문
- 구문분석을 해주는 패키지
- 패키지 개수가 줄어드는것 만으로도 전체 패키지 빌드 성능 38% 개선됨.
- 그러나 패키지는 많고 의존성은 여전히 복잡함
- 버저닝을 통해 복잡한 의존관계를 정리함
- 같은 버전에서만 각 패키지들이 상호착용 할 수 있도록 함.
- 의존 트리의 깊이를 줄여나가기 위한 노력이었음
- 버저닝 도입으로 3개의 깊이를 가짐
- 패키지-> 디자인시스템 -> 서비스
- 결과적으로 인지부하를 줄일 수 있었음.
-
공유 모듈을 정의하고 알맞게 다루자
- 심플한 기능을 가졌던 컴포넌트가 복잡해지게되면 뭔지 모를 공유모듈이 됨
- 뭔지 몰라서 안씀
- 공유 모듈이 될 수 있는 것
- 제품 전체에서 하나여야만 하는 코드
- 공용화가 안되면 생산성이 확 떨어지는 코드
- 이 외의 코드는 각 사용처에서 내재화시켜야함
- 공유 모듈 처리 의사결정 트리
- 나중에 누가 올려주겠지
- 코드 고립 상태를 만들기 위해서는 못들음
- 심플한 기능을 가졌던 컴포넌트가 복잡해지게되면 뭔지 모를 공유모듈이 됨
-
정기배포 그만두기 위해 작업 계획서 작성
- 코드 고립 작업 대상을 리스트업함
- 이 또한 의사결정 트리를 만듬
- 코드 고립 작업 대상을 리스트업함
-
앞으로 할일
- 스쿼드가 더욱 자유롭게 개발할 수 있도록 지원
- AI를 활용할 수 있도록 명세와 문서 작성
-
듣다보니 저렇게까지 복잡하게 해야하나 싶음.
- 일을 굉장히 어렵게 하는 느낌
- 그러나 어려운 일을 어떻게든 기술적으로 해결했다는 점이 멋있다
모노레포 도입 초기의 경험은 [[KnowledgeBase/Blog/모노레포를 실무에 적용한 뒤 한달. 후기]]에서 확인할 수 있다.
댓글
첫 번째 댓글을 남겨보세요.