3. • 최초의 모놀리식 방식은 소스 코드를 모듈화하지 않고 하나의 Repository
에서 모두 관리
• 모든 코드가 단일 버전으로 서로 의존하기 때문에 코드 재사용에 용이하고
배포 과정도 단순하다는 장점
• 관심사 분리가 어렵고, 기능 추가나 삭제가 Repository 전체에 영향을 줄 수
있다는 단점
4. • Repository 별 Owner를 지정 가
능,
• 버전 관리를 통해 관심 분리 기능
변경이 다른 Repository에 영향을
주지 않음
• 각 Package가 Repository로 분리
된다면 하나의 Repository는 하나
의 CI를 구성 할 수 있기 때문에
CI의 build 속도가 빨라짐
• 각 모듈이 서로 독립된 영역에 존
재하기 때문에 코드 단계에서의 재
사용이 어려워졌고 빌드와 배포 과
정이 복잡해짐
• Repository가 분리되어있기 때문에
공통된 코드가 중복될 가능성이 커
짐
• 프로젝트 및 Package의 규모가 커
짐에 따라 의존도가 복잡해지고 버
전 차이에 따라 종속성이 달라지고
충돌을 야기할 수 있음
5. • Repository가 하나이기 때문에 모든
프로젝트의 코드간의 관계와 의존성
을 확인하기 쉬움
• 모든 커밋 히스토리가 한 Repository
에 남기 때문에 추적, 개발 방향을 이
해하는 게 쉬워짐
• 여러 곳에서 중복으로 사용하는 코드
를 공유, 재사용이 쉬움
• 배포와 빌드, 테스트를 한 번에 처리할
수 있음
• 하나의 Repository에서 관리가
되기 때문에 규모가 커짐
• MultiRepo와 반대로 Repository
규모가 크기 때문에 CI build 속
도가 느림
• Package간 의존성 관리가 쉽다
는 장점이 있지만, 과도한 의존
관계가 나타날 수 있음
6. Vercel이 인수한 Turborepo는 Javascript와 Typescript
코드 베이스의 모노레포를 위한 고성능 빌드 시스템
(AWS, Miro, PayPal, Discord, LINE+ 등 여러 프로젝트에서 사용)
7. • 작업 진행을 캐싱해 이미 계산된
내용은 건너 뛰는 것을 의미
• 빌드는 딱 한 번만 하는 것을 목표
• 타임스탬프가 아닌 콘텐츠를 인
식하는 방식으로 해싱을 지원
• 모든 파일을 다시 빌드하는 것이
아니라 변경된 파일만 빌드
8. 설치 명령어 : Npx create-turbo@latest .
설치 시 docs, web 다른 프로젝트와
Typescript, eslint, next 등 기본 설정 파일이
생성
9. TurboRepo를 적용 할 폴더를
workspace에 지정
각 프로젝트의 package.json에
private: true를 설정 해야
TurboRepo가 폴더간 링크를 연결
10. dependsOn
• 종속성을 먼저 빌드 한 후 스크립트 실
행
• 종속성을 여러 개 지정할 경우 순서에
맞춰서 빌드 진행
cache
• 핫 로딩이 필요할 경우 캐시를 비활
성화 할 수 있음
outputs
• 캐시를 활성화 할 폴더를 지정
11. • 첫 빌드 시 docs, web 프로젝트가 같이 빌드
• 캐싱 된 이력이 없어 캐시를 진행
• 14.95s의 빌드 속도를 가짐
12. • 프로젝트가 실제로 캐시에 저장 되어 있음
• TurboRepo가 다시 빌드 할 필요가 있나 없나
판단
• 0.33s의 빌드 속도를 가짐
13. • Docs 프로젝트 수정 후 빌드 진행
• TurboRepo가 다시 빌드할 필요가 있나 없나 판단
• Docs 프로젝트만 새롭게 캐시 저장
• 6.92s의 빌드 속도를 가짐
14. Yarn build —force
• 캐시 된 이력을 무시하고 전부 다시
캐시 할 때 사용
Yarn build —scope={docs}
• 원하는 프로젝트만 build 할 수 있음
• MultiRepo, MonoRepo 환경 구축 가
능