본문으로 건너뛰기

QA 파이프라인 01. 88개 QA 항목을 자동화한 멀티에이전트 파이프라인

·12 min read·1 / 1

개요

ADV(광고주) + Admin(플랫폼 관리자) 88개 QA 항목을 처리하는 자동화 파이프라인을 구축하고, 이를 재사용 가능한 /qa 스킬(qa-workflow)로 정립했다. 동시에 실제 QA 작업을 해당 스킬로 수행하며 파이프라인을 검증했다.

핵심 흐름: Slack List → CSV 내보내기 → Claude Code /qa → 코드 자동 수정

배경

QA 항목은 슬랙의 List 기능으로 관리된다. 슬랙 List에서 CSV로 내보내기를 하면 번호, 앱, 페이지 위치, 제목, 이슈 유형, as-is, to-be 형식의 파일이 생성된다. 기존에는 이 시트를 보며 항목을 수동으로 분류하고 하나씩 수정했다. 88개 항목을 수동 처리하면 수십 시간이 소요되고, 항목 누락·중복 수정 위험이 컸다. 이를 Claude Code의 멀티에이전트 기능으로 자동화하기로 했다.

파이프라인 아키텍처

Slack List (QA 항목 관리)
    ↓ [CSV 내보내기]
TARGET.csv  →  references/TARGET.csv 에 배치
    ↓ [csv_to_qa_list.py]
QA_LIST.md
    ↓ [분류: 작업 가능 / 수동 검증 필요]
    ├─ Phase A (Planner / sonnet) — 원인 분석 · 계획서 작성
    └─ Phase B (Generator / haiku) — 코드 수정 · type-check

generate_result.py
    ├─ {date}_QA_{APP}_RESULT.md  — 완수 내역
    └─ {date}_QA_REQUIRED_REPORT.md — 수동 검증 필요 항목

모델 라우팅

Phase모델이유
Phase A (Planner)sonnet복잡한 코드 추론, 영향 범위 파악
Phase B (Generator)haiku반복 실행, 속도·비용 우선
검증 (code-reviewer)opus정확한 diff 분석

스킬 진화 이력

v1.1.0 (초기)

  • CSV → QA_LIST.md 변환 자동화
  • 단일 에이전트 처리 (앱 구분 없음)
  • 결과 파일 저장 (generate_result.py)

v1.2.0 (이번 세션)

신규 추가 1: [사전-2] 워크트리 자동 생성

QA 에이전트가 메인 워킹트리에서 작업하면 다른 개발 작업과 충돌이 발생한다. 이를 해결하기 위해 /qa 실행 시 자동으로 격리된 git worktree를 생성한다.

WORKTREE_DATE=$(date +%Y%m%d-%H%M)
BRANCH_NAME="fix/qa-${WORKTREE_DATE}"
WORKTREE_PATH="$(pwd)/.worktrees/qa-${WORKTREE_DATE}"
git worktree add "$WORKTREE_PATH" -b "$BRANCH_NAME"

신규 추가 2: STEP 1.5 — 멀티앱 전략

앱이 2개 이상이면 단순 병렬 서브에이전트 대신 oh-my-claudecode:team을 사용한다. 팀 에이전트는 SendMessage로 서로 통신하고, TaskList/TaskUpdate로 작업 상태를 공유해 파일 충돌을 방지한다.

#1 [shared]  공유 코드 항목 처리    ← Lead가 직접 처리
#2 [ADV]     ADV 전용 항목 처리     blockedBy: [#1]
#3 [ADMIN]   ADMIN 전용 항목 처리   blockedBy: [#1]

신규 추가 3: STEP 4 — 워크트리 마무리

작업 완료 후 PR 생성, 머지+워크트리 제거, 나중에 처리 중 선택지를 안내한다.

실제 실행 결과 (2026-04-16)

ADV (광고주) — 53개 항목

구분건수
수정 완료32건
이미 구현됨 / 스킵2건
수동 검증 필요19건

주요 수정 내역:

항목내용
#7로고 130px → 117px
#12광고비 라벨 14px → 12px
#14마케터 공개 범위 도움말 아이콘 제거
#15/#35에디터 높이 620px 고정, max-width 제거
#16비밀번호 체크리스트 에러 시 숨김 처리
#19FIXME:N → 예산 기반 최대 수량 계산
#20단가 조정 다이얼로그 입력 필드 width 고정
#22예산 0원 시 다음 버튼 토스트 노출
#23보유 크레딧 0원 시 사용 크레딧 음수 방지
#43step-indicator border border.basic.4grey.3
#45로그인 에러 문구 중복 제거
#46광고 목록 테이블 컬럼 width 고정
#48LNB 고객센터 영역 CSS transition 반응형
#54GNB 드롭다운 알림설정/회원정보 라우팅 수정
#55광고 유형 선택 모달 미선택 상태로 초기화
#56가이드 요청 후 다이얼로그 닫기 시 에러 초기화
#57모달 높이 80vh → 90vh
#58라디오 버튼 focus ring 제거
#59LNB 2Depth 메뉴 font-weight caption1 적용
#60상단 탭 sticky 고정
#61느낌표 아이콘 커서 ?pointer
#62batch detail dialog gap 12px → 20px
#63토스트 위치 상단 110px 고정
#65고객센터 번호 tel: 링크 변환
#73문의 내용 최대 1,000자 제한
#75/#76담당자 정보 저장 반영 및 버튼 활성화 조건 수정
#79회원가입 휴대전화 하이픈 자동 생성
#84이미지 비율 검증 제거, 5MB 크기 검증 유지
#87광고 등록 입력 필드 autoComplete="off"

Admin (플랫폼 관리자) — 35개 항목

구분건수
수정 완료1건
이미 처리됨14건
수동 검증 필요20건

주요 수정 내역:

항목내용
#81연락처 formatPhoneNumber 일괄 적용 (11개 파일)

이미 처리됨 확인 항목: #9 (category-table th border), #11 (진행 기간 줄바꿈), #29 (REVIEWING 상태 필터링), #30 (썸네일 40px), #32 (환불 워딩), #42 (AmountInput 콤마), #47 (띄어쓰기), #49 (토글 아웃라인), #50 (빈 데이터 안내), #51 (취소 후 초기화), #52 (권한 기본값), #70 (LNB border), #85/#86 (카테고리 에러 메시지)

검증 프로세스

type-check

두 앱 모두 타입 에러 없이 통과했다.

pnpm --filter kodeflo-adv-next type-check   # exit 0
pnpm --filter kodeflo-admin-next type-check  # exit 0

코드-작업내용 일치 검증 (code-reviewer 에이전트)

총 29개 항목 spot-check를 진행했다. ADV 커밋 17항목, ADV 미커밋 7항목, Admin 미커밋 5항목 모두 실제 diff를 읽고 보고 내용과 대조했으며, 불일치 0건이었다.

발생한 이슈 및 해결

이슈 1: 에이전트 advisor 과호출로 토큰 소진

Admin QA 에이전트가 코드 수정 없이 토큰을 소진하고 종료됐다. advisor 호출이 너무 많아 실제 구현 단계에 도달하지 못한 것이 원인이었다. 재실행 프롬프트에 advisor 호출 절대 금지를 명시해 해결했고, 스킬에 "advisor 호출 최소화" 가이드 추가를 검토하기로 했다.

이슈 2: 에이전트가 Marketer 페이지 metadata 삭제

Admin QA 에이전트가 범위 외인 apps/marketer/ 파일을 수정했다. 에이전트가 "불필요한 코드 제거" 차원에서 개별 metadata를 삭제한 것이 원인이었다. "QA 전 사용자 작업 덮어씌움 여부" 검증 단계에서 발견했고, git checkout HEAD -- apps/marketer/src/app/으로 복원 후 의도에 맞게 재처리했다. QA 에이전트 프롬프트에 "자신의 앱 범위 외 파일 절대 수정 금지" 명시가 필요하다는 교훈을 얻었다.

이슈 3: 에이전트가 자동 커밋 생성

ADV QA 에이전트가 CLAUDE.md 자동커밋 금지 규칙을 어기고 커밋을 생성했다. 에이전트 프롬프트에 커밋 금지 규칙이 명시되지 않은 것이 원인이었다. 커밋 내용 자체는 정상이라 그대로 유지했고, 스킬 v1.2.0에서 worker 프롬프트에 "자동 커밋 금지" 명시를 완료했다.

이슈 4: 워크트리 미분리로 인한 작업 간섭

QA 에이전트가 메인 워킹트리에서 작업해 다른 개발 작업을 방해했다. 스킬 v1.2.0에서 [사전-2] 워크트리 자동 생성 단계를 추가해 해결했다.

커밋 히스토리 (이번 세션)

86fcf02 chore(marketer): 페이지별 metadata 제거 — 루트 레이아웃 기본값 사용
ece10c3 fix(adv): QA — step-indicator, 이미지 검증, 자동완성, LNB 반응형 등
e9f7efd fix(admin): QA — 전화번호 formatPhoneNumber 적용 및 테이블 UI 수정
c1f2931 fix(adv): new-ad-register — 상품 이미지 파일 크기 및 비율 검증
cf23aeb fix(adv): ad-management/list/[id] — 단가 조정 다이얼로그 width 고정
40e4843 fix(adv): 마이페이지/고객관리/퍼포먼스/로그인 버그 수정
43c7cd6 fix(adv): cpa-participation — sticky, badge 색상, tel 링크
c8e0355 fix(adv): new-ad-register — 광고비 설정 UI, 수량 계산, 예산 검증
3682e46 fix(adv): ad-management/list — 테이블 컬럼 width 고정
e6ed2e4 fix(adv): inquiry — 1,000자 제한 및 에러 초기화
2ffbfa4 fix(adv): 공통 UI — radio/toaster/editor/header/lnb 수정
946901d fix(adv): QA — 공통 UI 버그 수정
deb296c fix(adv): QA — 광고 등록 관련 버그 수정

수동 검증 필요 항목 (전체)

상세 내역은 2026-04-16_QA_REQUIRED_REPORT.md 참조.

주요 분류:

  • 서버/API 이슈: #5, #10, #24, #26, #27, #36, #37, #39, #41, #67, #71, #74, #88
  • 재현 조건 불명확: #3, #4, #17, #21, #38, #53, #77
  • Figma 시안 직접 확인: #1, #8, #66, #69, #82, #83
  • 기획 논의 필요: #68

다음 액션

  • fix/qa-adv-admin 브랜치 PR 생성
  • 수동 검증 필요 항목 (#5, #10 등) 백엔드팀 전달
  • Figma 확인 필요 항목 (#1, #8 등) 디자이너 확인 요청
  • 다음 QA 시트 수령 시 /qa 커맨드로 파이프라인 재실행