Case 08 · Technical Retrospective

TC 자동화 발전 기술 회고

LLM이 TC를 잘 쓰게 만든 과정이 아니라, LLM이 틀려도 제품 범위·실행 차수·검증 결과·산출물이 망가지지 않도록 통제 구조를 만든 과정입니다.

Claude Code, 사용자 매뉴얼, 릴리즈 노트와 Excel만 있던 제로베이스에서 시작해 문서 evidence, 요구사항 분해, YAML TC, run/Jira, 제품별 웹 인스턴스, cache invalidation과 Excel 2013 최종 검증까지 발전한 과정을 실패 중심으로 정리했습니다.

공개 페이지에는 고객사명, 내부 URL, 계정, Jira 키, 실제 장비 식별자와 원문 데이터를 싣지 않았습니다. 내부 commit은 감사 가능한 짧은 식별자와 일반화한 의미만 제공합니다.
01 · 1-page Summary

처음의 자동 작성에서 현재의 통제된 운영 플랫폼까지

실패할 때마다 문장을 다시 쓰는 대신, 그 실패를 더 앞 단계에서 잡는 schema, validator, 상태 모델 또는 운영 Gate로 바꿨습니다.

출발점

Claude Code가 문서와 Excel을 직접 읽고 쓰는 단일 흐름이었습니다. 문서 권위, TC schema, 실행 이력과 검증 자동화가 없었습니다.

핵심 전환

정답을 더 잘 생성하는 문제를 떠나, 근거 분류, 제품 범위, 상태 전이, run snapshot과 재조회 검증을 설계했습니다.

현재 완료 정의

YAML quality, 테스트, 웹 revision 재조회, Jira reread와 Excel 2013 실제 열기까지 통과해야 산출물이 완료됩니다.

단계이전 방식전환점새 통제 장치
1. 문서 읽기문단 중심 요약화면과 초기 설정 절차 누락렌더링 이미지 검토, 화면 단위 pre-chunk, coverage matrix
2. TC 세분화기능 하나를 TC 하나로 작성열기·조회·재조회는 서로 다른 실패를 검출상태 전이와 관찰 지점별 독립 TC
3. 데이터 구조화Markdown/Excel이 원본정의와 결과가 섞여 재생성 불가정책 YAML, TC·dataset·suite·run 분리
4. 실행 차수매 차수 Excel 복사이전 FAIL과 변경 TC 의미 소실run snapshot, inheritance, PENDING, Not Run, retired
5. Jira사람이 상태 재입력Closed 이슈 PASS 반영 누락Fix Version 전수 대조, ETag PUT, reread verify
6. 웹 운영읽기 전용 catalog파일 변경 후 프로세스 cache가 과거 TC 노출explicit invalidate, watcher, LKG, stale 가시성
7. 산출물생성 성공을 완료로 간주office 앱별 색상·수식·레이아웃 차이구조 검사 후 Excel 2013 final-open Gate
8. 다제품공통 기능과 제품 자산 혼재존재하지 않는 제품 기능이 TC에 포함제품별 branch/root/instance, 공통 runtime만 승격
9. Claude작성 결과를 바로 신뢰근거 없는 귀인과 긴 중간 출력sanitized read-only review와 local disposition
02 · Current Architecture

문서/기획서 → 요구사항 분해 → YAML TC → run/Jira → 웹 → Excel

사람의 판단이 필요한 Evidence Gate를 가운데 두고, 정의·실행·운영·출력을 각각 별도 책임으로 나눴습니다.

flowchart LR
  A["문서 / 기획서 / 화면 증거"] --> B["요구사항 분해<br/>Q&A Evidence Gate"]
  B -->|confirmed| D["YAML TC<br/>정적 Validator"]
  B -->|unresolved| H["사람 확인"]
  H --> B
  D --> F["Run Snapshot<br/>Jira 상태 동기화"]
  F --> W["웹 실행 / 편집<br/>Cache consistency"]
  W --> X["Excel 생성<br/>Excel 2013 검증"]
          
  • 입력 근거층: 매뉴얼, 릴리즈 노트, 스크린샷, 코드·심볼의 읽기 전용 증거, 사용자 정정
  • 해석층: 기능·상태·전이와 정상·예외·경계를 분해하고 주장을 네 가지 evidence 상태로 분류
  • 정의층: 정책과 YAML TC가 권위 원본이며 precondition, dataset, suite와 lifecycle을 별도 소유
  • 실행층: run이 활성 TC를 snapshot하고 Jira, 승계 결과, 미확인 FAIL과 Not Run을 관리
  • 운영층: 제품별 웹이 ETag, atomic write, cache invalidation, last-known-good를 적용
  • 출력층: Markdown/웹은 검토용, Excel은 명시 요청 뒤 최종 앱 검증까지 통과해야 완료
03 · Evidence Timeline

증거 연표와 수행 내용

사용자의 정정이 어떤 즉시 수정으로 끝났고, 다시 같은 문제가 생기지 않도록 무엇을 자산화했는지 연결했습니다.

2026-06-30

문서 구조와 화면 경계 확립

관찰: 4~6개 화면 묶음에 의미가 섞였고 초기 설정, 장비 등록과 모델 선택이 빠졌습니다.

조치: DOCX 100쪽을 렌더링하고 이미지와 본문을 함께 대조해 하위 화면별 pre-chunk로 재분할했습니다.

2026-07-01

기능 목록에서 상태 전이 TC로

관찰: 단일 모델도 기본 열기, 올바른 조회, 조건 변경 후 데이터 혼입이 서로 다른 위험이었습니다.

조치: 모든 보고서의 단일 모델 baseline을 세 TC로 분리했습니다.

2026-07-03~10

첫 릴리즈 전체 회귀와 WPF edge case

관찰: WPF 창을 유지한 연속 조회와 export가 사용자 경험에 치명적인 회귀 표면이었습니다.

조치: 비동기 완료 역전, 0건, 오류·취소, 반복 조회, 창 재오픈과 정렬·필터 export를 추가했습니다.

2026-07-13~14

화면 snapshot export와 웹 write 계약

관찰: 정렬한 화면 대신 source를 재조회한 파일이 생성됐고, batch 누적 의미도 초기 해석과 달랐습니다.

조치: visible snapshot 계약, run 결과 모델, ETag, explicit invalidate, 직접 편집과 파일 기반 정적 token을 구현했습니다.

2026-07-23~25

run lifecycle과 Jira reconciliation

관찰: 같은 Fix Version의 새 차수에서 과거 결과와 변경 TC를 구별할 수 없었습니다.

조치: 결과 승계, PENDING, Not Run, retired 보존과 Jira 전수 대조, 불완전한 제안의 mutation 전 복구를 적용했습니다.

2026-07-27

기능 경계 재분할과 검색 자산화

관찰: 11개 묶음 변경점이 실제 기능과 회귀 영향 경계를 숨겼습니다.

조치: 29개 기능 경계, 203 TC, 47 dataset과 한국어·영어·중국어·일본어 검색 별칭으로 보강했습니다.

2026-07-28~08-14

Claude의 역할을 reviewer로 재배치

관찰: 무응답처럼 보이는 긴 실행, 중간 JSON 소모와 잘못된 기준선 귀인이 있었습니다.

조치: 20~30분 wait, 최종 텍스트만 수집, sanitized read-only packet과 base/head 검증을 의무화했습니다.

2026-08-13~18

공통 후처리와 제품 경계 강화

관찰: Jira Closed FAIL의 PASS 후처리가 빠졌고 고객사 전용 제품에 비대상 모듈 TC가 섞였습니다.

조치: 공통 Jira 조회-판정-PUT-재조회 모듈, Excel 2013 Gate와 제품 scope lock을 도입했습니다.

04 · Failure Response

실패 대응표

실수의 영향, 실제 탐지 신호와 재발 방지 장치를 같은 행에 두었습니다. 수정 결과보다 탐지 가능성과 통제 위치가 중요했습니다.

실수영향탐지 방법재발 방지 장치
화면 4~6개를 한 청크로 묶음검색과 TC에 여러 기능 목적이 섞임heading과 렌더링 화면의 목적 대조하위 화면 단위 pre-chunk boundary
초기 설정·장비 등록·모델 선택 누락신규 QA가 시작 상태를 만들 수 없음원문 heading, image inventory, 생성 index 양방향 비교source-to-chunk coverage matrix
단일 모델을 TC 하나로 처리재조회 데이터 혼입을 놓침창을 유지한 조건 변경 재조회open·query·reload-mix 독립 baseline
WPF 정상 경로만 검증이전 async 응답이 최신 화면을 덮음빠른 연속 조회, 0건, 오류, 취소, 재오픈latest-result-wins와 old-data non-mix 기대 결과
export가 화면 대신 source 재조회사용자 정렬과 파일 순서 불일치같은 시점의 화면 행·순서와 파일 비교visible snapshot export와 source mutation TC
누적 batch 의미 오해차수별 기대 건수 오류실제 업무 규칙과 batch별 파일 비교명시적 기대식과 정정의 정책 승격
웹 process cache가 과거 TC 유지오래된 목록으로 검증 수행file revision, loaded time, API count 비교explicit invalidate, watcher, stale와 LKG
Jira Closed인데 FAIL 유지차수 결과와 결함 현황 불일치Fix Version key와 run key 합집합 대조상태 정책, ETag PUT, 저장 후 reread
Excel 생성 성공만 확인색상·수식·유효성 검사 파손최종 앱으로 두 sheet 시각 검토구조 검사 + Excel 2013 final-open Gate
유사 제품에서 기능 범위 상속비대상 모듈·장비 전제 혼입제품 근거와 금지 용어 검색product/branch/root lock과 validator
과거 package path/date 승계잘못된 설치 파일과 차수 사용재귀 탐색 결과와 파일명 날짜 비교release별 source declaration
계정 체계를 먼저 과설계Excel보다 불편한 도구가 됨사용자 수와 기존 업무 흐름 검토파일 기반 정적 token, HR 연동 연기
Claude finding을 즉시 사실화기존 문제를 새 회귀로 오판정확한 base/head semantic difflocal validation과 disposition 기록
중간 JSON·추론 stream 수집컨텍스트 소진과 판단 흐림출력량과 timeout 관찰20~30분 wait, 최종 텍스트만 수집
05 · Technical Retrospective

실수를 더 앞 단계에서 잡는 구조로 옮겼습니다

프롬프트를 반복 수정하는 대신 입력, 상태, 저장, 실행, 출력의 책임 경계를 세분화했습니다.

01

첫 실패는 LLM의 문장력이 아니라 입력 경계였습니다.

이미지가 많은 DOCX는 텍스트만 읽어서 화면 순서와 초기 상태를 복원할 수 없었습니다. 여러 화면을 한 덩어리로 요약하면 검색에는 편해 보여도 실제 TC의 사전 조건과 성공 기준이 섞였습니다.

원본을 보존한 채 전체 문서를 렌더링하고 heading, page screenshot, embedded image inventory를 대조했습니다. 자동화의 첫 schema는 TC가 아니라 “무엇을 근거로 읽었는가”였습니다.

02

기능 목록을 상태 전이 모델로 바꿨습니다.

보고서가 열린다는 사실, 올바른 데이터가 조회된다는 사실, 조건을 바꿔도 이전 데이터가 남지 않는다는 사실은 서로 다른 품질 주장입니다. TC 수를 줄이는 것보다 한 TC가 한 가지 실패를 설명하게 하는 편이 실행과 결함 분류에 유리했습니다.

미조회 -> 조회 성공 -> 다른 조건 조회
조회 성공 -> 0건
조회 성공 -> 오류 -> 재시도 성공
요청 A 시작 -> 요청 B 시작 -> B 완료 -> A 늦은 완료
정렬/필터 -> export -> 화면과 파일 비교
창 유지 -> 닫기 -> 재오픈
03

Excel을 원본에서 projection으로 내렸습니다.

Excel 셀에 정의, 결과, Jira와 코멘트를 모두 넣으면 익숙하지만 재사용과 변경 추적이 어렵습니다. 정의를 YAML로 옮기고 precondition, dataset, change, suite, run을 분리했습니다.

  • 같은 TC를 여러 차수에서 재사용
  • 과거 FAIL과 후속 patch PASS를 별도 보존
  • 변경 TC만 PENDING으로 전환
  • retired TC의 이력 보존과 신규 run N/A projection
  • tester와 Jira comment를 reusable 정의에서 분리
04

웹은 보기 좋은 화면보다 상태 일관성이 먼저였습니다.

가장 위험한 문제는 파일 저장 성공 뒤 프로세스 메모리가 과거 catalog를 계속 제공하는 것이었습니다. 공통 runtime은 write 뒤 명시적으로 invalidate하고 watcher도 같은 coordinator를 호출합니다.

후보 catalog 검증이 실패하면 last-known-good를 유지하고 stale 여부와 revision을 노출합니다. “저장했다”가 아니라 “새 revision을 다시 읽었고 사용자 화면도 같은 값을 본다”가 완료입니다.

05

실행 차수와 Jira를 별도 상태 기계로 만들었습니다.

새 release와 새 run의 경계를 분리하고, run 생성 시점의 active TC를 snapshot합니다. Jira 상태는 TC 정의가 아니라 실행 증거입니다.

공통 후처리는 Fix Version 전체 issue를 대조하고 상태를 판정한 뒤, 각 write 직전 ETag를 확인하고 저장 후 재조회합니다. 이 단계가 빠지면 Closed 이슈가 계속 FAIL로 남거나 미실행 TC가 자동 PASS가 될 수 있습니다.

06

공통화와 제품 격리를 동시에 설계했습니다.

공통화 대상은 schema, validator, web runtime, Jira reconciliation과 Excel 규칙입니다. 제품별 release note, TC, dataset, run과 장비 전제는 공통화하지 않습니다.

제품 UI가 비슷하다는 사실은 기능 존재의 증거가 아닙니다. 비대상 모듈이 섞인 실제 오류 뒤에는 작업 시작 시 제품 범위를 잠그고 금지 용어를 검사하도록 바꿨습니다.

07

Claude를 작성자에서 독립 reviewer로 재배치했습니다.

Claude Code는 빠르게 구조를 만드는 데 유용했지만, 긴 실행에서 무응답처럼 보이거나 중간 JSON이 컨텍스트를 소진했고 기존 기준선 문제를 현재 변경 탓으로 잘못 귀인하기도 했습니다.

이후 제품·브랜치 경계, acceptance criteria, sanitized diff, 권위 문서와 검증 결과만 전달합니다. 최종 finding은 로컬에서 재확인하고 accepted, rejected, deferred disposition을 기록합니다.

현재의 목표는 “AI가 맞히는 비율”이 아니라 “AI가 틀려도 잘못된 TC·결과·산출물이 다음 단계로 통과하지 않는 비율”입니다.
06 · Evidence Appendix

근거 부록

상세 근거는 중앙 공개 정책에 따라 기본으로 접었습니다. 내부 추적에 필요한 범위만 익명화해 제공합니다.

주요 사용자 정정과 제도화 결과
사용자 정정 요지즉시 수정제도화된 장치
하위 화면 단위로 청킹청크를 화면별 재분할pre-chunk boundary 규칙
초기 설정·장비 등록·모델 선택 누락누락 chapter 추가source coverage matrix
단일 모델도 열기·조회·갱신 혼입 분리기본 TC 3분할report baseline pattern
다중 모델·월별·barcode·조건 변경 재조회variant와 WPF 예외 TC 추가state-transition checklist
내보내기는 현재 화면과 동일정렬·필터·batch snapshot 검증screen-to-file Gate
과거 TC 수는 process cache 문제instance reload와 수동 확인explicit invalidation과 stale/LKG
Closed Jira FAIL의 PASS 변경 누락결과 후처리공통 reconciliation과 reread verify
최종 XLSX는 Excel 2013으로 확인검증 앱 변경Excel 2013 final-open Gate
고객사 전용 제품의 비대상 모듈 제거잘못된 TC 삭제가 아닌 retire/정정product scope lock과 용어 검사
내부 commit 증거 식별자

짧은 SHA는 비공개 업무 저장소의 감사용 식별자입니다. 공개 GitHub에서 링크되지는 않으며 고객명과 Jira 키를 제거한 의미만 기록합니다.

SHA날짜공개 가능한 의미
7c44e152026-07-13회사 TC 표기 규칙을 policy와 validator로 고정
eea3c0a2026-07-14공통 TC 편집·추가·복제와 transactional write
3f9e2432026-07-23같은 릴리즈의 실행 결과 승계와 미확인 FAIL 가시화
7c58b002026-07-25불완전한 LLM 제안을 mutation 전에 복구·차단
c5568e82026-07-27기능 경계 재분할 뒤 203 TC와 다국어 검색 별칭 보강
5780674, 195ba1c2026-08-13제품 공통 Jira 상태 동기화와 재조회 검증
6d968b0, 23e4c582026-08-14Claude read-only review 정책과 권위 문서 진입점
d432cc52026-08-18고객사 전용 제품에서 비대상 모듈 TC 제거
검증 명령과 기록된 결과
pnpm tc:quality
pnpm test
pnpm test:e2e
pnpm assets:instances:audit
pnpm runs:jira:sync -- --project <PROJECT> --release <RELEASE> --run <RUN>
  • 기능 경계 재분할 milestone에서 203 TC, 47 dataset이 strict policy를 오류 0, 경고 0으로 통과했습니다.
  • 웹 authoring E2E는 데스크톱 1440x900의 edit, create, clone, ETag conflict, result save, stale와 recovery를 검증했고 browser error는 0이었습니다.
  • 다제품 audit는 각 instance의 project identity, definition/run validation과 stale=false를 함께 확인합니다.
  • Jira 동기화는 조회, 판정, ETag PUT, 재조회 비교가 모두 끝나야 성공입니다.
  • 회사 XLSX는 구조 검증 후 Excel 2013에서 repair/compatibility 경고, 수식, 색상, 유효성 검사, Jira와 빈 결과 셀을 확인합니다.

동기화된 Markdown 근거 원본 열기

07 · Claude Runbook

Claude가 읽고 같은 통제 순서로 작업하는 상세 런북

마지막 산출물은 설명문이 아니라 다음 에이전트가 제품 범위를 잠그고 Evidence Gate부터 검증까지 그대로 실행할 수 있는 운영 절차입니다.

Claude TC 자동화 상세 런북

Scope Lock, 필수 읽기 순서, evidence 분류, WPF 상태 매트릭스, run/Jira, cache invalidation, Excel Gate, stop condition과 handoff 형식을 포함합니다.

시작

제품, 저장소, branch, release, Fix Version, patch와 run을 잠근 뒤 ActiveDocs와 관련 권위 문서를 읽습니다.

작성

주장을 confirmed/inference/recommendation/unresolved로 분류하고 상태 전이, 예외와 경계 TC를 구성합니다.

완료

quality, tests, desktop E2E, cache revision reread, Jira reread와 최종 Excel 앱 검증을 증거로 남깁니다.