에이전트 엔지니어링에서 리팩토링의 경제적 이점
리팩토링은 AI 토큰 비용을 직접 감소시킵니다
에이전트가 생성한 코드베이스를 리팩토링하면 새로운 기능을 구현하기 위해 AI 에이전트가 처리해야 하는 입력 토큰 수를 줄여 측정 가능한 경제적 이점을 제공합니다. 통제된 실험에서 17,155줄짜리 Rust 파일 하나를 모듈식 구조로 리팩토링한 결과, 대표적인 변경에 필요한 입력 토큰이 159,564에서 27,360으로 감소했으며, 이는 토큰 소비량을 83% 절감한 것입니다.
이 절감은 전체 코드 양이 감소했기 때문이 아니라—데이터 접근 계층의 전체 라인 수는 거의 일정하게 유지되었지만—모듈화 덕분에 에이전트가 필요한 최소 파일 집합만 식별하고 읽을 수 있게 되었기 때문입니다. 코드가 하나의 거대한 파일에 통합되면 에이전트는 컨텍스트를 유지하기 위해 전체 파일을 모두 읽어야 하므로 비용이 증가하고 실행 속도가 느려집니다.
리팩토링 실험
코드 구조가 토큰 사용량에 미치는 영향을 정량화하기 위해 약 150,000줄(주로 Rust) 규모의 애플리케이션을 사용했습니다. 이 애플리케이션은 인간의 코드 리뷰 없이 전적으로 에이전트(Claude Code와 Cursor)만으로 작성되었습니다. 시간이 지나면서 데이터 접근 계층은 17,000줄이 넘는 단일 파일로 성장했으며, 중복이 많고 내부 추상화가 부족한 형태가 되었습니다.
방법론
실험에서는 각 테스트마다 "새로운" 에이전트를 사용해 이전 단계에서 학습된 내용이 결과에 영향을 주지 않도록 했습니다. 과정은 다음 단계로 진행되었습니다:
- 베이스라인 설정: 대표적인 변경(새 트레이트와 구현 추가)을 서브 에이전트에 프롬프트하여 초기 토큰 비용을 기록합니다.
- 반복 리팩토링: 엄격한 리팩토링 규칙(마틴 파울러의 Refactoring 2판 참고)을 기반으로 15단계의 리팩토링을 적용합니다.
- 측정: 각 리팩토링 단계 후, 동일한 대표 변경을 새로운 서브 에이전트에 프롬프트하여 입력 토큰, 출력 토큰, 실행 시간 변화를 측정합니다.
정량적 결과
| 지표 | 베이스라인 | 15단계 후 | 변화 |
|---|---|---|---|
| 데이터 접근 계층 LoC | 17,155 | 16,608 | -2.9% |
| 가장 큰 파일 LoC | 17,155 | 3,695 | -78.4% |
| 변경당 입력 토큰 | 159,564 | 27,360 | -83% |
| 변경당 출력 토큰 | 1,705 | 2,113 | +23.9% |
| 변경당 시간 (초) | 342 | 454 | +32.7% |
가장 큰 파일 크기가 감소하면서 입력 토큰이 "절벽처럼" 떨어졌지만, 출력 토큰은 비교적 안정적이었습니다. 이는 리팩토링이 AI가 코드를 읽는 것을 쉽게 만들지만, 결과 코드를 짧게 만드는 것은 아니라는 점을 시사합니다.
주요 기술적 통찰
모듈화 vs. 단순 분할
큰 파일을 무작위로 작은 파일로 나누는 것만으로는 이러한 절감을 실현할 수 없습니다. 실험 결과 가장 큰 토큰 감소는 중복을 추출하고 반복되는 핵심을 구축하는 논리적 리팩토링이 이루어진 후에만 나타났습니다. 이러한 구조는 에이전트의 검색 메커니즘이 관련 파일을 성공적으로 격리하도록 하여, 필요한 로직을 찾기 위해 여러 작은 파일을 읽는 상황을 방지합니다.
리팩토링에서의 "에이전트 격차"
대량의 코드를 생성할 수 있음에도 불구하고, 실험은 현재 AI 에이전트(특히 Claude)가 리팩토링 자체를 수행하는 데 어려움을 겪는다는 점을 밝혀냈습니다:
- 주도성 부족: 에이전트는 코드베이스를 개선하기 위한 리팩토링을 스스로 제안하거나 적용하지 않았으며, 명시적인 인간 지시와 상세한 계획이 필요했습니다.
- 실행 오류: 코드 이동, import 업데이트와 같은 기계적인 리팩토링 과정은 에이전트가 처리할 때 신뢰성이 떨어졌고, 정확성을 보장하기 위해
grep과sed를 활용한 외부 Python 스크립트를 사용해야 했습니다. - 지침 필요: 깊은 소프트웨어 엔지니어링 지식을 가진 인간이 프롬프트와 리팩토링 계획을 설계해야 원하는 아키텍처 결과를 얻을 수 있었습니다.
커뮤니티 관점 종합
엔지니어들 사이에서 이 결과에 대한 논의는 AI와 소프트웨어 아키텍처의 교차점에 대한 몇 가지 중요한 점을 강조합니다:
"지루한" 베스트 프랙티스의 귀환
많은 관찰자들은 "흥미로운" 새로운 발견—리팩토링이 AI에 도움이 된다는—이 근본적인 소프트웨어 엔지니어링 원칙을 재발견한 것에 불과하다고 지적했습니다. 한 기여자는 다음과 같이 말했습니다:
"지루함: 리팩토링은 개발자를 장기적으로 더 생산적으로 만든다. 흥미로움: 리팩토링은 AI를 장기적으로 더 생산적으로 만든다."
추론 및 정확성에 미치는 영향
토큰 비용 외에도, 일부는 압축된 컨텍스트가 AI의 추론 능력을 향상시킨다고 주장합니다. 더 나은 추상화를 통해 코드의 "엔트로피"를 낮추면 AI가 특정 테스트 케이스를 통과하는 수준을 넘어, 일반화된 올바른 소프트웨어를 생성할 확률이 높아질 수 있습니다.
인간‑인‑루프 필요성
에이전트가 코드를 작성할 수는 있지만, 고수준 아키텍처 비전은 여전히 인간의 책임이라는 의견이 대다수입니다. 여러 스토어 타입에 걸쳐 특정 async 트레이트와 구현을 프롬프트하는 능력은 아직 에이전트가 독립적으로 종합할 수 없는 도메인 전문성을 요구합니다. 일부는 우리가 "바이브 코딩" 시대에 진입하고 있으며, 인간은 설계자, AI는 고속 구현자로 역할이 분리된다고 제안합니다.