영상을 보고 작성한 글입니다.
▣ 모노레포란?
하나의 레포토리에서 독립적인 여러 프로젝트를 관리하는 방법이다.

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