https://www.youtube.com/watch?v=9RSNWt3AU-M
모노레포란?
하나의 레포지토리에서 독립적인 여러 프로젝트를 관리하는 방법

장점
- 빠른코드 수정
- utilA, utilB를 변경하더라도 App에 바로 반영(버전을 올리거나 의존성 없이)
- 멀티 레포의 경우 버전을 올리고 의존성을 다시 설치 해야만 사용을 할 수 있었음.
- 각 레포마다 사용했던 같은 코드들의 중복 제거
- 레포마다 매번 작성하던 util, component를 한곳에 관리하여 코드 중복을 줄이고 생산성을 높일 수 있음
- 수월한 코드 리팩토링
- 코드를 한번에 관리하기 때문에 대규모 리팩토링이 쉬워짐
- 코드 컨벤션 통일
- 멀티 레포에서는 각 레포마다 다른 컨벤션을 가졌다면 모노레포에서는 한곳에서 관리하여 통일 하기 수월함.
- eslint 패키지를 만들고 각 패키지에 주입하면 컨벤션 관리에 용이
- 통합 CI, test 관리
- 한꺼번에 ci를 돌릴 수 있고 test를 돌릴 수 있음
- 멀티 레포의 경우 수정 사항이 생기면 각 레포마다 테스트를 돌렸다면,
yarn test
명령어 한번으로 전체 테스트 가능
단점
- 의존성 관리 복잡
- 서로 의존성 연결이 쉽기 때문에 과도한 의존 관계가 생길 수 있음
- A패키지에 B패키지를 의존하게 되면, C패키지에 B패키지를 명시하지 않아도 B패키지를 사용할 수 있음. 이는 배포할 때 문제를 야기함.
- 방지 예시) A라는 패키지는 design-system패키지를 주입할 수 있지만, design-system는 A패키지를 주입할 수 없도록 사전에 약속을 하게 되었음.
- 무거운 프로젝트(CI 속도 저하)
- 하지만 멀티 레포에서는 하나의 변경 사항이 다른 렢의 어떤 영향을 주었을지 모르고, 전부 테스트를 돌렸어야 했음. 단점이라고 말하지만 장점이라고 볼수도 있음
- Code ownership 위배
- 작은 팀이 사용한다면 상관 없겠지만 많은 팀이 하나의 레포를 관리 한다면 코드 오너십을 위배하여 관리 체계가 혼동 될 수 있음.
왜 Turborepo?
모노레포에 사용되는 여러가지 도구들