Linear, AI 코딩이 만든 CI 병목 손봐 PR 대기 6분대에서 5분대로
- Linear가 PR 대기 시간을 6분 초과에서 5분 초과로 줄였고, 같은 기간 테스트 스위트는 거의 4배로 늘었으며 테스트당 러너 시간은 약 절반으로 감축함
- GitHub Actions에서 서드파티 러너로 이전해 작업이 평균 34% 빨라졌고(tsc 52% 감소), 네이티브 TypeScript 컴파일러 tsgo 전환으로 tsc 검사 주간 중앙값이 73% 줄어 병목이 타입체크에서 벗어남
- 타입 정보에 의존하던 커스텀 린트 규칙을 AST 정적 분석으로 다시 써서 ESLint에서 TypeScript를 떼어냈고, API 린트 68%, 전체 저장소 린트 55% 감소, 이후 Oxlint 전환도 쉬워짐
- 게이트 작업에서 fetch depth 제한으로 가장 느린 게이트가 94초에서 20초로, 워킹 트리가 필요 없는 작업은 27초에서 7초로 단축됨
- Linear는 CI를 인프라/툴링 교체, 게이트 작업 최적화, 반복 셋업 축소, 테스트 실행 효율화 네 갈래로 개선했고 코드베이스는 주로 TypeScript임
Hacker News opinions
Bazel 쓰면 셋업 비용만 감수하면 대규모 프로젝트도 웜 캐시로 빌드 10초대 나옴.
몇 년 전 5개 넘는 언어로 3개 OS 네이티브 바이너리 내보내는 복잡한 소프트웨어 Bazel 전환을 리드했는데 몇 년 걸렸음. 근데 언어 하나짜리 덜 복잡한 프로젝트는 에이전트 도움으로 2주 만에 끝냈음. Bazel 셋업 비용이 확 낮아진 걸 업계가 아직 모르는 것 같음.
nx랑 turbo 써보면 병목은 계산이 아니라 네트워크랑 디스크 IOPS임. 캐시 히트해도 원격에서 받아서 디스크에 쓰고 다시 읽는 게 전부 IO 바운드임. TS 생태계 대형 모노레포에서 1~2분이면 감사한 수준이고, 브라우저나 가상 DOM 필요한 테스트까지 10초는 무리임.
Bazel도 트레이드오프가 큼. 태스크마다 샌드박스 셋업하고, 병행해서 일반 툴링을 유지하게 되고, '웜 캐시'라는 단서가 과대평가됨. 실제 캐시 히트율이 얼마나 되나. 결국 어떤 규칙 쓰느냐에 따라 성능이 갈림.
vitest 로드밸런싱을 파일 단위 대신 테스트 소요 시간 기준으로 하면 좋을 텐데.
Linear 팀이 시도해봤는데 복잡도 대비 이득이 충분치 않았다고 함.
에이전트 코딩이 CI에 엄청난 부담이라 Bazel로 빌드 시간 개선하고 커스텀 러너도 만들고 있음. Linear 글에서 배울 게 많음.
로컬에서 테스트 돌리면 CI가 하는 일의 90%는 커버되는데, CI 박스가 로컬보다 2~10배 느려서 로컬 돌리는 게 나았음. 요즘도 이게 안 바뀐 게 신기함.
내 프로젝트는 아직 빌드가 10분 넘음. 45분에서 줄였는데, 실제 앱을 띄워 주요 시나리오를 녹화하고 스크린샷 찍고 AI로 QA하는 테스트라 무거움. 에이전트는 5분 정도를 원함.
솔직히 CI가 뭔지 모르겠음. 기술 업계 사람인데 글에서 처음 쓸 때 풀어서 써줘야 하는 거 아님?
CI는 Continuous Integration이고, PR 리뷰나 머지, 빌드 과정에서 도는 테스트 시스템이라고 보면 됨.
소프트웨어 엔지니어라면 CI 모르는 건 좀 걱정되는 수준임. 모르는 용어는 구글링하거나 AI에 물어보는 습관을 들이는 게 낫다.
Linear 같은 앱이 서브에이전트 오케스트레이션, 워크트리, 에이전트 간 메시징으로 하는 완전 에이전트 개발을 방해하는 느낌임. 사람 비중이 줄수록 더 그럴 듯.
그럼 에이전트가 뭘 왜 했는지 기록은 어떻게 보나. PR만으로 충분한가. Linear나 Jira가 결정 저장소로 여전히 쓸모 있고, 직접 만들면 결국 그 기능 일부를 다시 구현하게 됨.
난 Linear를 프롬프트 기법의 핵심으로 씀. 스펙을 Linear에 쓰고 거기 쌓인 이력을 에이전트 컨텍스트로 넘김. 'XYZ-124 보고 질문 있으면 물어봐' 식으로 시킴.
Linear가 오래전에 완성돼서 AI 코딩 느리게 해도 된다니 다행인데, 아쉽게도 다음 Jira가 되어가는 중임.
Jira화까지는 아닌 것 같고, 코드 생성이 싸져서 정성 들인 제품 설계를 잃어가는 느낌임. 여전히 좋은 제품이긴 함.
모든 소프트웨어는 새롭고 빠르고 단순해서 인기를 얻고, 자라서 결국 새 거인이 됨. 그게 반복임.