Executable Contracts as Guardrails for AI-Generated Code
개요
AI 코딩 에이전트가 생성한 코드의 잠재적인 위험, 특히 "드리프트(drift)" 현상을 해결하기 위해 Specmatic을 사용한 실행 가능한 계약(executable contract) 기반의 개발 접근 방식이 제시됩니다.
주요 내용
* AI 코딩 에이전트의 드리프트 문제: AI 에이전트가 생성한 코드는 빠른 개발 속도를 제공하지만, 작은 변경 요청에도 예상치 못한 방식으로 코드가 수정되어 다운스트림에서 통합 버그를 유발하는 "드리프트" 현상이 발생할 수 있습니다. 이는 논리 버그가 아닌 계약 버그로 인해 발생합니다.
* Specmatic을 활용한 실행 가능한 계약: Specmatic은 API 계약을 단순한 문서가 아닌 실행 가능한 테스트 스위트로 만들어, AI 생성 코드의 드리프트를 실시간으로 감지하고 수정하는 가드레일 역할을 합니다.
* DATABASE-MANAGER 프로젝트에 Specmatic 통합: 자연어-SQL 엔진인 DATABASE-MANAGER 프로젝트에 Specmatic을 통합하여 다음과 같은 단계로 개발을 진행했습니다.
* 계약(Contract)을 진실의 원천으로 설정: OpenAPI 사양으로 API 계약을 정의하고, 이를 백엔드와 프론트엔드가 공유하는 단일 진실의 원천으로 삼습니다.
* 실행 가능한 계약을 통한 API 테스트: Specmatic은 계약으로부터 긍정 및 부정 요청을 자동으로 생성하여 실제 API가 계약을 준수하는지 검증합니다.
* 서비스 가상화를 통한 프론트엔드 개발: Specmatic stub을 사용하여 백엔드나 데이터베이스 없이도 프론트엔드 개발이 가능하도록 API를 모킹합니다.
* AI 드리프트 즉시 감지: AI 에이전트가 코드를 변경할 때, Specmatic 계약 테스트를 통해 드리프트가 발생했는지 즉시 확인할 수 있으며, 이는 복잡한 통합 버그를 개발 초기 단계에서 잡아냅니다.
* Specmatic 통합의 추가적인 이점:
* 인라인 및 외부 예제 활용: 계약 테스트에 실제 값 예제를 포함하여 더 정확한 검증을 수행합니다.
* 스키마 탄력성 테스트: 생성적인 부정 테스트를 통해 입력 유효성 검사가 부족한 부분을 발견하고 수정합니다.
* LLM 가상화: CI/CD 파이프라인에서 LLM 호출을 Specmatic stub으로 대체하여 토큰 사용량을 절감하고 테스트를 결정론적으로 만듭니다.
* CI/CD 파이프라인 개선: 테스트를 관심사별로 분리하고 HTML 보고서를 생성하여 가시성을 높였으며, 실제 애플리케이션의 라우트와 계약을 일치시키는 "실제 커버리지(Actual Coverage)" 개념을 도입했습니다.
* 의존성 관리 및 테스트 백도어 제거: 옵셔널 의존성을 분리하여 설치 문제를 해결하고, 테스트 도구만을 위한 별도의 인증 경로를 제거하여 실제 배포되는 코드와 동일한 경로를 테스트하도록 개선했습니다.
시사점
실행 가능한 계약은 AI 코딩 에이전트의 예측 불가능한 드리프트 문제를 완화하고, 코드의 신뢰성과 안정성을 보장하는 효과적인 가드레일 역할을 수행할 수 있습니다. 이는 AI 기반 소프트웨어 개발의 견고성을 높이는 데 기여합니다.
댓글
GitHub Discussions