9강

테스트·린트 자동 루프 구성

4 조회 3

Claude Code가 테스트 실패를 자동 감지·수정하고, 린트 오류를 반복 해결하는 자동 루프(Read-Plan-Fix-Verify) 구성 방법.

테스트·린트 자동 루프 — 오류 없을 때까지 반복하기

개발에서 가장 반복적인 작업 중 하나가 "코드 수정 → 테스트 실행 → 실패 확인 → 수정 → 재실행"의 사이클입니다. 이 루프를 Claude Code에게 맡기면 사람은 초기 목표 설정최종 검토만 담당하고 중간 반복 과정은 자동화됩니다. 2024년 Anthropic 연구에 따르면 이 방식으로 테스트 통과 시간이 평균 67% 단축되었습니다.

테스트 자동 루프 기본 패턴

claude -p "
  목표: 모든 테스트를 통과시킬 것

  절차:
  1. npm run test 실행
  2. 실패한 테스트 분석
  3. 원인 파악 후 코드 수정
  4. 다시 npm run test 실행
  5. 모든 테스트 통과 시 완료, 실패 시 2로 돌아가
  6. 10번 반복 후에도 실패하면 실패 원인 요약 후 종료

  제약: 테스트 코드 자체는 수정하지 말 것 (구현 코드만 수정)
" \
  --allowedTools "Read,Edit,Bash(npm run test*),Glob,Grep" \
  --output-format stream-json

"테스트 코드 자체는 수정하지 말 것" 제약이 중요합니다. 이 지시 없이는 Claude가 테스트 기대값을 바꿔 통과시키는 우회책을 선택할 수 있습니다.

린트 자동 수정 루프

claude -p "
  ESLint 오류를 모두 수정해줘.

  1. npm run lint 2>&1 실행해서 오류 목록 파악
  2. 파일별로 오류 분류 (unused vars / any타입 / missing deps 등)
  3. 각 파일 열어서 해당 오류만 수정 (다른 코드 변경 금지)
  4. npm run lint 재실행
  5. 오류 0개 확인 시 완료
  6. 자동 수정 불가한 오류(디자인 결정 필요)는 목록으로 보고 후 종료
" \
  --allowedTools "Read,Edit,Bash(npm run lint*),Glob,Grep"

타입 체크 + 빌드 전체 통과 루프

claude -p "
  다음 순서로 코드 품질을 완전히 확보해줘:

  단계 1 — TypeScript 타입 오류 수정
    npx tsc --noEmit 실행 → 오류 수정 → 재실행 → 오류 0개

  단계 2 — ESLint 오류 수정
    npm run lint 실행 → 오류 수정 → 재실행 → 오류 0개

  단계 3 — 빌드 통과
    npm run build 실행 → 빌드 오류 수정 → 재실행 → 성공

  각 단계 완료 시 '✅ 단계 N 완료'를 출력하고 다음 단계 진행.
  수정 불가한 오류는 건너뛰고 목록 기록.
  최종 요약: 수정된 파일 수, 남은 오류 목록.
" \
  --allowedTools "Read,Edit,Glob,Grep,Bash(npx tsc*),Bash(npm run*)"

Watch 모드와 Hooks 조합

파일 저장 시마다 자동으로 테스트를 실행하는 Watch 루프입니다. 개발 중 실시간 피드백을 원할 때 사용합니다.

# 터미널 1: Claude Code 편집 작업
claude "UserCard 컴포넌트에 로딩 스켈레톤 추가해줘"

# 터미널 2: Jest Watch 모드 (별도 실행)
npm run test -- --watch --testPathPattern="UserCard"

# 또는 Hooks로 통합
# .claude/settings.json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "if [[ '$FILE' == *.test.ts || '$FILE' == *.test.tsx ]]; then npx jest '$FILE' --passWithNoTests 2>&1 | tail -5; fi"
          }
        ]
      }
    ]
  }
}

테스트 생성 → 구현 TDD 루프

테스트를 먼저 작성하고 통과할 구현을 만드는 TDD 방식도 자동화할 수 있습니다.

claude -p "
  formatCurrency(amount, currency) 유틸리티 함수를 TDD로 구현해줘.

  1. __tests__/formatCurrency.test.ts 먼저 작성
     - USD: '$1,234.56' 형식
     - KRW: '₩1,234' 형식 (소수점 없음)
     - EUR: '€1,234.56' 형식
     - 음수, 0, 매우 큰 수 엣지 케이스

  2. 테스트 실행 → 실패 확인 (Red)

  3. utils/formatCurrency.ts 구현
     - Intl.NumberFormat 사용
     - TypeScript 타입 완전 명시

  4. 테스트 실행 → 통과 확인 (Green)

  5. 중복 제거·가독성 개선 리팩토링 (Refactor)
     리팩토링 후 테스트 여전히 통과 확인
" \
  --allowedTools "Read,Write,Edit,Bash(npx jest*),Glob"

CI 실패 자동 수정 패턴

#!/bin/bash
# CI 로그를 파싱해서 Claude에게 수정 요청
CI_LOG=$(cat ci-failure.log)

claude -p "
  다음 CI 실패 로그를 분석하고 원인을 수정해줘.

  실패 로그:
  $CI_LOG

  제약:
  - 테스트 기대값 변경 금지
  - 린트 규칙 비활성화(@eslint-disable) 금지
  - 타입 단언(as any) 추가 금지

  수정 후 로컬에서 동일 명령 재실행해서 통과 확인.
" \
  --allowedTools "Read,Edit,Glob,Grep,Bash(npm run*),Bash(npx*)"
자동 루프에서 가장 중요한 설계 결정은 "무엇을 바꾸면 안 되는가"를 명시하는 것입니다. 제약 없이 "테스트를 통과시켜줘"라고 하면 Claude는 가장 쉬운 방법(테스트 삭제, 기대값 변경)을 선택할 수 있습니다. 좋은 자동화 프롬프트는 목표만큼 제약도 명확합니다.

핵심 정리

  • 테스트 루프 프롬프트에 "테스트 코드 수정 금지" 제약 필수 — 목표(통과)만큼 제약(방법 제한)이 품질을 결정
  • 단계별 순서(타입 체크 → 린트 → 빌드) 명시로 의존성 오류 방지 — 중간 완료 시 체크포인트 출력해 진행 상황 추적
  • Hooks + PostToolUse로 파일 저장마다 관련 테스트 자동 실행 — 개발 중 실시간 피드백 루프 구성

관련 검색어  ·  클로드 코드  ·  Claude Code  ·  테스트 자동화  ·  린트 자동 루프  ·  Jest 자동화  ·  TDD 자동화  ·  자동 테스트 통과

채용정보
공지사항
인사이트
MY