Turborepo 팀이 AI 에이전트와 Vercel Sandbox 기반 벤치마킹을 결합해 8일 만에 Task Graph 계산 속도를 최대 91% 향상시킨 과정을 다룬다. 1,000개 패키지 모노레포에서 "Time to First Task"가 8.1초에서 0.716초로 줄었다. 병렬화, 힙 할당 제거, syscall 축소가 핵심 전략이었다.
핵심 포인트- 1,000개 패키지 모노레포: 8.1s → 0.716s (91% 향상), 132 패키지: 1.9s → 0.361s (81% 향상)
- 병렬화 4건: git index 빌드, glob 매칭, lockfile 파싱, package.json 로딩을 동시 실행
- 스택 기반 OidHash 구조체로 힙 할당 10,000+ 제거 → new_from_gix_index 셀프타임 15% 감소
- syscall 캐시 조회를 3에서 1로 축소 → 962회 연산에서 200.5ms → 129.6ms (35% 감소)
- Markdown 프로파일 포맷 신설 → 에이전트가 핫 함수를 grep으로 분석 가능, 출력 품질 극적 향상
상세 정리- 문제: Task Graph 생성 단계가 1,000개 패키지 모노레포에서 약 10초 소요, 대형 레포에서 개발 흐름을 방해했다.
- Phase 1 에이전트 탐색: Rust 코드베이스 다른 영역에 8개 에이전트를 병렬 배치. PR #11872(HashMap 클론 → 참조 기반 해싱, ~25%), PR #11874(twox-hash → xxhash-rust, ~6%), PR #11878(Floyd-Warshall → DFS 교체)가 유효했다.
- 에이전트 한계: 실제 코드베이스 벤치마크 대신 마이크로벤치마크 집중, 리그레션 테스트 미생성, 프로파일링 도구 미활용이 반복됐다.
- Phase 2 인간 주도 루프: 프로파일링 → 에이전트 제안 검토 → 구현 → 엔드투엔드 벤치마킹 → PR 순서. 4일간 20+ PR 생성.
- Markdown 프로파일 포맷 신설: Chrome Trace JSON 대신 turborepo-profile-md 크레이트로 셀프타임 기준 핫 함수, total-time 콜트리, caller/callee를 단일행 포맷으로 출력. Bun의 --cpu-prof-md에서 착안.
- 병렬화(4 PRs): git index, glob, lockfile, package.json 로딩의 IO 대기를 동시 실행으로 제거.
- OidHash 할당 제거: 40바이트 SHA-1 hex를 heap String 대신 스택 [u8; 40]으로 저장 — Clone이 alloc+memcpy 대신 40바이트 memcpy가 됨. 1,000개 레포 기준 10,000+ 힙 할당 제거, 셀프타임 15% 감소.
- syscall 축소 캐시 조회: exists() 2회 + open() 1회 = 3 syscall → open() 시도 후 NotFound 에러 처리 = 1 syscall. 962회 연산에서 200.5ms → 129.6ms.
- git syscall 축소: 패키지별 git subprocess를 단일 repository index로 통합 → libgit2 → gix-index 순차 교체.
- Vercel Sandbox 벤치마킹: 에피메럴 Linux 컨테이너에서 hyperfine 15회(워밍업 2회). Zig 크로스 컴파일 Linux 바이너리, 베이스 스냅샷에서 인스턴스 복제해 동일 조건 보장 — 노트북 노이즈 제거.
- 에이전트 피드백 루프 발견: 한 곳의 비효율 패턴 수정 후 에이전트가 유사 패턴에 자발적으로 적용, 명시적 지시 없이 개선됨.
왜 읽나Rust로 개발 도구를 최적화하거나 AI 에이전트와 인간 협업 워크플로우를 설계하는 엔지니어에게 프로파일링 → 병렬화 → 할당 제거 → syscall 축소의 실전 방법론과 에이전트 활용 패턴 레퍼런스.