본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 02. 07:22

수동 QA의 종말: Claude Code와 Waterwheel Agent로 자가 테스트 앱을 구축하는 방법

요약

Claude Code와 Waterwheel Agent를 결합하여 인간의 개입 없이 코드 작성, 테스트, 버그 수정, 배포를 수행하는 자율형 개발 루프 구축 방법을 소개합니다. 기존 '바이브 코딩'의 병목 현상인 수동 QA를 해결하기 위해 에이전트 중심의 새로운 TDD 패러다임을 제안합니다.

핵심 포인트

  • Claude Code와 Waterwheel를 연동한 자율적 빌드-테스트-수정 루프 구현
  • 수동 QA 단계를 제거하여 AI 코딩 에이전트의 속도 저하 문제 해결
  • 엔드 투 엔드(E2E) 관점의 새로운 테스트 주도 개발(TDD) 패러다임 제시
  • 인간의 개입 없이 Markdown 기반 테스트로 완전한 기능 배포 가능

만약 당신의 AI 코딩 에이전트가 인간의 개입 없이 코드를 작성하고, 테스트하고, 버그를 수정하고, 배포까지 할 수 있다면 어떨까요?

이것은 사고 실험이 아닙니다. 저는 방금 이를 실제로 해냈으며, 테스트 실행에 든 비용은 단 1센트에 불과했습니다.

요약하자면 다음과 같습니다. 저는 Claude Code(코드 에이전트 역할)를 Waterwheel(브라우저 테스트 에이전트 역할)과 연결하여, 하나는 기능을 구현하고 다른 하나는 이를 자율적으로 검증하도록 만들었습니다. 테스트는 단순한 Markdown 파일로 작성됩니다. 테스트가 실패하면 코드 에이전트가 실패 내용을 읽고, 버그를 수정하고, 다시 실행합니다. 그 사이에 인간은 없습니다. 저는 빌드-테스트-수정(build-test-fix) 루프 동안 키보드에 손도 대지 않고 이 방식으로 완전한 사용자 인증 기능을 배포했습니다.

이 포스트의 나머지 부분에서는 이것이 어떻게 작동하는지, 그리고 어떻게 직접 전체 과정을 실행할 수 있는지에 대해 자세히 설명합니다.

바이브 코딩(Vibe Coding)의 문제점

AI 코딩 에이전트는 코드를 작성하는 데 놀라울 정도로 능숙해졌습니다. 하지만 바이브 코딩(vibe coding) 워크플로우에는 아무도 말하지 않는 추악한 비밀이 있습니다. 바로 인간이 여전히 모든 QA(Quality Assurance, 품질 보증)를 수행하고 있다는 점입니다.

현재의 사이클은 다음과 같은 모습입니다:

Vibe coding cycle

여기에 너무 많은 인간이 개입되어 있습니다. 이는 단순히 지루한 작업일 뿐만 아니라, 진정한 병목 현상(bottleneck)이 되고 있습니다. AI 에이전트는 몇 분 만에 기능을 생성할 수 있습니다. 하지만 인간은 같은 속도로 이를 검증할 수 없습니다. AI 코딩 능력이 가속화됨에 따라, 수동 QA 단계는 단순한 번거로움을 넘어 전체 워크플로우를 망가뜨리는 요소가 되고 있습니다.

더 나은 방법이 있어야만 했습니다.

제안: 새로운 패러다임으로서의 테스트 주도 개발(TDD)

해결책은 인간을 더 빠르게 만드는 것이 아닙니다. 적어도 검증 단계에서만큼은 루프에서 인간을 완전히 제거하는 것입니다.

저는 AI 지원 코딩 (AI-assisted coding)을 위한 새로운 개발 패러다임으로 테스트 주도 개발 (TDD)을 채택할 것을 제안합니다. 코드 작성 전에 단위 테스트 (unit tests)를 작성하는 전통적인 의미의 TDD가 아니라, 엔드 투 엔드 (end-to-end) 철학으로서의 TDD입니다. 즉, 단 한 줄의 코드를 쓰기 전에 무엇이 "완료"된 상태인지를 정의한 다음, 구현부터 검증까지 모든 과정을 에이전트 (agents)가 처리하도록 하는 것입니다.

대신 다음과 같은 사이클이 이루어집니다:

TDD cycle

이 새로운 모델에서 인간은 요구 사항 (requirements)과 테스트 케이스 (test cases)를 정의하기 위해 시작 단계에 참여한 후, 그 뒤로는 물러나 있습니다.

이 접근 방식은 AI 주도 개발 (AI-driven development)을 괴롭히는 확장성 (scalability) 문제도 해결합니다. AI는 잘 정의된 작업을 구현하는 데 있어 인간을 앞지르지만, 현재 작업에만 집중하는 좁은 시야 때문에 기존 기능을 망가뜨리는 경우가 종종 발생합니다. TDD 흐름을 따르면, 기능과 버전에 걸쳐 정의된 모든 테스트 케이스를 축적하는 것만으로 자동 회귀 테스트 (automated regression testing)를 달성할 수 있습니다. 만약 어떤 테스트라도 깨진다면, 팀은 AI가 즉시 이를 수정하도록 강제할 수 있습니다. 기능 설계와 외부 버그 보고를 통해 생성된 테스트 케이스가 잘 정리되어 있기만 하다면, 제품의 복잡성이 증가하더라도 인간 팀을 확장할 필요가 없습니다.

TDD production diagram

잘 관리된 테스트 축적 프로세스를 통해, TDD는 제품 제작을 위한 기술적 장벽을 크게 낮춥니다. 미래에는 자신의 비전을 평문 (plain text)으로 설명할 수 있는 사람이라면 누구나 실제 문제를 해결하는 훌륭한 제품을 만들 수 있을 것입니다.

데모: 실제 프로젝트, 인간의 개입 제로

이것이 실제로 작동함을 증명하기 위해, 저는 두 가지 에이전트를 결합한 데모 프로젝트를 구축했습니다:

  • Claude Code — 코드 에이전트 (code agent) 역할을 수행하며, 구현 및 버그 수정 (bug fixes)을 담당합니다.
  • Waterwheel Test Agent — 자동화 에이전트 (automation agent) 역할을 수행하며, 브라우저 기반 테스트 실행 및 결과 보고를 담당합니다.

이 프로젝트는 Spring Boot 웹 애플리케이션을 위한 기본적인 사용자 인증 기능을 구현합니다. 전체 소스 코드는 GitHub에 있으며, initial_structure 브랜치에는 설계 요구사항과 에이전트 지침(모두 일반 텍스트 형식)과 같은 시작 자료만 포함되어 있어, 여러분이 전체 과정을 직접 시도해 볼 수 있습니다.

실제 에이전트 간의 핸드오프 (handoff) 과정은 다음과 같습니다:

  1. Claude Code가 기능 코드를 생성합니다.
  2. Claude Code가 Waterwheel 에이전트에게 사전 정의된 테스트를 실행하도록 지시합니다.
  3. Waterwheel 에이전트가 두 테스트를 모두 실행합니다.
  4. Waterwheel 에이전트가 결과를 다시 보고합니다.
  5. Claude Code가 결과를 읽습니다. 모든 테스트를 통과하면 작업을 완료로 표시하고, 그렇지 않으면 실패 원인을 파악하여 1단계로 다시 돌아갑니다.

1단계와 5단계 사이에서 인간은 키보드에 손을 대지 않았습니다.

에이전트들이 연결되는 방식

이 방식이 작동하게 만드는 핵심은 각 에이전트에게 명확하게 정의된 역할과 적절한 지침을 부여하는 것입니다.

Claude Code의 역할

Claude Code는 세 가지 커스텀 스킬 (custom skills)을 정의하는 CLAUDE.md 파일과 함께 초기화됩니다:

  • QA 환경 확인 (Confirm QA Environment) — 테스트를 실행하기 전에 테스트 환경이 준비되었는지 확인합니다.
  • 기능 수락 테스트 (Feature Acceptance Test) — 테스트 실행을 Waterwheel 에이전트에게 위임하고 결과를 읽습니다.
  • 기능 디버그 (Feature Debug) — 테스트 실패 시 내부 버그 수정 루프 (bug-fix loop)를 트리거합니다.

이러한 스킬들이 자율적인 내부 루프 (autonomous inner loop)를 가능하게 합니다. 테스트가 실패했을 때, Claude Code는 인간에게 무엇을 해야 할지 묻지 않습니다. 대신 Feature Debug 스킬을 사용하여 버그를 수정하고, 다시 수락 테스트를 트리거합니다.

Waterwheel Agent의 역할

Waterwheel 에이전트는 프로젝트의 테스트 폴더에 맞춰 구성된 Docker 컨테이너로 실행됩니다. 볼륨 매핑 (volume mappings)은 프로젝트 구조를 직접 가리킵니다:

  • /tests → 에이전트의 작업 입력 폴더 (읽기 전용)
  • /outputs → 테스트 결과가 기록되는 곳 (읽기/쓰기)
  • /waterwheel-instructions → 에이전트 지침 및 권한

두 개의 체인된 (chained) 테스트 파일이 수락 기준 (acceptance criteria)을 정의합니다. 첫 번째 테스트는 사용자 등록 및 로그인을 처리합니다. 두 번째 테스트는 첫 번째 테스트의 성공 여부에 의존합니다. 즉, 등록 기능이 고장 나면 로그인 테스트는 오해를 불러일으킬 수 있는 실패를 생성하는 대신 자동으로 건너뜁니다.

에이전트는 AI 제공업체로 DeepSeek을 사용하도록 구성되었으며, 이는 단순한 브라우저 자동화 (browser automation) 작업에서 신뢰성을 희생하지 않으면서도 비용을 낮게 유지합니다.

결과

두 에이전트 모두 인간의 개입 없이 전체 기능 개발 및 테스트를 완료했습니다. Feature Acceptance Test (기능 수락 테스트)가 성공했기 때문에, Feature Debug (기능 디버깅)는 발생하지 않았습니다.

Demo process sequence

Claude Code의 출력 결과는 모든 작업이 성공적으로 완료되었음을 확인했으며, 최종 애플리케이션은 사용자 인증 기능이 작동하는 상태로 http://localhost:8080에서 실행됩니다.

Run result

한 번의 완전한 테스트 실행을 위해 Waterwheel 에이전트가 누적한 총 비용은 $0.01입니다.

오타가 아닙니다. 단 1센트 — 웹 브라우저를 통한 모든 지루한 수동 검증을 대체하기에 충분한 금액입니다.

Cost proof

이것이 중요한 이유

이 데모는 의도적으로 작게 설계되었습니다 — 하나의 기능, 두 개의 테스트, 한 명의 개발자. 하지만 그 함의는 확장됩니다.

하루에 여러 기능을 출시하는 팀에게 이것이 무엇을 의미하는지 생각해 보십시오. 모든 기능은 다음과 같은 과정을 거칩니다:

  • 설계 시점에 사람이 한 번 정의한 테스트 케이스 (Test cases)
  • 코드 에이전트 (Code agent)에 의한 자동 구현
  • 테스트 에이전트 (Test agent)에 의한 자동 검증
  • 긴밀한 루프 (Tight loop) 내에서의 자동 버그 수정
  • 머지 (Merge) 전 자동 회귀 테스트 (Regression)

인간의 역할은 설계와 요구사항 정의로 완전히 전환됩니다. 현재 QA 엔지니어의 시간을 가장 많이 소비하는 부분인 실행 루프 (Execution loop)는 완전히 자율화됩니다.

또한 Waterwheel 에이전트는 Docker 이미지로 패키징되어 있으므로, 회귀 테스트 (Regression tests)만 갖춰져 있다면 기존의 어떤 CI/CD 파이프라인에도 끼워 넣어 마지막 버그 수정 루프를 완성할 수 있습니다.

이것은 소프트웨어 개발의 미래가 아닙니다. 이 데모를 바탕으로 볼 때, 오늘날 이미 가능한 일입니다.

직접 시도해 보세요

데모 프로젝트는 오픈 소스입니다. initial_structure 브랜치를 확인하고, README의 설정 지침을 따른 다음 전체 프로세스를 직접 실행해 보세요. 다음 항목들이 필요합니다:

  • Claude Code (코드 에이전트용)
  • Waterwheel 에이전트 Docker 이미지 — 무료이며 waterwheel.duotail.com에서 이용 가능
  • Mac용 Docker Desktop
  • AI API 키

전체 설정에는 약 15분이 소요됩니다. 그 이후부터는 에이전트들이 알아서 처리합니다.

질문이 있거나 결과를 공유하고 싶으신가요? Discord에서 저를 찾아주세요.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0