← 최신 논문
💻 computer science

Specification-first convergence with an AI coding agent: a case study of dismantling a core architectural invariant across 189 files in a 717k-line codebase with no test oracle and no human code review

이 논문은 인간의 코드 리뷰나 기존의 테스트 오라클 없이 명세 우선 프로토콜 하에 작동하는 AI 코딩 에이전트가, 3일 동안 2,430달러의 비용으로 201개의 결함을 수정하며 공식 명세를 반복적으로 정교화함으로써 717,000라인 규모의 TypeScript 코드베이스 내 189개 파일에 걸친 핵심 아키텍처 불변성을 성공적으로 해체했음을 보여주는 사례 연구를 제시한다.

원저자: Joël Abenhaïm

게시일 2026-08-25
📖 6 분 읽기🧠 심층 분석

원저자: Joël Abenhaïm

원본 논문은 CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

소프트웨어의 세계에서 프로그램은 거대하고 복잡한 도시처럼 구축됩니다. 프로그램은 컴퓨터가 어떻게 행동하고, 어떻게 기억하며, 사용자가 버튼을 클릭했을 때 어떻게 반응할지를 지시하는 수백만 줄의 명령어로 구성됩니다. 수십 년 동안 이 도시를 변경하는 표준적인 방법은 인공지능이 놓을지도 모르는 모든 새로운 벽돌을 검사하기 위해 인간 설계자를 보내는 것이었습니다. 이러한 인간의 검토는 필수적인 것으로 간 만큼, 프로그램의 서로 다른 부분 사이의 연결이 매우 깊고 뒤엉켜 있어 한 구석에서의 작은 실수가 다른 곳의 붕괴를 일으킬 수 있기 때문입니다. 변화가 한 번에 수백 개의 파일을 건드릴 정도로 커지면, 작업 내용을 확인하는 일은 병목 현상이 됩니다. 단 한 명의 인간도 그 변화의 전체 지도를 한 번에 머릿속에 담을 수 없기 때문입니다. 이러한 한계로 인해 많은 이들은 가장 복잡한 건축적 변화를 위해서는 기존 구조를 허물고 처음부터 다시 구축하는 것만이 유일하게 안전한 길이라고 믿어 왔으며, 이는 느리고 비용이 많이 들며 위험한 과정입니다.

최근의 한 사례 연구는 이러한 대규모 변화에서 인간의 검토가 안전을 보장하는 유일한 방법이라는 생각에 도전합니다. 이 연구는 초점을 완성된 제품을 확인하는 것에서, 벽돌이 놓이기 전 설계도를 완벽하게 만드는 것으로 전환하는 방법을 탐구합니다. 인공지능에게 코드를 작성하게 한 뒤 인간이 오류를 찾아내기를 기대하는 대신, 이 접근 방식은 기계에게 자신이 무엇을 하려는 의도인지에 대한 상세하고 형식적인 설명을 먼저 작성하도록 요구합니다. 이 설명은 기존 코드와 엄격하게 대조되는데, 이는 코드가 제대로 작동하는지를 보기 위함이 아니라 계획 자체가 타당한지를 확인하기 위함입니다. 계획은 더 이상 결과(findings)를 생성하지 않을 때까지 정제되고 수정되며 고정됩니다. 그 후에야 기계는 구축을 시작하며, 그 과정에서도 고정된 계획과 대조하여 지속적으로 감사를 받습니다. 그 결과, 이 방식은 인간이 생성된 코드를 단 한 번도 읽지 않고도 대규모의 복잡한 건축적 변화를 완료할 수 있음을 입증했습니다. 이는 의도를 정의하고 검증하는 과정이 충분히 견고하다면 가능하다는 것을 보여줍니다.

이 실험은 인공지능 코딩 보조를 위해 사용되는 하나의 대규모 독점 소프트웨어 애플리케이션 내에서 수행되었습니다. TypeScript라는 언어로 작성된 이 시스템은 약 3,650개의 파일에 걸쳐 717,000줄 이상의 코드를 포함하고 있었습니다. 이것은 이론적인 모델이 아니라 매일 사용되는, 살아 움직이는 소프트웨어였습니다. 인공지능 에이전트에게 주어진 과제는 시스템 생성 이래로 이 시스템을 지배해 온 핵심 규칙을 해체하는 것이었습니다. '불변성(invariant)'이라 불리는 이 규칙은 사용자가 AI와 대화를 시작할 때, 대화창이 요청이 지속되는 동안 계속 열려 있어야 함을 보장했습니다. 만약 사용자가 창을 닫으면 대화도 종료되었습니다. 목표는 이 규칙을 깨는 것이었습니다. 즉, 사용자가 창을 닫더라도 대화는 백그라운드에서 계속 실행되어야 하며, 데이터 손실이나 단어의 반복 없이 정확히 이전에 멈췄던 지점에서 다시 열리고 재개될 수 있어야 했습니다.

이 특정 변경 사항은 표준적인 리팩터링을 통해서는 거의 달성 불가능한 것으로 간주되었습니다. 저자의 평가에 따르면, 코드의 상호 의존성이 너무 긴밀하여 대화의 수명(lifetime)을 수정하면서 전체 시스템을 망가뜨리지 않는 것은 보통 관련 컴포넌트를 완전히 새로 작성해야 하는 일이었습니다. 이 작업은 데이터가 여전히 스트리밍되는 동안 창이 닫히는 경우와 같은 복잡한 타이밍 문제를 관리하는 일을 포함했습니다. 이를 해결하기 위해 저자는 인공지능이 엄격한 궤도를 유지하도록 설계된 5단계 프로토콜을 채택했습니다. 프로세스는 에이전트가 요청을 분석하고 어떻게 작동해야 하는지를 상세히 기술한 공식 명세서(formal specification)를 생성하는 것으로 시작되었습니다.

가장 결정적인 부분은 정제 단계였습니다. 에이전트는 자신의 명세서를 가져와 실제 소스 코드와 대조하여 모순이나 누락된 세부 사항이 있는지 확인하도록 요청받았습니다. 이것은 단 한 번의 확인이 아니었습니다. 에이전트는 이 감사 과정을 14번의 사이클 동안 반복했습니다. 각 사이클에서 에이전트는 자신의 계획에서 오류를 발견했습니다. 예를 들어 업데이트해야 할 파일을 잊었거나 종속 관계를 오해한 경우 등이었으며, 이를 수정하기 위해 명세서를 다시 작성했습니다. 이 14번의 라운드 동안 계획은 약 85번 수정되었으며, 숨겨진 연결 고리들이 발견됨에 따라 변경 범위는 110개 파일에서 160개 파일로 확장되었습니다. 14번째 사이클이 끝날 무렵 명세서는 고정되었습니다. 그것은 마지막 사이클에서 더 이상의 결과가 반환되지 않을 때까지 실제 코드베이스의 현실과 대조하여 검증된 고정된 청사진이었습니다.

계획이 확정되자 에이전트는 구현 단계로 넘어갔습니다. 에이전트는 고정된 명세서와 일치하는 데 필요한 코드 변경 사항을 생성하라는 지시를 받았습니다. 에이전트는 부분적인 변경을 거부했는데, 이는 미완성된 마이그레이션이 시스템을 망가뜨릴 것임을 정확히 식별했기 때문입니다. 대신, 에이전트는 세 단계의 확정된 단계를 통해 작업을 수행했습니다. 코드가 작성된 후에는 검증 단계가 시작되었습니다. 계획이 코드와 대조되었던 것처럼, 이제 새로운 코드가 고정된 계획과 대조되었습니다. 에이전트는 17번의 사이클 동안 이 감사를 수행하며 실제 화면상의 코드와 명세서에 적힌 규칙을 비교했습니다. 각 사이클마다 에이전트는 편차를 찾아 수정했으며, 인간이 놓칠 수도 있는 미묘한 아키텍처 결함을 해결했습니다. 이 17번의 라운드 동안 에이전트는 코드 자체에서 116개의 결함을 수정했습니다. 프로세스는 두 번의 연속된 감사가 오류 0을 반환했을 때, 즉 코드가 정의된 수렴 기준에 따라 계획과 일치함을 확인했을 때 멈췄습니다.

전체 작업은 189개의 파일을 건드렸으며, 기존 코드를 추출하는 과정을 포함하면 총 288개의 파일이 변경되었습니다. 변경 사항에는 34,000줄 이상의 새로운 코드와 16,000줄 이상의 삭제된 코드가 포함되었습니다. 놀랍게도 이 거대한 구조 조정은 3일 만에 완료되었습니다. 이 작업에 소요된 인공지능 처리 비용은 미화 2,430달러였습니다. 3일의 기간 내내, 이 프로그램은 인간에 의해 단 한 번도 실행되지 않았습니다. 소프트웨어가 실제로 실행된 첫 번째 시점은 17번째 검증 사이클이 끝난 후, 저자가 마침내 새로운 동작을 테스트했을 때였습니다.

결과는 성공적이었습니다. 프로그램이 실행되었을 때, 새로운 동작은 명세서에 기술된 대로 정확히 작동했습니다. 사용자가 대화를 시작하고 창을 닫으면 대화는 백그라운드에서 계속 실행되었습니다. 사용자가 창을 다시 열면 데이터 손실이나 텍text 중복 없이 대화가 즉시 재개되었습니다. 사이드바에는 사용자가 필요할 때 백그라운드 프로세스를 종료할 수 있도록 하는 새로운 정지 버튼이 나타났습니다. 수년간 소프트웨어에서 실행되어 온 기존 자동 테스트들도 실패 없이 통과하였으며, 이는 새로운 시스템이 기존 기능을 깨뜨리지 않았음을 나타냈습니다. 소프트웨어는 버전 2.3.0으로 공개되었으며, 출시 후 약 30회의 사용 세션 동안 버그는 관찰되지 않았습니다.

이 사례 연구는 인공지능이 모든 시나리오에서 인간 엔지니어를 대체할 수 있다고 주장하거나, 이 방법이 모든 유형의 문제에 작동한다고 제안하는 것이 아닙니다. 저자는 이것이 단 하나의 특정 사례이자 단 하나의 코드베이스에 대한 것이며, 그 결과를 다른 시스템이나 작업에 자동으로 적용할 수 없음을 주의 깊게 언급하고 있습니다. 또한 연구는 기존의 테스트 세트가 이 문제를 해결할 수 있었을 것이라는 생각을 명시적으로 배제하는데, 왜냐하면 원하는 동작이 변경 전에 존재하지 않았기 때문입니다. 기존 코드에는 대조할 '정답'이 없었습니다. 정답은 처음부터 정의되어야 했습니다. 또한 이 과정이 특정하고 강력한 인공지능 모델에 의존했다는 점과, 결과가 더 약한 모델에서는 다를 수 있다는 점을 인정하고 있습니다.

이 연구의 의의는 복잡성을 관리하는 새로운 방법을 보여준 데 있습니다. 품질 관리의 부담을 최종 제품을 검사하는 것에서 계획을 엄격하게 정의하고 검증하는 것으로 옮김으로써, 연구진은 기계가 인간의 개입 없이도 상호 의존적인 코드의 지뢰밭을 헤쳐 나갈 수 있음을 보여주었습니다. 핵심은 기계가 무결하기 때문이 아니라, 프로세스가 기계가 영구적인 오류가 되기 전에 스스로의 실수를 반복적으로 잡아낼 수 있도록 허용했다는 점입니다. 명세서는 14번 도전받았고, 코드는 17번 확인되었으며, 이는 경험적 정지 규칙(empirical stopping rule)을 바탕으로 의도와 현실 사이의 일치를 향해 시스템을 몰아가는 자기 수정 루프를 만들어냈습니다. 1,500페이지가 넘는 이 전체 과정의 로그는 누구나 검사할 수 있도록 공개되었으며, 기계가 어떻게 인간의 감시 없이도 핵심 아키텍처 규칙을 해체하고 벽돌 하나하나를 쌓아 재건할 수 있는지에 대한 투명한 모습을 보여줍니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →