명세(Specification): 소프트웨어 개발에서 가장 남용되는 용어
Specification: the most overloaded term in software development
핵심 요약
소프트웨어 개발에서 '명세'라는 용어가 너무 모호하게 쓰이고 있으며, AI 코딩 도구에는 검증 가능한 실행형 명세가 필요하다는 주장.
- 용어의 모호성 — 명세라는 단어가 RFC, PRD, YAML 등 너무 다양한 의미로 혼용됨
- 실행형 명세 — AI가 스스로 작업 결과를 검증하려면 BDD 방식의 실행 가능한 명세가 필수적임
- SDD의 한계 — 현재의 명세 기반 개발 도구들은 단순히 프롬프트를 상세화할 뿐 검증 기능이 부족함
Andrew Ng이 명세 기반 개발(spec-driven development)에 관한 강의를 시작했습니다. Kiro, spec-kit, Tessl 등 모두가 이제 명세를 중심으로 무언가를 만들고 있습니다. 하지만 아무도 '명세(spec)'가 정확히 무엇을 의미하는지 정의하지 않습니다.
소프트웨어 분야에서 이 단어는 최소 13가지 이상의 의미를 가집니다. RFC는 명세입니다. Kubernetes YAML에는 'spec'이라는 이름의 필드가 있습니다. RSpec 파일은 명세입니다. CLAUDE.md는 명세입니다. PRD는 명세입니다.
누군가 '프롬프트를 작성하기 전에 명세를 작성하라'고 말할 때, 그들은 실제로 무엇을 의미하는 걸까요?
저는 한동안 SDD를 해왔고, 이것을 알아내는 데 너무 오랜 시간이 걸렸습니다. 대부분의 SDD 접근 방식은 마크다운 문서를 사용합니다. 구조화된 요구사항, 아키텍처 노트, 구현 계획 같은 것들이죠. 기본적으로 상세한 프롬프트입니다. 그들은 에이전트에게 무엇을 해야 할지 알려줍니다. 하지만 에이전트가 그것을 올바르게 수행했는지는 검증하지 않습니다.
BDD 명세는 둘 다 수행합니다. 요구사항을 정의하는 바로 그 아티팩트가 구현도 검증합니다. 명세가 곧 테스트입니다. 통과하거나, 아니면 실패하거나 둘 중 하나입니다.
에이전트가 스스로 자신의 작업을 검증하게 만들고 싶다면, 실행 가능한 명세(executable specs)가 필요합니다. 그것이 대부분의 SDD 도구가 놓치고 있는 부분입니다.
당신의 설정에서 '명세'는 실제로 무엇을 의미하나요?


