Refine: 요구사항 정제 프로토콜
모호한 요구사항을 구조화된 질문을 통해 실행 가능한 스펙으로 변환한다.
프로세스
1단계: 원본 캡처
원래 요구사항을 그대로 기록한다:
code
## 원본 요구사항
"{사용자의 원래 요청 그대로}"
아래 모호성 카테고리를 기준으로 불명확한 부분을 식별한다.
2단계: 반복 질문
AskUserQuestion을 사용해 모호성을 하나씩 해소한다. 모든 핵심 사항이 명확해질 때까지 반복한다.
질문 설계 원칙:
- •구체적 > 추상적: 구체적인 디테일을 물어볼 것
- •선택지 제시 > 주관식: 2-4개 옵션 제공 (인지 부하 감소)
- •한 번에 하나: 여러 질문을 묶지 말 것
- •중립적 프레이밍: 특정 옵션에 편향되지 않게
반복 구조:
code
모호성이 남아있는 동안: 1. 가장 중요한 모호성 식별 2. AskUserQuestion으로 질문 3. 답변 반영하여 요구사항 업데이트 4. 새로운 모호성 확인
3단계: Before/After 비교
정제가 완료되면 변환 결과를 제시한다:
code
## 요구사항 정제 결과
### Before (원본)
"{원래 요청 그대로}"
### After (정제됨)
**목표**: [정확한 설명]
**이유**: [궁극적 목적 또는 해결하려는 문제]
**범위**: [포함/제외 사항]
**제약조건**: [기술적 제한, 요구사항, 선호도]
**완료 기준**: [어떻게 완료를 판단하는가]
**결정 사항**:
| 질문 | 결정 |
|------|------|
| [모호성 1] | [선택된 옵션] |
| [모호성 2] | [선택된 옵션] |
4단계: 저장 옵션
AskUserQuestion으로 정제된 스펙을 파일로 저장할지 확인한다:
- •"Yes, save to file" →
requirements/디렉토리에 저장 - •"No, proceed" → 저장 없이 구현 진행
파일명은 주제 기반으로 서술적으로 (예: auth-feature-spec.md).
모호성 카테고리
| 카테고리 | 탐색 질문 |
|---|---|
| 범위 | 무엇이 포함? 명시적으로 제외할 것은? |
| 동작 | 엣지 케이스? 에러 시나리오? |
| 인터페이스 | 누가/무엇이 상호작용? 어떻게? |
| 데이터 | 입력? 출력? 포맷? |
| 제약조건 | 성능? 호환성? |
| 우선순위 | 필수 vs 선택? |
| 이유 | 왜 하는가? 해결하려는 문제는? |
| 완료 기준 | 올바른 방향인지 어떻게 검증? |
규칙
- •가정 금지: 모르면 물어볼 것
- •의도 보존: 사용자의 원래 의도를 정제하되, 방향을 바꾸지 말 것
- •최소 질문: 필요한 것만 물을 것
- •답변 존중: 사용자의 결정을 수용할 것
- •변화 추적: 항상 Before/After를 보여줄 것