최근 Thoughtworks에서는 ’바이브 코딩(vibe coding)’이라는 개념에 대해 많은 논의를 하고 있습니다. 하지만 과연 바이브 코딩으로 실제 세상에 배포할 수 있는 프로덕션급 소프트웨어를 만들어낼 수 있을까요? Prem Chandrasekaran은 이를 알아보기 위해 세 가지 실험을 진행했습니다. 이번 글에서는 그 실험 결과와 바이브 코딩의 가능성과 한계를 탐구해보겠습니다.
바이브 코딩이란 무엇인가?
바이브 코딩은 AI가 직관적이고 자유로운 방식으로 코드를 생성하는 접근법을 의미합니다. 이는 기능 중심의 코드를 빠르게 생성하며, 시스템 구조나 설계 규칙에 대한 엄격한 지침 없이도 작업을 진행하는 방식입니다. 하지만 이런 자유로운 방식이 실제로 유지보수 가능하고 신뢰할 수 있는 소프트웨어를 만들어낼 수 있을까요? 이를 확인하기 위해 Thoughtworks 팀은 AI가 처음부터 비-간단한 애플리케이션을 작성할 수 있는지 테스트했습니다.
실험에서는 ‘System Update Planner’라는 애플리케이션을 개발 대상으로 삼았습니다. 이 도구는 소프트웨어 업데이트와 패치 배포를 관리하며, 패키지 업데이트 정의, 배치별 롤아웃 계획, 개별 장치 상태 추적 등의 기능을 포함합니다. 이 도구는 너무 단순하지도, 지나치게 복잡하지도 않은 적절한 테스트 사례로 선택되었습니다.
프로덕션급 소프트웨어란?
프로덕션급 소프트웨어란 단순히 동작하는 코드를 넘어, 견고하고 유지보수 가능하며 실제 환경에서 책임감 있게 배포 및 발전시킬 수 있는 소프트웨어를 의미합니다. 이를 평가하기 위해 다음과 같은 기준을 사용했습니다:
특성 | 설명 | 정성적 지표 | 정량적 지표 |
정확성 | 의도대로 작동하며, 주요 워크플로우가 테스트로 검증됨 | 엣지 케이스 처리, 기본 사용 중 회귀 오류 없음 | 테스트 통과율 100%에 근접, 뮤테이션 점수 >80% |
테스트 가능성 | 단위, 통합, 엔드투엔드 테스트를 지원하는 설계 | 빠르고 명확한 테스트, 일관된 명명 | 단위 테스트 커버리지 >90%, 테스트 안정성 |
유지보수성 | 읽기 쉽고 모듈화된 코드로, 다른 개발자가 이해하고 수정 가능 | 직관적 구조, 신규 기여자 온보딩 용이 | 낮은 인지 복잡도, 핵심 모듈 변경률 안정 |
확장성 | 성능, 보안, 운영 안정성 같은 비기능적 요구사항 고려 | 성장 예측 설계, 과도한 결합 회피 | 성능 벤치마크, 우아한 성능 저하 패턴 |
진단 가능성 | 효과적인 문제 해결을 지원하는 로그와 구조적 명확성 제공 | 의미 있는 로그, 추적 가능한 실패 | 구조화된 로그 존재, 주요 실패 경로 알림 커버 |
규율 | 버전 관리, CI, 정적 분석 등 엔지니어링 모범 사례 준수 | 명확한 커밋 메시지, CI 준수 워크플로우 | CI로 커밋 검증, 린트 통과, SAST 이슈 없음 |
이 기준들은 완벽함을 추구하는 체크리스트가 아니라, 소프트웨어가 신뢰할 만하고 발전 가능하며 운영적으로 건전한지를 판단하는 지침입니다.
실험 설정 및 도구
세 가지 실험에서는 주로 Cursor IDE의 에이전트 모드를 사용했습니다. 이 모드는 AI가 코드 편집뿐 아니라 명령줄 실행, Git 저장소 관리 등 복잡한 워크플로우를 자율적으로 수행할 수 있게 합니다. 또한 Claude 3.7 Sonnet과 Google Gemini 2.5 Pro 같은 AI 모델을 활용했으며, 특히 Gemini는 기능 요구사항 이해와 아키텍처 논의에서 뛰어난 성능을 보였습니다.
추가로 MCP(Model Context Protocol) 서버를 활용해 세션 간 일관된 추론, Git 명령 실행, 저장소 상호작용 등을 지원하려 했으나, AI의 세션 간 맥락 유지 능력은 제한적이었습니다.
세 가지 실험 개요
- 실험 1: 기능적 요구사항만 제공하고 AI가 자율적으로 애플리케이션(JavaScript)을 개발.
- 실험 2: 기능 요구사항 외에 테스트 주도 개발(TDD) 같은 구현 규칙을 추가해 TypeScript와 Prisma로 개발.
- 실험 3: MCP 서버를 비활성화하고 Google Gemini 2.5 Pro로 대화형 협업을 진행, Python/FastAPI로 구현.
실험 1: AI에게 전권을 맡기다
첫 번째 실험에서는 바이브 코딩의 본질을 살려, 기능적 요구사항만 제공하고 AI가 자유롭게 코드를 작성하도록 했습니다. 놀랍게도 AI는 단 한 번의 실행으로 거의 작동하는 애플리케이션을 생성했습니다. 하지만 UI 출력 형식 수정, 대화형 메뉴 모드 추가, 데이터베이스 마이그레이션 도구(Knex.js) 통합, 테스트 추가 같은 후속 변경 요청에서 문제가 드러났습니다.
AI는 점진적 변경에 어려움을 겪으며 회귀 오류를 일으켰고, 결국 수동 개입이 필요했습니다. 이는 AI가 복잡하고 진화하는 시스템을 다루는 데 한계가 있음을 보여줍니다. 전문가인 Birgitta Böckeler는 AI가 빠르게 코드를 생성할 수 있지만, 모듈화된 코드 없이는 협업이 어렵다고 지적하며, 인간의 감독이 필수적임을 강조했습니다.
실험 2: 규율로 AI를 다듬다
두 번째 실험에서는 TDD 준수, 점진적 변경, 정기적 커밋, 모듈화 유지 등 명확한 엔지니어링 규율을 적용했습니다. AI는 TypeScript와 Prisma를 선택해 도메인 모델, 단위 테스트, 트렁크 기반 워크플로우를 구현했으며, 일부 코드에서 뮤테이션 커버리지 100%에 가까운 결과를 달성했습니다.
그러나 AI는 종종 테스트보다 코드를 먼저 작성하는 습관으로 돌아갔고, 사소한 변경(예: console.log 제거)이 의도치 않은 테스트 회귀와 의존성 다운그레이드(Prisma 6.5 → 5.5)를 초래했습니다. 이는 AI의 훈련 데이터에 고품질 TDD 코드가 부족한 점과 복잡한 변경에서의 불안정성을 반영합니다. 그럼에도, 구조화된 피드백과 테스트 강제를 통해 AI는 유지보수 가능한 시스템을 만들어낼 가능성을 보여줬습니다.
실험 3: 인간과 AI의 대화형 협업
세 번째 실험에서는 MCP 서버를 비활성화하고 Google Gemini 2.5 Pro와 대화형으로 협업했습니다. AI는 단순히 코드를 생성하는 대신, 장치 스냅샷 설계와 같은 주제에서 주도적으로 질문을 던졌습니다. 예를 들어:
- 스냅샷은 전체 패키지 상태를 캡처해야 하는가?
- 보고된 상태와 저장된 상태 간 불일치를 어떻게 처리할 것인가?
- 스냅샷 제출 시 현재 상태를 덮어쓰거나 감사용으로 기록할 것인가?
AI는 API 설계를 제안하고, 트레이드오프(즉시 로딩 vs. 지연 로딩)를 논의하며, 초기 가정의 허점을 지적했습니다. 결과물인 Python/FastAPI 시스템은 이전 실험보다 더 깔끔하고 모듈화되었으며, RESTful 설계 원칙에 잘 부합했습니다.
주요 교훈
- 도구 선택의 중요성: Claude 3.7 Sonnet은 일반적 추론에서, Gemini 2.5 Pro는 기능 요구사항과 아키텍처 사고에서 강점을 보였습니다.
- 맥락 인식의 한계: MCP 서버를 사용해도 세션 간 맥락 유지가 어려웠습니다.
- 인간-AI 협업의 힘: AI를 주니어 파트너로 대하며 질문을 유도하고 피드백을 주면 더 나은 결과물이 나왔습니다.
- 프로덕션급 품질을 위한 감독: 테스트 가능성, 유지보수성, 확장성은 명시적 프롬프트와 검토로 개선되었습니다.
- 실험의 가치: 다양한 설정과 프롬프트 스타일이 결과에 큰 차이를 만들었습니다.
팀이 취해야 할 다음 단계
AI는 소프트웨어 개발의 새로운 패러다임을 열고 있습니다. 이를 효과적으로 활용하기 위해 다음을 권장합니다:
- 개발자: AI를 신중히 가이드하며, 아키텍처 패턴과 테스트 전략을 포함한 프롬프트를 연습하세요.
- 테크 리드/아키텍트: AI 개발을 위한 템플릿, 참조 저장소, 거버넌스 정책을 설정하세요.
- 테스터/보안 분석가: AI로 테스트 시나리오와 공격 표면을 빠르게 탐색하세요.
- 제품 매니저: 비즈니스 워크플로우와 로직을 자연어로 프로토타이핑해 피드백 루프를 단축하세요.
- IT 리더: 안전한 실험을 지원하고, AI 활용 역량을 조직에 구축하세요.
또한, 비용 관리도 중요합니다. 실험 중 빠른 요청 쿼터($20/500회)를 몇 시간 만에 소진한 사례는, 팀 규모에 따라 비용이 빠르게 증가할 수 있음을 보여줍니다.
소프트웨어 개발의 미래
AI 코딩 도구는 이제 단순한 자동 완성이나 스니펫 생성기를 넘어, API, 데이터베이스, 테스트를 포함한 전체 솔루션을 구축할 수 있습니다. 아직 실수가 있고 인간의 감독이 필요하지만, 단일 개발자가 AI와 협력해 며칠 걸리던 작업을 몇 시간 만에 완성할 수 있는 수준에 도달했습니다.
바이브 코딩이 프로덕션급 소프트웨어를 만들어낼 수 있을까? 아직은 일관되게 할 수 없습니다. 하지만 올바른 아키텍처 의도, 감독, 피드백 루프를 통해 AI는 신뢰할 수 있는 팀원에 점점 가까워지고 있습니다.
미래에는 코드베이스가 작고 모듈화된 시스템으로 유지되며, AI의 컨텍스트 창에 맞게 재생성되는 방식으로 발전할 가능성이 있습니다. 소프트웨어는 영구적 구조물이 아니라, 필요할 때 쉽게 재구축 가능한 자산이 될 수 있습니다.
AI 지원 개발은 완전 자동화로 가지 않을지라도, 필연적으로 협업의 중심이 될 것입니다. 지금 AI 도구를 이해하고 통합하는 조직이 미래의 리더가 될 것입니다.
출처: Thoughtworks - Can vibe coding produce production-grade software?
댓글목록
등록된 댓글이 없습니다.