코드베이스 규모가 커질수록 개발 속도가 느려지는 문제를 해결하는 아키텍처 패턴과 도구를 다룬다. 모노레포, 피처 플래그, 증분 빌드, 스큐 보호 등 대규모 팀이 독립적으로 빠르게 개발할 수 있는 방법을 구체적인 도구와 수치로 제시한다.
핵심 포인트- 100개 이상의 분리된 저장소 대신 모노레포로 통합하면 온보딩, 코드 재사용, 크로스-저장소 변경이 간소화된다.
- Turborepo는 Google, Meta의 빌드 시스템에서 영감을 받아 작업 결과를 캐싱하고 수정된 코드만 재빌드해 CI 시간을 단축한다.
- 피처 플래그로 코드 배포와 기능 출시를 분리하면 잦은 릴리즈와 낮은 위험을 동시에 달성할 수 있다.
- Edge Config에 플래그 값을 저장하면 읽기 지연이 5ms(99%ile 15ms 미만)로 성능 영향 없이 동적 제어가 가능하다.
- 스큐 보호(Skew Protection)로 배포 중 클라이언트-서버 버전 불일치로 인한 데이터 구조 오류를 방지한다.
상세 정리- 모노레포 필요성: 저장소 수가 늘수록 온보딩 비용, 코드 탐색 어려움, 크로스-저장소 업데이트 오버헤드가 급증한다. 단일 저장소로 통합하면 이 문제를 한 번에 해결한다.
- Turborepo 캐싱 원리: 작업 입력(파일 내용, 환경변수)을 핑거프린팅해 결과를 캐싱한다. 변경이 없으면 이전 캐시를 재사용해 빌드를 건너뛴다.
- 원격 캐시 공유: 팀원들이 같은 캐시를 공유해 CI와 로컬 개발 사이의 캐시도 공유된다. 머신 간 불일치 문제를 줄인다.
- 피처 플래그 분리 배포: 코드를 배포하되 기능은 숨겨놓고, 플래그를 켜서 점진적으로 출시한다. 문제가 생기면 재배포 없이 플래그만 끄면 된다.
- Edge Config 지연 시간: 플래그 조회가 5ms, 99번째 백분위수 기준 15ms 미만이라 서버리스 함수 실행 경로에 있어도 성능 영향이 미미하다.
- 증분 기술 도입: 대규모 일괄 마이그레이션 대신 컴포저블 아키텍처로 독립 부분을 순차적으로 교체해 위험을 분산한다.
- 스큐 보호: 잦은 배포 시 클라이언트가 구버전 코드를 실행하면서 서버에 신버전 데이터 구조를 요청할 때 발생하는 불일치를 자동으로 처리한다.
- 독립 팀 작업: 모노레포 안에서도 팀별로 독립된 UI 컴포넌트를 작업하고, 공유 설정과 툴링을 재사용하는 구조를 권장한다.
왜 읽나- 저장소 관리, 빌드 속도, 다중 팀 협업 문제를 동시에 해결하고 싶은 테크리드나 플랫폼 엔지니어에게 모노레포 전환과 Turborepo 도입의 실용적 근거로 유용하다.