Turbo Repo란 JS 생태계를 위한 고성능 Mono Repo 빌드 시스템이다.

Mono Repo란 여러 개의 프로젝트가 하나의 저장소(Repository)에서 관리하는 방식을 이야기 한다.

Mono Repo의 장점으로 코드의 재사용, 의존성 관리의 편리함, 통합 작업을 쉽게 할 수 있다.

단점으로는 레포지토리의 사이즈가 커짐에 따라 빌드 속도 저하, VCS에서 관리할 대상이 많아짐에 따라 성능 저하가 있을 수 있다.

Turbo Repo의 주요 특징은

  1. 효율적인 캐싱: 이전에 실행된 작업의 결과를 캐시하여, 중복된 작업 수행을 방지한다. 이는 빌드 시간을 대폭 줄여준다.
  2. 병렬 처리: 여러 작업을 동시에 실행하여 CPU 자원을 최대한 활용한다.
  3. 의존성 관리: 프로젝트 간의 의존성을 관리하고, 변경된 부분에 대해서만 빌드 혹은 테스트를 수행한다.
  4. 원격 캐싱: 캐시를 원격 서버에 저장하여, 다른 개발자나 CI/CD 시스템에서도 캐시를 공유할 수 있다.

이러한 장점에 입각하여 도입하게 된 이유는 Backend, Frontend 모두 Typescript 기반에서 eslint 등 공통으로 적용되는 모듈들이 있는데 이것을 두 벌로 작업하는 것이 아니라 한 번에 처리하기 위해 Mono Repo를 도입하였다.

또한, Backend, Frontend에서 공통적으로 사용하게 될 API 데이터 타입에 대한 의존성과 Frontend에서 사용하는 공통 컴포넌트에 대한 빌드 속도 증가를 위해 Turbo Repo의 캐싱 기능을 적용할 예정이다.

적용법

npm 에서는 package.json에 Mono repo 구성을 위해 workspace라는 기능을 제공한다.