포스트

AI 에게 절차를 강제하기 — Claude Code PDCA 스킬을 들여다본 기록

AI 에게 절차를 강제하기 — Claude Code PDCA 스킬을 들여다본 기록

“어제 어디까지 했지?”

AI 페어 프로그래밍을 며칠만 해본 사람이라면 한 번쯤 떠올리는 질문입니다. 모델은 어제의 결정을 기억하지 못하고, 사람은 매번 처음부터 설명을 다시 깔아야 합니다. 단발 작업이라면 그래도 됩니다. 여러 사이클을 쌓아 가는 실제 제품 개발에서는, 이 휘발성이 가장 비싼 비용이 됩니다.

Claude Code 의 PDCA Skill 은 이 문제를 정면으로 다룹니다. 이번 글은 스킬의 안쪽을 뜯어보면서, “AI 에게 절차를 강제한다” 는 발상이 어떻게 코드로 구현되어 있는지 정리한 기록입니다.

매번 처음부터 다시 설명한다

전형적인 풍경 한 장.

1
2
3
[월요일]   요구사항을 설명한다 → 설계가 나온다 → 구현한다
[화요일]   "어제 어디까지 했지?"
[화요일]   요구사항을 다시 설명한다 → 설계가 또 나온다

기억이 없으니 절차도 없습니다. 어제의 결정이 오늘로 이어지지 않고, “설계대로 짰는가?” 를 객관적으로 확인할 방법도 없습니다.

“스킬” 이라는 단위

먼저 그림 한 장.

flowchart TD
    U["/pdca plan user-auth"] --> S[PDCA Skill]
    S -.- ST[("docs/.pdca-status.json<br/>단일 상태 파일")]
    S --> P["plan → docs/01-plan/features/..."]
    S --> D["design → docs/02-design/features/..."]
    S --> Do["do → 코드 작성 / 서브 에이전트 호출"]
    S --> An["analyze → docs/03-analysis/...<br/>matchRate %"]
    S --> It["iterate → 자동 개선 루프"]
    S --> R["report → docs/04-report/features/..."]

/pdca <action> <feature> 하나의 진입점이 모든 단계를 라우팅합니다. 핵심은 상태가 파일 하나로 외화된다는 점입니다. docs/.pdca-status.json 이 “지금 어디까지 와 있는가” 를 갖고 있고, 모든 액션이 이걸 읽고 갱신합니다. 다음 세션이 어제의 자리에서 시작할 수 있는 이유입니다.

6단계, 그리고 후처리

PDCA 라는 이름이지만 실제 단계는 6개입니다.

단계액션산출물
Plan/pdca plan요구사항·범위 문서
Design/pdca designAPI·데이터 모델 설계
Do/pdca do실제 코드
Check/pdca analyze설계 vs 구현 갭 분석
Act/pdca iterate자동 개선 반복
Report/pdca report사이클 보고서

여기에 archive, cleanup, commit 같은 후처리까지 액션으로 만들어 둔 게 인상적입니다. 끝난 피처를 docs/archive/YYYY-MM/ 로 자동 이동하고 commit 메시지 형식까지 표준화합니다. “끝낸 뒤 정리” 가 제일 자주 누락되는 단계인 걸 알고 만든 거죠.

더 재미있는 건 안쪽이다

겉으로 보이는 액션 표보다, 안쪽 설계 가 훨씬 흥미롭습니다.

1. SKILL.md 는 라우팅, 절차는 Ref 분리

1
2
3
4
5
6
7
8
pdca/
├── SKILL.md                   # ← 라우팅 표만
├── refs/
│   └── actions/
│       ├── plan.ref.md        # ← 절차 본문
│       ├── design.ref.md
│       └── ...
└── templates/                 # ← 산출물 템플릿

본체에는 “어떤 액션이면 어느 ref 를 읽어라” 라는 표만 두고, 실제 절차는 ref 파일로 분리됩니다. 호출된 액션의 ref 만 컨텍스트에 들어오니 토큰이 비대해지지 않습니다. 캐시된 ref 가 잘리지 않았으면 Read 도 생략한다는 작은 규칙까지 들어가 있습니다.

2. 서브 에이전트 분업

do 단계는 그냥 코드를 쓰지 않습니다. 전문 서브 에이전트로 라우팅합니다.

1
2
3
do
├── backend-designer  → backend-developer
└── frontend-designer → frontend-developer

설계 담당과 구현 담당이 분리돼 있어서, 설계 페르소나가 구현 결정에 끌려가는 일을 줄입니다.

3. Evaluator-Optimizer 루프

가장 인상 깊은 부분. analyzeiterate한 쌍의 루프 입니다.

flowchart TD
    A["analyze<br/>(gap-detector)"] --> Q{"matchRate ≥ 90% ?"}
    Q -->|예| R[report 로]
    Q -->|아니오| I["iterate<br/>(pdca-iterator)"]
    I --> A

평가하는 에이전트와 수정하는 에이전트를 분리하는 Evaluator-Optimizer 패턴 입니다. 사람이 “다시 해 줘” 라고 시키지 않아도, 점수가 임계치 미만이면 알아서 한 사이클 더 돌립니다.

작지만 중요한 디테일. 모든 응답 끝에 대시보드 footer 가 강제됩니다.

1
[Plan] ✅ > [Design] ✅ > [Do] 🔄 > [Check] ⬜ > [Act] ⬜ > [Report] ⬜

AI 도구를 쓸 때 가장 자주 나오는 불만 — “지금 뭐 하는지 모르겠다” — 를 한 줄로 해결합니다. 진척도가 늘 시야 안에 있습니다.

“AI 와 일한다” 의 의미가 바뀐다

 일반 AI 페어링PDCA Skill
세션 간 기억사람이 다시 설명.pdca-status.json 이 기억
산출물 위치채팅 로그 어딘가docs/01-plan/, docs/02-design/
설계 vs 구현 검증사람 눈으로matchRate %
재시도 트리거사람이 “다시 해 줘”matchRate < 90% 면 자동
마무리 정리잊혀짐archive → cleanup → commit

도구가 똑똑해진 게 아니라 파이프라인이 똑똑해진 것 입니다. 같은 모델이라도 이 파이프라인 위에서 돌면 누적 가능한 작업물이 나옵니다.

도입 전에 점검할 두 가지

물론 만능은 아닙니다.

첫째, matchRate 90% 가 우리 도메인에 맞는가. 단순 CRUD 와 복잡한 도메인 로직을 같은 잣대로 보긴 어렵습니다. 90% 가 단순 피처에선 후하고, 복잡 피처에선 박할 수 있습니다. 운영하면서 임계치를 조정할 여지를 두는 게 좋습니다.

둘째, 서브 에이전트 호출 비용을 감당할 수 있는가. 파이프라인이 좋아지는 대신 에이전트 호출은 늘어납니다. 토큰·시간 예산 안에 들어오는지 한 사이클 돌려보고 판단하는 게 안전합니다.

그리고 단일 상태 파일 (docs/.pdca-status.json) 을 손으로 건드리지 않는 팀 규칙도 필요합니다. 라우팅의 근원이 한 파일이라, 거기가 깨지면 전체가 흔들립니다.

가져갈 한 줄

스킬을 뜯어보며 남는 한 줄은 이겁니다.

AI 워크플로우의 품질은 모델이 아니라 파이프라인이 결정한다.

“모델 한 번에 잘 해 주길” 기다리는 발상에서, 여러 번 돌릴 수 있는 절차를 먼저 만든다 는 발상으로 옮겨가는 순간 결과물이 달라집니다. PDCA Skill 은 그 발상의 잘 짜인 한 예시입니다. 누적되는 작업에 AI 를 쓰고 있다면, 한 번쯤 들여다볼 만합니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.