- 사람이 코드를 읽고 쓰지 않는 무인(lights-off) 소프트웨어 팩토리는 생성 속도를 높이지만, 장기 유지보수성을 판단할 인간까지 제거해 복잡한 프로덕션 코드베이스에서 작동하기 어려움
- 코딩 모델의 강화학습은 테스트 통과처럼 빠르고 명확한 보상을 최적화하며, 수개월 뒤 드러나는 나쁜 설계 비용에는 벌점을 주지 못함
- SWE-bench 계열은 버그 수정과 기존 테스트 보존을 평가하지만, 무분별한 try/catch·타입 캐스트·shotgun surgery처럼 코드 품질을 서서히 악화시키는 변경은 걸러내지 못함
- 현재는 인간이 코드 리뷰를 맡고 제품 요구사항·시스템 아키텍처·프로그램 설계·수직 슬라이스를 구현 전에 검토해야 재작업과 대규모 AI 생성 코드 리뷰를 줄일 수 있음
- 모델의 제약을 인정하면 무리한 10~100배 자동화 대신 인간 수준에 가까운 품질을 유지하면서 2~3배 빠르게 개발할 수 있으며, 핵심 판단과 코드 읽기는 아직 외주화할 수 없음
루프 중심 소프트웨어 팩토리의 약속과 현실
- AI 코딩의 프로덕션 도입 경쟁에서 하네스와 에이전트 루프를 늘리면 된다는 인식이 확산됨
- StrongDM의 무인 소프트웨어 팩토리는 인간이 코드를 읽거나 쓰지 않는 방식을 내세움
- OpenAI의 Symphony도 하네스 엔지니어링을 기반으로 한 소프트웨어 팩토리 사례임
- 이 접근은 사람이 병목이고 모델은 충분히 좋으며, 코드 생성 비용이 사실상 낮으므로 더 많이 출시하면 된다는 전제를 둠
- 목표는 10~100배 속도, 높은 품질, 인간 코드 리뷰 제거를 동시에 달성하는 것임
- 린터를 더 구성하고 PR 리뷰 봇에 적대적 검토를 지시하면 소프트웨어를 스스로 안전하게 만들 수 있다고 봄
- 실제 현장에서는 코딩 에이전트의 실수로 장애가 발생하고, 코드베이스가 빠르게 무너진다는 사례가 나타남
- Faros AI 보고서는 AI 코딩 도구 도입 이후 다음 변화를 관찰함
- 리뷰 댓글 수와 길이는 늘었지만, 리뷰 없이 병합되는 PR도 많아짐
- 인시던트와 개발자당 버그가 증가함
- 다만 검증된 인과관계가 아니라 상관관계 신호에 가까움
- StrongDM의 결과를 보여주는 확정적 데이터는 찾기 어려우며, 2월부터 6월 사이 공개된 업데이트도 드문 편임
복잡한 코드베이스는 바이브 코딩과 다른 문제
- 소수만 사용하는 사이드 프로젝트와 10년 된 엔터프라이즈 시스템을 유지하는 팀은 공유하는 제약이 거의 없음
- 바이브 코딩 자체가 아니라 복잡한 코드베이스의 어려운 문제와 프로덕션 유지보수가 논의 대상임
- 과거 brownfield는 오래된 Java 시스템 등을 뜻했지만, 에이전트가 만든 코드베이스도 빠른 개발 속도 때문에 약 3~6개월 뒤부터 변경하기 어려워질 수 있음
- 결과가 나쁘면 토큰이나 기술이 부족한 탓이라는 조언이 많지만, 핵심 문제는 하네스보다 모델 훈련 방식에 있음
소프트웨어 팩토리의 진화
-
1968년부터 AI 도입 이전까지
- ‘소프트웨어 팩토리’라는 용어는 ‘소프트웨어 엔지니어링’이라는 표현이 등장한 1968년 NATO 회의까지 거슬러 올라감
- 2022년 무렵의 전형적인 팩토리는 다음 순환 구조를 가짐
- 사람이 무엇을 만들지 결정하고 Linear나 Jira 같은 추적기에 등록함
- 담당자가 구현과 테스트를 수행함
- 자동 검사와 인간 코드 리뷰를 거쳐 문제가 있으면 구현 단계로 돌아감
- 프로덕션 배포 후 모니터링하며 장애와 사용자 피드백을 다시 추적기에 넣음
- 구현과 리뷰에 각각 수시간 또는 수일이 걸리므로 팀은 계획·아키텍처 제안·스프린트 계획을 앞에 배치해 합의를 먼저 만듦
- 구현 전 합의는 재작업을 줄이며, 결정된 방향에 가까운 완성도 높은 PR은 모든 줄을 읽더라도 빠르게 검토할 수 있음
-
에이전트형 팩토리
- Ramp, Stripe, WorkOS, Brex 등은 에이전트 팩토리가 코드의 약 75% 를 출하한다고 소개함
- 기존 팩토리에서 사람이 구현하던 단계를 에이전트로 바꾸고 오케스트레이션·하네스·샌드박스·모델·컴퓨터 사용을 결합함
- 구현 시간은 수시간·수일에서 수분·수시간으로 줄지만, 인간의 코드 읽기와 테스트는 그대로여서 리뷰가 병목이 됨
- 이 병목을 줄이기 위해 여러 루프를 추가함
- 스타일·버그·보안을 검사하는 에이전트 코드 리뷰
- 브라우저와 컴퓨터 사용으로 외부 동작을 확인하는 회귀 테스트
- 장애를 자동으로 PR에 연결해 담당자가 수정 후보를 받도록 하는 흐름
- 사용자 피드백을 작업 큐로 직접 연결하는 흐름
- 결국 운영 문제는 작업 큐에 얼마나 많이 넣을 수 있는지, 결과를 얼마나 빨리 검토하고 테스트할 수 있는지로 좁혀짐
-
무인 팩토리
- Dan Shapiro가 명명한 무인 팩토리는 인간이 모든 변경을 읽는 단계를 제거함
- 코드 리뷰 대신 다음 영역에 투자함
- 에이전트의 자체 테스트
- 샌드박스와 오케스트레이션
- 자동 리뷰와 모니터링
- 점진적 출시와 사용자 피드백 신호 수집
- 사람의 판단을 제거하면 에이전트에 얼마나 많은 작업을 요청할 수 있는지만 남지만, 이 방식은 복잡한 프로덕션 코드베이스에서 작동하지 않음
직접 적용한 무인 방식의 실패
- 2025년 7월부터 명세와 티켓만 읽고 소·중규모 작업을 백그라운드 에이전트에 맡기는 완전한 무인 방식을 적용함
- 몇 달이 지나자 고급 프롬프트와 워크플로로도 풀지 못하는 복잡한 문제가 발생함
- 필요한 맥락을 수집해 모델에 제공함
- 에이전트가 약 10가지 방식으로 문제 재현을 시도함
- 결국 인간이 3개월 동안 읽지 않은 코드베이스에 직접 들어가 원인을 찾아야 했음
- 그동안 사이트가 중단되고 사용자는 불편을 겪었으며, 인간은 누적된 저품질 코드를 읽어야 했음
- 첫 실패에서는 속도를 위해 위험을 감수할 만하다고 판단했지만, 약 세 번째 문제가 발생한 11월에는 처음부터 다시 작성하는 편이 쉬웠음
- 공동 창업자가 VS Code에서 2주 동안 패턴을 직접 다시 구현함
모델이 코드베이스 품질을 떨어뜨리는 이유
- 현재 모델은 상당한 인간의 방향 조정 없이 코드베이스 품질을 장기간 유지하고 개선하지 못함
- 여기서 유지보수성이란 한 부분을 바꾸면 다른 부분이 깨지고, 같은 변경을 여러 위치에 적용해야 하는 shotgun surgery 상태를 피하는 능력임
- 모델은 일회성 문제 해결이나 새 마케팅 사이트 생성에서는 크게 발전했지만, 시간이 흐르며 코드 품질을 개선하는 능력은 뚜렷하게 나아졌다고 보기 어려움
- 유지보수 능력을 측정하는 좋은 벤치마크가 없어 이 차이를 입증하거나 반박하기도 어려움
- GPT-5.5 xhigh 같은 모델이 훌륭한 리팩터링을 수행하더라도, 인간이 코드베이스를 이해하고 필요한 작업을 구체적으로 지시해야 한다면 무인 팩토리의 문제는 해결되지 않음
Claude Code와 하네스 내부 강화학습
- Claude Code 이전에도 aider, cline, codebuff 같은 CLI 에이전트가 읽기·쓰기·편집·검색·셸 도구와 맥락 엔지니어링을 제공했음
- 기존 에이전트는 같은 편집을 반복해서 실패하는 등 도구 사용 안정성이 부족할 때가 있었음
- SWE-Agent 논문은 ReadFile 결과에 줄 번호를 넣거나 Edit를 찾기/바꾸기에서 줄 범위 편집으로 바꾸는 작은 도구 설계 차이도 성능에 영향을 준다고 분석함
- Claude Code가 빠르게 성장한 핵심 이유로 Anthropic이 실제 출시할 하네스 안에서 모델을 강화학습한 점을 꼽음
- 모델이 정확한 도구 집합을 에이전트 루프 안에서 호출하도록 가중치를 조정함
- 외부 개발자가 도구 정의와 평가를 모델 선호에 맞추는 것과 달리, 모델 소유자는 모델 자체를 도구에 맞게 변경할 수 있음
- 하네스와 모델 가중치를 모두 가진 팀은 하네스만 만들고 가중치를 조정할 수 없는 팀보다 유리함
코딩 에이전트 강화학습의 보상 한계
- 코딩 모델 강화학습은 대체로 다음 절차를 수백만 번 반복함
- 테스트 수정 같은 문제를 풀도록 에이전트 실행 추적을 생성함
- 검증기로 실행 추적을 평가함
- 좋은 실행 추적의 확률을 높이고 나쁜 실행 추적의 확률을 낮추도록 모델 가중치를 갱신함
- 문제는 평가 점수가 지나치게 일차원적일 수 있다는 점임
-
SWE-bench Multilingual 사례
- SWE-bench Multilingual은 Redis, jq, Django 같은 오픈소스 저장소에서 가져온 약 15분 규모의 작업을 사용함
- 보상은 0 또는 1이며 두 조건을 검사함
FAIL_TO_PASS: 요청된 문제를 고쳤는지PASS_TO_PASS: 기존 동작을 깨뜨리지 않았는지
fastlane__fastlane-19304작업은 선택적include,exclude매개변수가 없을 때 nil에.empty?를 호출해 실패하는 버그임- 실제 인간 수정은 nil을 빈 배열로 기본 설정하는 두 줄 변경이었음
- 모델은 수정 직전 기본 커밋과 버그 보고서만 받고, 정답 패치와 채점용 테스트 패치는 보지 못함
- 평가는 다음 순서로 진행됨
- 모델이 만든 패치를 보존함
- 모델이 테스트 파일에 가한 변경은 제거함
- 벤치마크의 비공개 테스트 패치를 적용함
- 기존 테스트와 새 테스트를 함께 실행함
- 테스트 변경을 버리는 이유는 모델이 실패 테스트를 주석 처리하거나 무의미한 mock을 넣어 통과시키는 경우가 있기 때문임
- 벤치마크와 강화학습 검증기는 동일하지 않고 서로 분리돼야 하지만, 둘 다 코딩 실행 추적의 품질을 판단하는 구조적 한계를 보여줌
-
설계 악화에는 벌점이 없음
- 테스트만 통과하면 해법에 도달한 과정과 구조적 품질은 점수에 반영되지 않음
- 모든 곳을 try/catch로 감싸거나 타입 시스템의 이점을 무너뜨리는 느슨한 타입 캐스트도 정답이 될 수 있음
- 유지보수성 훼손은 기존 테스트와 신규 테스트가 통과하는 한 벌점을 받지 않음
테스트 통과보다 어려운 품질 검증
- 테스트는 수초 안에 명확한 성공·실패를 제공하므로 강화학습을 수백만 회 반복할 수 있음
- 나쁜 아키텍처의 비용은 수주·수개월·수년 뒤 작은 변경을 여러 위치에 적용해야 할 때 드러남
- 현재 벤치마크는 이런 장기 설계 비용을 평가하지 못함
- 강화학습과 벤치마크가 같은 것은 아니지만, 유지보수성이 강화학습에서 해결됐다면 벤치마크 설계에도 그 능력이 나타날 가능성이 있음
- 따라서 기존 벤치마크 점수 향상을 모델이 코드베이스를 더럽히지 않게 됐다는 근거로 볼 수 없음
유지보수성을 평가하려는 새 시도
- 모델 품질의 최전선은 개선되고 있지만, 기술적 규율보다 기대와 홍보가 앞서고 있음
- 유지보수성에 더 가까운 평가를 시도하는 사례는 다음과 같음
- SWE-Marathon: Excel의 모든 기능 복제처럼 약 400시간 규모의 작업과 단일 성공·실패가 아닌 복합 보상 채널을 사용함
- DeepSWE: 현실에서 실제 구현되지 않은 대규모 오픈소스 작업을 사용해 훈련 데이터 오염을 줄이지만, 품질 문제 자체는 해결하지 못함
- Frontier Code: 여러 PR에 걸친 작업을 평가하고, 패치 전 코드에서도 실패하지 않는 테스트를 작성하면 벌점을 줌
- 변이 테스트와 유사한 방식으로 테스트의 유효성을 결정론적으로 검사함
- 코드 품질 규칙에 따라 diff를 검사하는 판정 모델도 실행함
- 판정 모델이 품질을 안정적으로 구분할 수 있다면 처음부터 좋은 코드를 생성할 수도 있었을 것이라는 한계가 있음
- 강화학습에는 빠르고 신뢰할 수 있는 오라클이 필요하지만, 유지보수성에는 그런 오라클이 없음
- 리뷰 에이전트와 추가 토큰은 명백한 실수를 잡아 최저 품질을 높일 수 있지만, 강화학습으로 모델에 가르친 수준을 넘어 최고 품질을 끌어올리지는 못함
- SWE-Marathon·DeepSWE·Frontier Code는 성공·실패 판정을 넘어 유지보수성을 평가하려는 초기 시도이지만, 아직 코드베이스 전체를 맡길 수준은 아님
인간을 다시 루프에 넣는 4단계
- 현재 신뢰할 수 있는 품질 판정자는 인간이므로 코드 리뷰를 복원해야 함
- AI 이전부터 사용한 선행 계획을 적용해 긴 리뷰와 재작업 가능성을 줄임
- AI의 레버리지는 제품 요구사항, 시스템 아키텍처, 프로그램 설계, 수직 슬라이스의 네 단계에서 활용함
-
1. 제품 검토
- 짧은 문장이나 긴 음성 메모를 반구조화된 문서로 바꿔 무엇을 왜 만드는지 고정함
- 먼저 사용자의 언어로 해결할 문제를 정의하고, 출시 후 성공 여부를 판단할 기준을 정함
- 워크플로 수행 시간 단축
- 온보딩 이정표 조기 달성
- 오류율이나 지연 시간 개선
- 특정 지원 티켓 감소
- 기술 세부사항보다 사용자 경험에 집중하고, 기술 결정이 제품 결정을 막으면 현재 문서를 저장한 뒤 아키텍처 검토나 타당성 프로토타입으로 이동함
- 화면 동작은 긴 설명보다 거친 HTML 모형으로 확인하는 편이 합의에 효과적임
- 문구 수정, 일회성 스크립트, 재현 방법이 명확한 버그에는 이 절차를 적용하지 않고 에이전트에 바로 맡김
- 에이전트가 의도를 오해했을 때 비용이 큰 변경만 제품 검토 대상으로 삼음
- PR 검토자가 제품·기술 명세도 미리 검토하게 하며, 비동기 문서 댓글이나 GitHub·Notion 등을 사용할 수 있음
-
2. 시스템 아키텍처
- 서비스·엔드포인트·스키마·큐·저장소 사이의 통신 방식을 합의하되 프로그램 내부 구현까지 내려가지는 않음
- 인간과 에이전트의 소통 대역폭을 높이기 위해 다음 표현을 사용함
- UI, API, 서비스, 저장소 사이의 시퀀스 다이어그램
- 요청·응답을 보여주는 API 계약
- 새 테이블과 쿼리 형태를 나타내는 데이터 모델
- Mermaid는 유용하지만 과도하게 사용하면 실제 합의가 이뤄졌다는 잘못된 확신을 줄 수 있음
- 아키텍처 검토는 모델의 나쁜 습관을 조기에 막는 데 효과적이지만, 고품질 코드를 보장하기에는 부족함
-
3. 프로그램 설계
- 구현 전에 아키텍처보다 한 단계 아래인 코드의 형태를 결정함
- 타입
- 메서드 시그니처
- 프로그램 배치
- 호출 스택
- 복잡한 Mermaid보다 가벼운 의사코드 시각화가 읽기 쉬움
- 오케스트레이션이나 제어 흐름 변경에는 호출 스택 트리를 사용하고, 바뀌는 부분이 중요하면 diff 문법을 적용함
- 파일 트리 diff로 새 파일과 수정 파일의 위치와 역할을 확인함
- 핵심 함수의 타입과 메서드 시그니처를 미리 정해 에이전트가 내부 설계를 잘못 선택할 가능성을 줄임
- 모델이 초안을 만들고 인간이 조정할 수 있으며, 코드 리뷰 중 암묵적으로 내릴 결정을 더 저렴한 시점으로 앞당기는 작업임
- 구현 전에 아키텍처보다 한 단계 아래인 코드의 형태를 결정함
-
4. 수직 슬라이스
- 모델은 데이터베이스 마이그레이션→서비스 계층→API→프런트엔드 순서로 쌓는 수평 계획을 선호함
- 수평 계획은 작업 도중 브라우저나 curl로 실제 해결책을 만져보고 검증하기 어려움
- AI 이전 개발자는 500줄이나 2,000줄을 한꺼번에 작성하기보다 중간부터 바깥으로 확장하며 계속 확인했음
- API 계약과 mock 데이터를 만들고 curl로 검사함
- 프런트엔드에서 mock 데이터를 소비하며 브라우저로 다듬음
- API를 서비스 계층에 연결함
- 데이터베이스 마이그레이션과 저장소 연결을 추가함
- 비즈니스 로직을 추가함
- 오류 처리를 추가함
- 수직 슬라이스 또는 tracer bullets는 각 단계에서 실제 동작을 테스트하고 개선할 수 있게 함
- 품질이 특히 중요한 영역에서는 단계마다 100~200줄을 검토하고 방향을 다시 잡는 편이 2,000줄 이상을 뒤늦게 고치는 것보다 저렴함
- 최신 모델도 인간의 방향 조정 없이 이런 계획을 세우기 어렵고, 코드베이스와 작업별 일반화도 힘들어 인간이 루프에 남아야 함
작업 크기에 따른 적용 방식
- 30분의 선행 계획으로 구현 후 수시간의 리뷰를 줄일 수 있음
- 인간 수준에 가까운 품질을 유지하려면 제품 설계·시스템 아키텍처·프로그램 설계·수직 슬라이스에 인간이 참여해야 함
- 모든 작업에 전체 절차를 적용하지는 않음
- 약 40% 는 한 번에 생성하거나 1~2회의 가벼운 피드백으로 마침
- 중간 규모 작업은 제품·시스템 설계를 하나의 계획 문서로 합치고 구현 단계를 나누지 않음
- 큰 작업은 네 단계를 모두 거치되, 대규모 리팩터링처럼 제품 검토가 맞지 않으면 해당 단계를 생략함
- 보통 모델에 한 번에 1~3개 슬라이스를 맡기고 진행 중인 코드를 검토함
- 초기에 내부 구조나 기능을 바로잡는 편이 대량 생성 후 무엇이 잘못됐는지 찾는 것보다 쉬움
병목은 PR 수가 아니라 PR 품질
- PR이 너무 많은 게 아니라 나쁜 PR이 너무 많은 것이 병목임
- 결정된 설계와 팀의 관례를 따르는 깨끗한 PR은 모든 파일을 읽어도 빠르게 검토할 수 있음
- PR의 20%만 재작업해도 제출자와 검토자 모두에게 지적 부담과 감정적 부담이 생김
- AI가 한 번에 생성한 PR은 재작업 비율이 50%에 가까운 경우가 많음
- 제출자가 AI여도 누군가는 작업을 시작하고 결과를 다듬거나 책임져야 하므로 재작업 비용은 사라지지 않음
제약을 받아들인 개발 속도
- 현재의 핵심 제약은 모델이 잘하는 일과 못하는 일이 분명하고, 당분간 인간이 코드를 읽어야 한다는 점임
- 코드 품질이 중요하지 않다고 가정하며 10~100배 속도를 좇기보다 제약 안에서 시스템을 최적화하면 안전하게 2~3배 속도를 얻을 수 있음
- 실무 원칙은 네 가지임
- 모델과 충분히 작업해 제약에 대한 직관을 기름
- 그 제약 안에서 개발 시스템을 최적화함
- 높은 레버리지가 있는 지점을 찾음
- 실제 코드를 읽음
- 하네스와 루프는 명백한 오류를 줄이는 도구지만, 유지보수성 판단과 설계 사고를 대신하지 못함