blevels

Home / AI / AI 바이브코딩 / 테스트 자동화 — AI가 짠 코드를 AI가 검증하는 구조

VIBE

테스트 자동화 — AI가 짠 코드를 AI가 검증하는 구조

게시일 2026-04-30수정일 2026-04-30
공식 링크
On this page

:::callout type=info 이 튜토리얼은 Claude Code 1.x / Vitest 1.x 기준입니다 (2026-04). 도구 업데이트 시 검토 필요. :::

AI가 코드를 생성하는 속도는 빠르다. 문제는 그 코드가 실제로 올바르게 동작하는지 확인하는 속도다. 테스트 작성을 사람이 직접 하면 AI의 생산성 이점이 절반으로 줄어든다. AI가 코드를 만들고, 같은 AI가 그 코드를 검증하는 테스트까지 작성하는 구조를 갖추면 사람의 리뷰 부담이 크게 줄어든다. 단, 생성과 검증 사이에 역할 분리가 있어야 한다는 조건이 붙는다.

AI 테스트 자동화의 작동 원리

핵심은 역할 분리다. 코드를 작성하는 AI와 그 코드를 검증하는 AI를 분리한다. 같은 컨텍스트 안에서 생성과 검증을 동시에 시키면 AI가 자신의 오류를 못 잡는 경향이 있다. 별도 명령으로 분리해서 검증 단계에 독립성을 준다.

흐름:

1. Claude Code가 기능 코드를 작성 2. "방금 작성한 코드에 대한 단위 테스트를 작성해라"로 테스트 생성 지시 3. npm test로 자동 실행 4. 실패 시 에러를 Claude에게 다시 보내 수정 반복

준비물

  • Claude Code CLI (최신 버전)
  • Node.js 20+
  • Vitest (또는 Jest)
  • 테스트 대상 코드
  • 예상 시간: 45분

1단계 — 테스트 환경 설정

npm install -D vitest

package.json에 테스트 스크립트를 추가한다.

{
  "scripts": {
    "test": "vitest run",
    "test:watch": "vitest"
  }
}
AD

2단계 — 기능 코드 작성 지시

Claude Code에게 기능 코드를 먼저 작성하게 한다.

Notion API에서 레코드를 가져와 날짜순으로 정렬하는
fetchSortedRecords 함수를 작성해라.
입력: databaseId (string), limit (number, 기본값 10)
출력: { id: string, title: string, createdAt: Date }[] 타입

3단계 — 테스트 코드 작성 지시

기능 코드가 완성되면 즉시 테스트 작성을 지시한다. 같은 세션에서 연속으로 요청한다.

방금 작성한 fetchSortedRecords 함수에 대한 Vitest 단위 테스트를 작성해라.
테스트 케이스:
1. 정상 응답 — 날짜순 정렬 검증
2. 빈 배열 반환 — 빈 데이터베이스 케이스
3. 네트워크 오류 — API 호출 실패 시 throw 검증
4. limit 파라미터 — limit=5일 때 최대 5개만 반환 검증

Notion API 호출은 vi.mock으로 모킹하되,
반환 타입은 실제 Notion API 응답 구조를 따라라.
AD

4단계 — 훅으로 자동 실행

코드 편집 후 테스트가 자동으로 실행되도록 PostToolUse 훅을 설정한다.

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "npm test -- --reporter=verbose 2>&1 | tail -20"
          }
        ]
      }
    ]
  }
}

이 훅이 설정되면 파일을 수정할 때마다 테스트가 자동으로 실행되고 결과가 출력된다. 테스트 실패를 실시간으로 감지할 수 있다.

5단계 — 실패 피드백 루프

테스트가 실패하면 에러 메시지를 그대로 Claude에게 붙여넣고 수정을 요청한다.

테스트 실패 결과:
[에러 메시지 전체 붙여넣기]

이 에러를 기반으로 fetchSortedRecords 함수를 수정해라.
테스트를 수정하지 말고 기능 코드만 수정해라.

이 루프를 반복하면 AI가 자신의 코드를 점진적으로 교정한다. 대부분의 경우 2~3회 안에 모든 테스트가 통과된다.

결과 확인

모든 테스트가 통과하면 다음 명령으로 커버리지를 확인한다.

npx vitest run --coverage

커버리지 80% 이상이 기준선이다. 커버리지가 낮은 함수가 있으면 Claude에게 추가 테스트 케이스를 요청한다.

다음 단계

단위 테스트가 안정화되면 통합 테스트로 확장한다. API 실제 호출, DB 조회, 외부 서비스 연동을 포함하는 E2E 시나리오를 Claude에게 작성하게 하고, GitHub Actions에서 자동 실행되도록 워크플로에 추가한다. 단위 테스트로 빠른 피드백을, 통합 테스트로 최종 안전망을 구성하는 것이 목표다.

관련 가이드: api-연동-자동화 / 훅-설정하기 / 에이전트-팀-구성

AD