what is spec-driven development? (with ai coding agents)
개요
Spec-driven development는 AI 코딩 에이전트가 사용자의 의도를 명확히 이해하도록 돕기 위해, 코드 구현 전에 요구사항, 디자인, 작업 목록을 포함하는 명세(spec)를 작성하고 검토하는 개발 방식입니다.
주요 내용
* 기존 AI 코딩 워크플로우의 한계: AI 에이전트는 단순한 설명으로 코드를 생성하지만, 종종 의도와 다른 결과물을 내놓아 수정에 많은 시간이 소요됩니다. 이는 에이전트가 코드 작성법이 아닌 사용자의 실제 의도를 파악하지 못하기 때문입니다.
* Spec-driven development의 개념: 사용자의 요구사항, 디자인, 작업을 명확히 기술한 명세(spec)를 먼저 작성하고 검토하여 완벽하게 만든 후, 이 명세를 기반으로 AI 에이전트가 코드를 구현하도록 합니다.
* 명세(spec)의 구성 요소: 일반적으로 요구사항(requirements), 디자인(design), 작업(tasks)의 세 부분으로 구성됩니다.
* 요구사항: 기능이 무엇을 하는지, 누가 사용하는지, 성공 기준은 무엇인지, 인수 조건 등을 명시합니다 (행동 중심).
* 디자인: 요구사항을 만족하는 기술적 계획으로, 아키텍처, 데이터 모델, 인터페이스, 제약 조건 등을 포함합니다.
* 작업: 디자인을 작고 검토 가능하며 테스트 가능한 단위로 분해한 것입니다 (예: "이메일 형식을 검증하고 중복을 거부하는 등록 엔드포인트를 추가").
* Spec-driven development의 중요성: 코드 작성 비용이 저렴해진 현재, 개발의 병목 현상이 '무엇을 만들지 정확히 결정하는 것'으로 이동했습니다. 명세는 이러한 결정을 명확하게 하고, 모호한 의도로 인한 추측을 줄여 잘못된 구현 전에 수정할 수 있게 합니다.
* 검토 방식의 변화: 코드의 차이(diff)를 검토하는 것이 아니라, 의도를 먼저 언어로 합의한 후 구현이 해당 의도와 일치하는지 검토합니다.
* 비용 효율성: AI 작업에서 가장 비용이 많이 드는 실수는 잘못된 것을 잘 만드는 것이며, 명세는 이를 가장 저렴하게 방지할 수 있는 방법입니다.
* 병렬 개발의 용이성: 명세가 명확한 작업 단위로 분해되면, 여러 AI 에이전트가 충돌 없이 독립적으로 작업을 수행할 수 있습니다.
* Spec-driven development의 한계:
* 과도함: 단순하거나 사소한 작업에는 명세 작성이 오히려 비효율적일 수 있습니다.
* 오래된 명세: 명세가 지속적으로 업데이트되지 않으면 신뢰성을 잃고, 오히려 잘못된 정보의 출처가 될 수 있습니다.
* AI의 불완전성: 명세가 상세해도 AI가 항상 모든 지시를 따르는 것은 아니므로, 결과물 검토는 여전히 필요합니다.
* 검토의 번거로움: 장문의 마크다운 명세 자체를 검토하는 것이 부담스러울 수 있습니다.
시사점
Spec-driven development는 AI 코딩 에이전트의 효율성을 극대화하고 개발 오류를 줄이는 데 효과적인 방법론이지만, 작업의 규모와 위험도를 고려하여 적절히 적용해야 하며 명세의 최신 상태를 유지하는 것이 중요합니다.
댓글
GitHub Discussions