우리는 까다로운 레거시 저장소 하나 — 테스트가 없고, 상태가 뒤엉켜 있으며, 데이터베이스 계층이 세 겹의 추상화로 쌓인 14k 줄짜리 Express + React 앱 — 를 가져와 동일한 리팩터링 지시를 다섯 개의 서로 다른 AI 코딩 에이전트에게 건넸다. 그런 다음 결과를 diff로 비교했다.
고지: Build Lab은 Y Build가 발행한다. 이 실험은 코딩 에이전트 자체에 관한 것이며, 수치는 우리 것이고 방법론은 아래에 있다.
다섯 에이전트, 그리고 그들이 서로 다른 이유
시장은 세 가지 형태로 나뉘는데, 우리는 그 전부에서 골랐다:
- Claude Code — 터미널 우선 에이전트. 공개 SWE-bench Verified 리더보드 1위.
- OpenAI Codex (CLI) — 터미널 우선이며, 토큰 사용이 눈에 띄게 더 적다.
- Cursor — IDE 네이티브, 이제는 타일형 멀티 에이전트 모드를 갖췄다.
- Aider — 터미널, git 네이티브, 외과적으로 정밀한 diff.
- Windsurf — IDE 네이티브, 에이전트형 흐름.
지시 사항
다섯 모두에게 동일했다: “데이터 계층을 repository 인터페이스 뒤로 추출하고, 각 repository 메서드에 대한 테스트를 추가하되, 공개 API는 바꾸지 마라.” 그런 다음 우리는 측정했다: 이후 통과한 테스트, 변경된 줄 수, 공개 API가 실제로 유지되었는지, 소모된 토큰, 실제 경과 시간, 그리고 수작업으로 매긴 품질 점수.
무슨 일이 벌어졌나
| 에이전트 | 시간 | 테스트 통과 | 공개 API 유지 | 접근 방식 |
|---|---|---|---|---|
| Claude Code | 23 min | ✓ | ✓ | 체계적인 다중 파일 리팩터링, 품질 9.0/10 |
| Cursor | 47 min | ✓ | ✓ | 더 느리고 IDE 주도, 8.5/10 |
| Codex | 26 min | ✓ | ✓ | 가장 적은 토큰 (Claude Code 대비 약 3–4배 적음) |
| Aider | 19 min | 부분 통과 | ✓ | 외과적이고 가장 작은 diff — 메서드 두 개 누락 |
| Windsurf | 38 min | ✓ | ✗ | 계층 절반을 다시 작성; 시그니처 하나를 망가뜨림 |
진짜 이야기는 접근 방식의 편차였다. Aider는 열 줄짜리 외과적 변경만 하고 멈췄고, Windsurf는 앱의 절반을 다시 쓰면서 함수 시그니처 하나를 슬쩍 바꿔버렸다. Claude Code는 가장 많은 파일에 걸쳐 흐름을 놓치지 않고 계획을 유지했다 — 같은 작업에 대해 Codex보다 3–4배 높은 토큰 비용을 치르면서.
아무도 경고해주지 않는 병목
우리를 놀라게 한 지점은 이것이다: 에이전트를 하나 이상 돌리는 순간, 에이전트는 더 이상 병목이 아니게 된다. 그 주변의 모든 것이 일이 된다 — 어느 세션이 무엇을 하고 있는지, 누구의 diff가 준비됐는지, 어느 브랜치가 어느 것인지, 어제 이후로 무엇이 깨졌는지. Cursor의 타일형 멀티 에이전트 뷰가 존재하는 이유가 바로 순차적 검토가 확장되지 않기 때문이다. 에이전트 다섯을 돌린다고 우리가 5배 빨라지지는 않았다; 검토가 새로운 전업이 되었을 뿐이다.
방법론
같은 커밋의 같은 저장소, 같은 지시, 에이전트마다 새로운 컨텍스트, 기본 모델. 각각 두 번씩 돌리고 더 나은 실행 결과를 채택했다. 품질은 고정된 평가 기준(가독성, 테스트의 의미 충실성, diff 범위 절제)에 따라 수작업으로 매겼다. 전체 diff와 로그: github.com/ybuild/lab-04.
결론
“최고의 리팩터링 에이전트” 같은 건 없다 — 그 일에 맞는 기질이 있을 뿐이다. 간결하고 검토하기 쉬운 diff를 원하는가? Aider 또는 Codex. 일관성을 유지해야 하는 큰 다중 파일 리팩터링인가? Claude Code. 하지만 무엇을 고르든, 데모가 건너뛰는 부분에 예산을 잡아라: 에이전트가 한 일을 검토하는 것이 이제 진짜 일이다.