Skip to content

개발 워크플로우

trz-21 edited this page Jun 13, 2026 · 2 revisions

Agent 개발 워크플로우 흐름.

GitHub Wiki에 올릴 문서. 내가 Claude Code(서브에이전트 포함)와 협업해서 이 프로젝트를 개발할 때 따르는 흐름. 기반 스킬: /task-with-harness 주요 포인트: 지속 가능한 코드퀄리티 유지, 최대한 사람이 직접 확인 필요한 부분을 배제, 과거 작업 기록을 선택적으로 활용할 수 있도록 문서 작성 엄밀하게

📌 문서화 정책 (현행): 작업 플랜은 GitHub Issue, 작업 로그는 PR 본문(Closes #N), 스펙 현황은 이 Wiki 에 둔다. 과거 로컬 모델(docs/plans/, docs/works/, specification/)은 이 모델로 대체됐다. 레포 내 규칙: .claude/github-workflow.md.


1. 전체 흐름 한눈에

[사용자: 이슈 등록 (gh issue create)]
     ↓
[Phase 1] 컨텍스트 로드          ← 메인 Claude (이슈 + Wiki + 코드)
     ↓
[Phase 2] 구현 계획 수립          ← 메인 Claude → GitHub Issue 본문/체크리스트
     ↓ (사용자 컨펌)
[Phase 3] 실행                   ← feature/issue-<N> 브랜치에서 서브에이전트 병렬 호출
     ↓
[Phase 4] 검증                   ← 메인 Claude (필수)
     ↓
[Phase 5] 커밋 + PR (Closes #N)  ← 메인 Claude, PR 본문이 작업 로그
     ↓
[사용자: PR 리뷰 → 머지 → 이슈 자동 close]
     ↓
[Phase 6] Wiki 갱신              ← 스펙 변경분을 해당 Wiki 페이지에 반영

핵심 원칙:

  • 서브에이전트에는 훅이 적용되지 않는다 → 메인 Claude 가 검증을 책임진다
  • 계획·검증·커밋은 메인 Claude, 구현은 서브에이전트, 스코프·승인·머지는 사용자
  • BE / FE / 문서가 한 기능을 위한 변경이면 한 커밋, 한 PR
  • 작업 플랜 = Issue, 작업 로그 = PR 본문, 스펙 현황 = Wiki

2. 작업 단위 쪼개기 기준

한 GitHub Issue = 한 vertical slice (사용자가 보기에 동작하는 단위)

2.1 기능 단위 (Issue)

GitHub Issue로 묶는 단위. 사용자 시나리오 하나가 끝나는 지점까지.

예시 포함 범위
"인증 기능" BE (User 모델 + register/login + JWT 미들웨어) + FE (auth store + 로그인/회원가입 페이지) + 통합 테스트
"분석 흐름 골격(Stub)" BE (포트 정의 + Stub 어댑터 + AnalysisService + API) + FE (입력 폼 + 폴링 + 결과 페이지)
"쿠팡 크롤러 실제 구현" BE만 (포트 시그니처 그대로, Stub → 실제 어댑터 교체)

기준:

  • 사용자가 "이게 됐다/안 됐다"고 말할 수 있는가 → Yes면 기능 단위
  • 종단(end-to-end) 테스트가 가능한가 → Yes면 기능 단위
  • 한 issue가 4~8시간 안에 끝날 만한 규모인가 → 적절한 크기

2.2 컴포넌트 단위 (Sub-task)

기능 단위 내부에서 병렬 가능한 작업을 쪼개는 단위. TaskCreate로 등록.

영역 예시 sub-task
BE "User 도메인 모델 + UserRepository 포트 정의"
BE "Postgres UserRepository 어댑터 구현"
BE "register/login 핸들러 + AuthService"
FE "API 클라이언트(토큰 주입)"
FE "Zustand auth store"
FE "로그인 페이지"
문서 "API 스펙 register/login 업데이트"

병렬 vs 직렬 판단:

  • 같은 파일을 건드리지 않는다 → 병렬 가능
  • 한쪽이 다른 쪽의 산출물(타입, 시그니처)을 필요로 한다 → 직렬 (blockedBy)

예시:

  • "Zustand auth store" 와 "로그인 페이지 UI 뼈대" → 병렬
  • "FE API 함수" 는 "BE 핸들러 + 스키마 확정" 후에 → 직렬

2.3 trait 분리 기준 (컴포넌트 설계)

구현 시작 전, "이 로직이 나중에 다른 구현으로 교체될 여지가 있는가?" 를 먼저 본다.

케이스 trait?
외부 API 어댑터 (Coupang, Naver, Claude) ✅ 필수
Repository (DB 추상화) ✅ 필수
테스트에서 mock으로 교체할 것
현재도 미래에도 구현이 하나뿐 ❌ 그냥 구현체

trait를 추가하면 동시에:

  1. 결정론적 동작을 검증할 픽스처/단위 테스트 추가
  2. .claude/dod.md 에 테스트 조건 명시

3. AI 요청 프롬프트 패턴

서브에이전트에게 일을 시킬 때 어떤 맥락을 주고 어떤 형태로 요청할지의 템플릿.

3.1 컨텍스트 구성 (메인 Claude가 항상 먼저 읽고 → 서브에이전트 프롬프트에 전달)

파일 역할 언제 필요
CLAUDE.md 프로젝트 전체 맥락 항상
.claude/dod.md 작업 완료 기준 항상
.claude/code-rules.md 코드 수정 규칙 코드 변경 시
.claude/commit-rules.md 커밋 규칙 커밋 단계
Wiki: Backend/API/Frontend 기술 스펙 (현황) 해당 영역 작업 시
Wiki: Harness 테스트 안전망 테스트 추가 시
관련 GitHub Issue / 최근 PR 최근 작업 맥락 항상

3.2 서브에이전트 프롬프트 템플릿

## 프로젝트 루트
/Users/.../coupang-review-ai

## 작업 내용
[무엇을 추가/수정할지 구체적으로]
- 대상 파일: <절대 경로>
- 함수/모듈명: <명시>
- 입출력 시그니처: <명시>

## 참고 스펙 (Wiki — 최종 현황)
- Wiki: Backend (Hexagonal 구조)
- Wiki: API (해당 엔드포인트 스키마)

## 완료 조건
- [ ] 파일 수정 전 반드시 현재 내용 읽기
- [ ] BE 수정: cargo check 통과
- [ ] BE 수정: cargo test 통과 (#[cfg(test)] 블록 포함)
- [ ] FE 수정: npm run type-check 통과
- [ ] FE 수정: npm test -- --run 통과
- [ ] FE API 함수 추가 시: types.ts에 {Action}Request/{Action}Response 정의
- [ ] 인라인 타입(`Promise<{ field: T }>`) 금지

## 주의
훅이 적용되지 않으므로 위 조건을 직접 확인하고 완료해야 한다.

3.3 패턴별 변형

패턴 추가로 전달할 맥락
신규 기능 (BE) 도메인 모델, 포트 trait 시그니처, AppState 등록 방법
신규 기능 (FE) API 스키마, 디자인 가이드(shadcn 컴포넌트), 라우팅
외부 API 어댑터 픽스처 경로, 재시도/딜레이 정책, 에러 매핑 규칙
버그 수정 재현 방법, 기대 동작, 관련 테스트 파일 경로
리팩터 변경 전/후 시그니처, 호출부 목록(grep 결과)
문서 작업 WAL 원칙(append-only), 문서 종류별 위치

3.4 안티패턴 (피할 것)

  • ❌ "알아서 인증 기능 만들어줘" — 컨텍스트 0
  • ❌ "이전 대화에서 말한 대로" — 서브에이전트는 이전 대화를 모름
  • ❌ "최선의 방식으로" — 판단 기준이 모호
  • ❌ 완료 조건 없이 보내기 — 검증 불가
  • ✅ 절대 경로 + 구체 시그니처 + 검증 명령어 항상 포함

4. 자가 검증 체크포인트

서브에이전트 완료 후 메인 Claude 가 직접 확인해야 하는 항목. 하나라도 실패하면 SendMessage 로 수정 요청. 사용자(나)는 §4.5 머지 전 최종 게이트만 직접 본다.

4.1 변경 영역별 필수 체크

변경 영역 컴파일 테스트 커버리지 문서
BE (Rust) cargo check cargo test cargo tarpaulin PR 본문
FE (TS) npm run type-check npm test -- --run (Stop hook 자동) PR 본문
스펙만 변경 Wiki 페이지 + PR 본문
DB 마이그레이션 cargo check cargo test (testcontainers) PR 본문

4.2 단계별 체크 순서

[4-1] 컴파일 / 타입 통과 확인
       ↓ 실패 → SendMessage로 수정 요청
[4-2] 테스트 통과 확인 (watch 모드 방지 플래그 포함)
       ↓ 실패 → SendMessage
[4-3] 커버리지 하락 여부 (이전 대비 떨어지면 보강)
       ↓ 실패 → SendMessage
[4-4] PR 본문(작업 요약/검증/결정) 작성 확인 — Closes #N
       ↓ 실패 → 메인 Claude가 직접 작성
[4-5] 코드 규칙 준수 (인라인 타입, mock DB 등) — diff 시각 검토
       ↓ 실패 → SendMessage
[모두 통과] → TaskUpdate(completed)

4.3 코드 규칙 시각 검토 항목 (diff 보면서)

  • FE: 인라인 타입 (Promise<{ field: T }>) 없음 → 모두 named type
  • BE: unwrap() / expect() 가 테스트 외에 없음
  • BE: application/ / adapters/.rs 파일에 #[cfg(test)] mod tests 존재
  • FE: src/features/*.ts 에 대응되는 *.test.ts 존재
  • 새로 추가된 trait이 있다면 픽스처/단위 테스트도 같이 추가됐는지
  • 변경된 외부 API 호출이 있다면 재시도/타임아웃 정책이 적용됐는지

4.5 머지 전 최종 게이트 (사용자가 직접 확인)

항목 확인 방법 주체
한 기능 = 한 커밋(혹은 BE/FE 각 한 커밋) 인가 git log 사용자
커밋 메시지가 commit-rules.md 형식인가 git log -1 사용자
PR 본문에 Closes #N + 작업 요약이 있나 gh pr view 사용자
관련 Wiki 페이지가 업데이트됐나 (스키마 변경이 있다면) Wiki diff 확인 사용자
CI 통과 GitHub Actions 자동

5. 판단 위임 매트릭스

누가 어떤 결정을 내릴 수 있고, 위임 불가한 영역이 무엇인지.

5.1 사용자(나)만 결정할 수 있는 것

서브에이전트는 물론, 메인 Claude도 함부로 결정하면 안 되는 항목.

  1. 스코프 — 이 기능을 v1에 넣을지, v2로 미룰지
  2. 외부 의존성 추가 — 새 crate / npm 패키지 도입 승인
  3. API 계약 변경 — 호환성 깨지는 변경인지 / 마이그레이션 전략
  4. DB 스키마 변경 승인 — 마이그레이션 실행 시점
  5. 머지 / 배포 — 최종 게이트
  6. 수익 모델 / 가격 — 사업 결정

5.2 메인 Claude 가 결정 가능 (서브에이전트에 위임 불가)

기술적·전술적 판단. 사용자가 큰 가이드라인을 줬다면 그 안에서 메인 Claude 가 결정.

  1. trait 분리 여부 — 교체 가능성 판단
  2. 서브태스크 분해 방식 — 병렬/직렬, 파일 단위
  3. 커밋 단위 — 어디서 끊을지
  4. 테스트 추가 위치/방식
  5. 에러 처리 패턴 적용 (AppError 분기 등)
  6. 검증 실패 시 재요청 vs 직접 수정

5.3 서브에이전트에 위임 가능

명확히 정의된 작업만.

  • 정해진 시그니처대로의 구현
  • 픽스처 기반 테스트 작성
  • 명확히 정의된 리팩터 (rename, extract method 등)
  • 문서 초안 (검토는 메인 Claude / 사용자)

6. 산출물 트리

워크플로우가 끝나면 항상 아래가 생긴다:

GitHub Issue  (#N)                      # Phase 2 산출 — 작업 플랜/체크리스트
GitHub PR     (Closes #N)               # Phase 5 산출 — 작업 로그(요약/검증/결정)

Wiki: Backend/API/Frontend 등           # Phase 6 — 스펙 현황 갱신 (필요 시)

코드 변경 (BE / FE / 마이그레이션)

git commit (한 기능 = 한 커밋, BE/FE 분리 가능) → feature/issue-<N> 브랜치

7. 체크리스트 요약 (작업 시작 ~ 종료)

# 단계 주체
1 이슈 등록 (gh issue create) 사용자
2 컨텍스트 읽기 (§3.1) — 이슈 + Wiki + 코드 메인 Claude
3 서브태스크 분해 → 이슈 본문/체크리스트 (§2) 메인 Claude
4 계획 컨펌 사용자
5 feature/issue-<N> 브랜치 + 서브에이전트 호출 (§3.2) 메인 Claude
6 컴파일 / 타입 검증 (§4.1) 메인 Claude
7 테스트 검증 (§4.1) 메인 Claude
8 커버리지 확인 (§4.2) 메인 Claude
9 diff 시각 검토 (§4.3) 메인 Claude
10 커밋 + PR 생성 (Closes #N, 본문=작업 로그) 메인 Claude
11 머지 전 최종 게이트 (§4.5) 사용자
12 PR 머지 → 이슈 자동 close 사용자
13 스펙 변경분 Wiki 반영 (§6) 메인 Claude

Clone this wiki locally