연사자 (flex - 이소영님)
예를 들어 하나의 Select 컴포넌트를 만들때 주로 이 두가지를 고민하게 된다.
1. SuperBigSelect
많은 prop을 관리하고 있음.
변경이 디자인 시스템의 책임이 늘어남.
복잡도 증가.
2. ManySelect
구현체 흩어지면서 파편화 이슈
연사자 (토스 - 오창영)
"모노레포란 잘 정의된 관계를 가진,
여러개의 독립적인 프로젝트들이 있는 하나의 레포지토리이다"
Nwrl - Nx
1-2. 모노레포를 왜 사용해야 했을까요
Project A와 비슷한 Project B를 만들때
1. 레포추가
2. ci/cd, lint, test, ts등의 설정을 해준다
3. Project A에서 쓰이던 코드를 재사용 하고싶을때 또 만든다.
-> 무조건 모노레포가 아닌 "잘 정의된 관계"를 가져야만 이로울 수 있다.
속도
관리
라이브러리 모노레포의 특징
토스에서 사용하는 모노레포 종류
1. Library Only Monorepo
커밋수 80+
배포 NPM
커밋당 영향범위 큼
2. Service Monorepo
커밋수 700+
배포 내부 인프라
커밋당 영향범위 작음
라이브러리 모노레포이기에 중요하게 생각해야하는 것들
기술적 요구사항
1. 의존성 관리
node_modules의 문제 -> 유령 의존성 -> yarn berry + pnp
peer dependency ? 패키지를 사용하는 곳에서 제공하는 dependency
2. 버전 관리
Semver (semantic versioning)
major - breaks API
minor - does not breaks API
patches - bug fixes