1. 제품 개발의 배경과 목적
Thoughtbot은 기존 AI 도구들이 생성하는 코드의 품질과 유지보수성에 의문점을 제기하며 이번 프로젝트를 시작했습니다. ‘Lovable’과 같은 기존 서비스는 시각적인 프로토타입을 빠르게 만드는 데 강점이 있지만, 생성된 코드가 JavaScript 프런트엔드와 Supabase와 같은 특정 서비스에 의존하는 경우가 많아 전문 개발자가 이를 이어받아 확장하기에는 한계가 있었습니다. Thoughtbot의 목표는 처음부터 전문 개발자가 작성한 것과 다름없는, Rails의 관례를 엄격히 따르는 백엔드 중심의 애플리케이션을 생성하는 것입니다. 이는 단순한 ‘일회용 프로토타입’이 아닌, 실제 비즈니스로 확장 가능한 ‘지속 가능한 코드’를 지향합니다.
2. 기술적 특징 및 아키텍처
- 로컬 컨테이너 기반 개발: 사용자는 Ruby나 PostgreSQL을 직접 설치할 필요 없이, 도구가 제공하는 Docker 컨테이너 환경 내에서 모든 개발을 진행합니다. 이는 환경 설정의 복잡성을 제거하고 비기술자도 즉시 개발을 시작할 수 있게 합니다. 또한 SQLite나 PostgreSQL을 컨테이너 내에서 구동하여 실제 운영 환경과 유사한 데이터베이스 레이어를 제공합니다.
- TDD(테스트 주도 개발) 강제: AI 에이전트가 기능을 구현하기 전에 항상 테스트 코드를 먼저 작성하도록 설계되었습니다. 이는 ‘Vibe Coding’이라 불리는, 검증되지 않은 코드를 양산하는 방식을 지양하고 코드의 신뢰성을 보장하기 위함입니다. Thoughtbot은 테스트가 없는 코드는 향후 유지보수에 큰 장애물이 된다고 판단하여 이 과정을 필수화했습니다.
- Hotwire 및 Stimulus 스택: 복잡한 SPA(Single Page Application) 구조 대신 Rails의 최신 표준인 Hotwire(Turbo/Stimulus)를 활용하여, 서버 사이드 렌더링의 이점과 현대적인 사용자 경험을 동시에 제공합니다. 이는 코드의 복잡성을 낮추고 Rails의 생산성을 극대화하는 선택입니다.
3. ‘LLM as Judge’를 통한 품질 관리
AI 모델은 대화가 길어지면 초기의 지침을 잊어버리는 ‘망각 현상(Amnesia)’을 겪습니다. 이를 해결하기 위해 Thoughtbot은 두 개의 AI 에이전트를 동시에 운용하는 구조를 제안합니다. 실제 코드를 작성하는 ‘작업 에이전트’와, Thoughtbot의 개발 원칙(TDD 준수, 보안 가이드라인 등)을 기준으로 작업을 감시하고 교정하는 ‘감독 에이전트(Judge)’를 두어 일관된 품질을 유지합니다. 필요에 따라 로컬에서 실행되는 오픈 소스 모델(Hugging Face 등)을 감독용으로 활용하여 비용 효율성과 데이터 보안을 강화할 계획입니다. 이는 한 에이전트가 실수하더라도 다른 에이전트가 이를 즉시 바로잡는 자가 교정 시스템을 구축하는 것입니다.
4. 사용자 워크플로우와 비즈니스 가치
- 대화형 디자인 스프린트: 도구는 단순히 명령을 수행하는 것을 넘어, 사용자에게 “주요 타겟 사용자는 누구인가?”, “핵심 가치 제안은 무엇인가?”와 같은 질문을 던지며 제품의 방향성을 함께 고민하는 디자인 스프린트 과정을 내장합니다. 이는 사용자가 잘못된 제품을 만드는 리스크를 줄여줍니다.
- Eject(추출) 기능: 사용자가 도구의 도움 없이 직접 코드를 수정하고 싶을 때, 언제든지 표준 Rails 앱으로 추출하여 자신만의 에디터나 IDE에서 작업을 이어갈 수 있는 유연성을 제공합니다. 생성된 코드는 가독성이 높고 Thoughtbot의 스타일 가이드를 준수합니다.
- 오픈 소스 및 커뮤니티 전략: 프로젝트의 핵심 엔진은 GitHub에 공개하여 커뮤니티와 함께 성장하며, 향후 클라우드 호스팅이나 고급 관리 기능을 통해 상용화 모델을 구축할 예정입니다. 이는 Thoughtbot이 추구하는 기술 공유와 혁신의 가치를 동시에 실현하는 방법입니다.