포스트

충분히 상세한 명세는 곧 코드다 - AI 에이전트 코딩의 한계

목차

  1. 개요
  2. 두 가지 핵심 오해
  3. OpenAI Symphony 사례 분석
  4. 실용적 한계
  5. 슬롭 문제
  6. 결론
  7. Reference

개요

Gabriella Gonzalez는 A Sufficiently Detailed Spec is Code 블로그 포스트에서 에이전트 코딩의 근본적 한계를 지적한다. 핵심 주장은 명확하다: 정밀한 명세는 필연적으로 코드와 같아진다는 것이다. 스펙 문서로부터 작동하는 소프트웨어를 생성할 수 있다는 주장에 정면으로 도전하는 글이다. LLM은 짧은 설명으로부터 그럴듯한 세부사항을 채울 수 있지만, 신뢰할 수 있게 채우지는 못한다. 특히 보안 속성처럼 하지 말아야 할 것을 규정하는 명세는 신뢰할 수 있는 구현을 위해 반드시 명시되어야 한다.

두 가지 핵심 오해

에이전트 코딩을 둘러싼 두 가지 핵심 오해가 존재한다.

오해 1: 명세는 코드보다 단순하다

첫 번째 오해는 명세 작성이 코드 구현보다 단순하다는 것이다. 이 전제는 명세를 작성하는 것이 구현하는 것보다 비용이 적을 때만 성립한다. 그러나 소프트웨어가 복잡해질수록 명세 역시 복잡해진다. 결국 충분히 상세한 명세는 코드 그 자체와 다를 바 없어진다.

오해 2: 명세 작업이 코딩보다 사려 깊다

두 번째 오해는 명세 작업이 코딩보다 더 깊은 사고를 수반한다는 것이다. 현실에서는 산업의 속도 압박이 이러한 전제를 무너뜨린다. 빠른 산출물을 요구하는 환경에서 명세 품질은 코드 품질만큼이나 저하될 수 있다. 결국 명세 단계에서도 동일한 품질 문제가 반복된다.

OpenAI Symphony 사례 분석

OpenAI의 Symphony 프로젝트는 SPEC.md 문서로부터 코드를 생성한다고 홍보되었다. 그러나 실제 SPEC.md의 내용을 분석하면 다른 실상이 드러난다.

SPEC.md의 실제 구성

구성 요소설명
산문형 데이터베이스 스키마자연어로 작성되었지만 사실상 스키마 정의
의사코드 섹션알고리즘을 코드 형태로 기술
치트시트 섹션모델 생성을 보조하기 위해 설계된 참조 자료
리터럴 코드 스니펫텍스트로 분류되어 있지만 실제로는 코드

SPEC.md는 실제 Elixir 구현체의 약 1/6 크기이다. 텍스트라고 라벨링되어 있지만 실질적으로 코드에 해당하는 내용이 포함되어 있다. 결국 스펙이라는 이름 아래에 상당량의 코드가 숨어 있는 셈이다.

다익스트라의 통찰

다익스트라(Dijkstra)는 언어적 정밀성(verbal precision)이 역사적으로 실패해왔다고 지적했다. 수학은 수사학이 아닌 형식적 기호 체계를 통해 발전했다. 공학은 좁은 인터페이스(narrow interfaces), 즉 코드를 통해서만 작동할 수 있다. 이 인터페이스를 회피할 방법은 없다.

실용적 한계

저자는 직접 Symphony를 Claude Code와 함께 테스트하여 Haskell 구현을 시도했다. 결과는 다수의 버그가 발생했고 에이전트는 샘플 작업에서 진전을 이루지 못했다.

보르헤스의 역설

명세를 더욱 확장하면 보르헤스(Borges)의 역설에 빠진다. 이는 지도가 영토만큼 커지는 상황을 의미한다. 명세를 더 상세하게 만들수록 코드와 동일한 복잡도에 수렴한다. 결국 중간 단계인 명세를 거치는 것이 직접 코딩하는 것보다 비효율적이 된다.

접근 방식문제점
짧은 명세LLM이 세부사항을 그럴듯하게 채우지만 신뢰할 수 없음
상세한 명세코드와 동일한 복잡도로 수렴
중간 수준 명세모호함과 버그의 원인

슬롭 문제

Symphony의 Section 10.5에서는 연결되지 않는 명세 형태의 문장들이 발견된다. 이는 속도 최적화에서 비롯된 AI 생성 저품질 명세의 전형적인 사례이다. 명세 자체가 슬롭(slop), 즉 형식만 갖추고 내용이 부실한 결과물이 되는 것이다. 빠른 생산성을 위해 명세 품질을 희생하면, 명세 기반 개발의 전제 자체가 무너진다.

결론

결국 쓰레기를 넣으면 쓰레기가 나온다(Garbage in, garbage out)는 원칙이 AI 코딩에도 그대로 적용된다. 명세라는 중간 단계를 거치는 것보다 직접 코딩하는 것이 더 효율적이다. 충분히 상세한 명세는 코드 그 자체이며, 불충분한 명세는 신뢰할 수 없는 결과를 낳는다. AI 에이전트 코딩의 발전을 위해서는 이러한 근본적 한계를 인식하는 것이 중요하다.

Reference