Skip to content

프로젝트 08. 내 워크플로우를 그래프로 그리기

관련 강의: L14. 단일 루프에서 그래프 엔지니어링으로

무엇을 할 것인가

이것은 "Loop"에서 "Graph"로 도약하는 프로젝트입니다. 지난 강의에서 maker-checker loop을 만들었습니다 — 구현, 검증, 피드백, 재구현, 모든 결정이 같은 agent의 컨텍스트 창 안에서 일어났습니다. 이번 강의에서 할 일은, 루프 안에 숨어 있던 구조를 명시적으로 그려내는 것입니다: 노드, 엣지, 공유 상태, 라우팅 규칙을 한 글자 한 글자 명확히 씁니다.

세 가지를 차례로 실험할 것입니다: 먼저 P07의 maker-checker loop을 명시적 그래프로 그리고, 그래프에 병렬 fan-out/fan-in 노드를 추가하고, 마지막으로 조건부 롤백 엣지와 인간 승인 노드를 추가합니다. 끝나면 직접 체감하게 될 것: 그래프는 새 발명이 아니라, 당신의 loop이 어느 정도 복잡해지면 스스로 변하는 모습입니다.

어떤 도구를 사용할 것인가

  • Claude Code 또는 Codex
  • Git
  • P07에서 만든 maker-checker loop (또는 반복해서 돌릴 수 있는 아무 agent 워크플로우)
  • 텍스트 편집기 또는 그리기 도구 (그래프를 그리는 것은 예쁘게 하려는 것이 아니라, 구조를 명확히 쓰려는 것입니다; mermaid 또는 손으로 쓰는 graph.md 모두 가능)

구체적 단계

준비 작업

  1. P07 완료 후의 저장소에서 출발하거나, 지금 돌고 있는 아무 agent 워크플로우를 그대로 사용하세요.
  2. 세 개의 브랜치를 만드세요: p08-explicit-graph, p08-parallel, p08-human-in-the-loop.
  3. 공유 상태 파일로 state.md를 준비하세요: 요구사항, 진행 상황, 검증 결과를 모두 여기에 씁니다. 이것이 그래프의 "공용 작업대"입니다.

실험 1: Loop을 명시적 그래프로 그리기

p08-explicit-graph 브랜치로 전환하세요.

  1. 모든 노드 나열: P07 maker-checker loop의 매 단계를 노드 하나로 쓰세요. 각 노드에 명확히 쓰세요: 책임, 입력, 출력, agent인지 결정적 코드인지.
  2. 모든 엣지 그리기: 노드 사이의 모든 엣지를 나열하세요. 두 개의 특수 엣지를 중점적으로 표시하세요:
    • 조건 엣지: 검증 통과/실패, 어느 쪽으로 가는지
    • 롤백 엣지: 실패 시 어느 노드로 돌아가는지
  3. 공유 상태 쓰기: 상태에 어떤 필드가 있는지(요구사항, 코드, 테스트 결과, 검토 결론) 명확히 나열하고, 누가 읽고 누가 쓰는지 표시하세요.
  4. 라우팅 규칙 쓰기: 가장 단순한 if-then 언어로 "다음에 어디로 갈지"를 적으세요. 예:
    if 검증 통과 → 병합 노드
    if 검증 실패 → 구현 노드
    if 구현 노드 정보 부족 → 연구 노드
  5. graph.md로 작성: 위 내용을 하나의 문서로 정리하세요. mermaid로 그래프를 그리고, 노드 표와 라우팅 규칙을 함께 넣으세요.
  6. 이 질문에 답하기: 그리고 나서, 적어도 한 개의 원래 암묵적이던 엣지를 찾으세요 — 예전에 agent 컨텍스트 안에 숨어 있어서 당신 자신도 그 존재를 몰랐던 결정 경로.

실험 2: 병렬 Fan-out / Fan-in 노드 추가

p08-parallel 브랜치로 전환하세요.

  1. 병렬화할 수 있는 지점 고르기: 작업에서 두 개의 독립적인 부분으로 쪼갤 수 있는 곳을 찾으세요. 예:
    • 구현을 두 개의 독립 모듈로 쪼개어 두 agent가 병렬로 작성
    • 검증을 두 개의 독립 검토로 쪼개기: 하나는 테스트와 lint 실행, 하나는 코드 리뷰 (다른 지시, 다른 관심사)
    • 연구를 두 방향으로 쪼개어 두 agent가 각자 한 가지를 조사
  2. fan-out 규칙 쓰기: 공유 상태에 "이 작업이 N개의 병렬 서브태스크로 쪼개졌다"를 기록하고, 각 서브태스크는 독립적인 context, 독립적인 노드를 가집니다.
  3. fan-in 규칙 쓰기: 모든 서브태스크가 끝난 뒤, 누가 결과를 병합할까요? 병합 기준은 무엇인가요(예: 두 검토가 모두 통과해야 병합, 아니면 하나만 통과해도 됨)?
  4. worktree로 격리: 각 병렬 서브태스크를 독립적인 git worktree에서 돌려, 파일 충돌을 물리적으로 방지하세요(13강의 Worktree 원시를 다시 보세요).
  5. 한 번 실행해 기록: 병렬 전후의 wall-clock 시간, token 소비, 결과 품질을 기록하세요. 병렬이 정말로 더 빨랐나요? 아니면 조정 오버헤드가 절약한 시간을 먹었나요?

실험 3: 롤백 엣지와 인간 승인 노드 추가

p08-human-in-the-loop 브랜치로 전환하세요.

이것은 세 실험 중 가장 중요합니다. 그래프에 두 종류의 노드를 추가할 것입니다:

  1. 조건부 롤백 엣지: 검증 노드에 "부분 통과" 경로를 추가하세요 — 전부를 구현 노드로 되돌리는 것이 아니라, 구체적 피드백을 담고 문제가 생긴 그 노드로 돌아갑니다. 예: 테스트는 전부 통과했지만 코드 리뷰가 요구사항 이해 오류를 발견했다면, 구현 노드가 아니라 연구 노드로 롤백합니다. 이러려면 공유 상태에 "문제가 어느 층에서 생겼는지"를 기록해야 합니다.
  2. 인간 승인 노드(Human-in-the-loop): 병합 노드 앞에 인간 노드를 추가하세요. 여기까지 오면 그래프는 멈추고, 당신이 state.md에 "승인" 또는 "반려"를 쓰기를 기다립니다. 승인 노드는 타임아웃 규칙을 가질 수 있습니다: N시간 후 응답이 없으면 자동 반려 또는 자동 상위로 승격.
  3. interrupt의 형식 쓰기: 승인 요청을 어떻게 명확히 쓰는지 — 무슨 일이 일어났는지, 무엇이 바뀌었는지, 왜 사람이 필요한지, 승인/반려의 결과가 각각 무엇인지.
  4. 완전한 흐름을 적어도 2라운드 돌리기: 매 라운드마다 인간 승인 노드까지 가고, 당신이 직접 한 번 승인하고 한 번 반려하세요. 기록하세요: 당신의 승인 결정과 검증 노드의 판단이 일치했나요? 승인 노드가 검증 노드가 막지 못한 어떤 것을 막았나요?

결과를 어떻게 측정할 것인가

지표실험 1 (명시적 그래프)실험 2 (병렬)실험 3 (인간-기계 협력)
구조 가시성암묵적 엣지를 몇 개 찾았나?공유 상태가 병렬 서브태스크를 지원할 수 있나?롤백 엣지가 문제 층을 정확히 찾을 수 있나?
실패 위치 파악실패 시 어떤 엣지가 잘못됐는지 바로 지적할 수 있나?병렬 서브태스크 실패 시, 어느 것인지 특정할 수 있나?승인 반려 시, 어느 층의 문제인지 지적할 수 있나?
협력 오버헤드그래프를 쓰는 데 얼마나 걸렸나?병렬로 절약한 시간 vs 조정 오버헤드승인 대기 시간 vs 막아낸 문제의 가치
관측 가능성매 단계에서 무슨 일이 일어나는지 이제 보이나?각 병렬 서브태스크의 상태가 보이나?승인 요청이 충분히 명확하게 쓰였나?
신뢰성그래프 설명과 실제 실행이 일치하나?fan-in 병합 기준이 신뢰할 만하나?타임아웃/승격 규칙이 정말로 발동하나?

무엇을 제출할 것인가

  • graph.md(실험 1의 완전한 그래프 설명: mermaid 그래프 + 노드 표 + 엣지 표 + 공유 상태 필드 + 라우팅 규칙)
  • 실험 1에서 찾은 암묵적 엣지 목록(적어도 하나)
  • 실험 2의 fan-out/fan-in 규칙과 병렬 실행 기록 한 번(시간/비용/품질 비교)
  • 실험 3의 롤백 엣지 규칙, 승인 노드 형식, 2라운드 인간-기계 협력 기록
  • 최종 회고: loop에서 graph로, 당신의 작업 방식이 어떻게 바뀌었나요? 어떤 작업이 그래프를 그릴 가치가 있고, 어떤 것은 아닌가요?

관련 강의