모듈 6: PRPs - 기능 요청서 작성법
학습 목표
- PRP(Product Requirements Prompt)의 개념을 이해한다
- 좋은 PRP와 나쁜 PRP의 차이를 설명할 수 있다
- HmEG 프로젝트에 맞는 PRP를 직접 작성할 수 있다
- PRP 기반 개발 사이클을 실행할 수 있다
PRP란?
Product Requirements Prompt - AI가 기능을 구현하는 데 필요한 모든 맥락을 담은 구조화된 문서입니다.
단순한 기능 요청서가 아니라, AI가 첫 번째 시도에 올바른 코드를 생성할 수 있도록 설계된 작업 지시서입니다.
PRPs/
├── templates/
│ └── prp_base.md # PRP 작성 템플릿
└── [feature]_prp.md # 실제 기능 PRP (generate-prp가 생성)
PRP가 필요한 이유
나쁜 기능 요청 (자연어)
"HmEG 뷰포트에 단면 기능 추가해줘"
AI가 모르는 것들:
- 어떤 HmEG API를 써야 하나?
- MVVM 패턴을 어떻게 적용해야 하나?
- 기존 예제 중 참조할 패턴은?
- 어떤 단계로 구현하면 되나?
- 실패 시 어떻게 롤백하나?
결과: 할루시네이션이 있는 코드, 여러 번의 수정 필요
좋은 기능 요청 (PRP)
## 목표
EGViewport에 X/Y/Z 축 CrossSection(단면) 기능 추가
## 참조 컨텍스트
- examples/EGViewportSample/ViewModels/CrossSectionViewModel.cs 패턴 따를 것
- HmEG API: [API 조회 필요: CrossSectionPlane] - execute 시 hmeg-api로 조회
## 구현 단계
Step 1: CrossSectionViewModel 생성
Step 2: [API 조회 필요: CrossSectionPlane 생성자] 적용
Step 3: CrossSectionView.xaml 바인딩
Step 4: dotnet build (Warning 0 확인)
## 검증 게이트
- dotnet build: Warning 0
- CrossSection 토글 동작 확인결과: 첫 시도에 올바른 코드 생성
PRP 기본 템플릿 구조
## Goal
[무엇을 만들 것인가 - 구체적인 최종 상태]
## Why
- [비즈니스 가치]
- [기존 기능과의 연계]
- [해결하는 문제]
## What
[사용자가 보는 동작 + 기술 요구사항]
### Success Criteria
- [ ] [측정 가능한 완료 기준]
## All Needed Context
### Documentation & References
- file: examples/EGViewportSample/...
why: 참조할 패턴
### Known Gotchas
# HmEG 객체는 반드시 using 블록 사용
# try/catch 예외 처리 필수
## Implementation Blueprint
### Tasks
Task 1: ...
Task 2: ...
## Validation Loop
### Level 1: Build
dotnet build (Warning 0)
### Level 2: Unit Tests
dotnet test
### Level 3: Integration
[실제 동작 확인 방법]HmEG 프로젝트 PRP 작성 가이드
1. API 조회 마커 활용
PRP 작성 시 실제 API 코드를 직접 쓰지 마세요:
# 잘못된 방법 (API 코드 직접 작성)
Step 2: CrossSectionPlane 생성
코드: var plane = new CrossSectionPlane(Vector3.UnitX, 0.0);
# 올바른 방법 (마커 표시)
Step 2: [API 조회 필요: CrossSectionPlane Constructor] 적용
- 평면 법선 벡터와 오프셋으로 단면 생성이유: generate-prp 시점에 API 코드를 넣으면 할루시네이션 위험. execute-prp 시점에 hmeg-api Skill이 정확한 API를 제공합니다.
2. 기존 예제 패턴 명시
## All Needed Context
### Code Patterns to Follow
- file: examples/EGViewportSample/ViewModels/CrossSectionViewModel.cs
why: EGViewport 단면 뷰 ViewModel 패턴 (기존 구현 있음)
- file: examples/EGViewportSample/ViewModels/ViewportViewModel.cs
why: EGViewport 초기화 및 MVVM 연결 패턴3. HmEG 특화 규칙 명시
## Known Gotchas
# CRITICAL: HmEG 객체는 using 블록 필수
using var space = viewport.RootSpace; // OK
var space = viewport.RootSpace; // NG - 메모리 누수
# CRITICAL: UI 스레드 체크
Application.Current.Dispatcher.Invoke(() => {
// UI 업데이트는 반드시 Dispatcher를 통해
});
# 빌드 경고 0개 목표INITIAL.md 작성 예시
generate-prp에 입력하는 초기 기능 요청서:
# INITIAL.md: 레이어 관리 기능 요청
## 기능 개요
3D 뷰포트에서 레이어별로 오브젝트 표시/숨김을 제어하는 기능
## 요구사항
1. 레이어 목록을 트리뷰로 표시
2. 체크박스로 레이어별 On/Off
3. 레이어별 색상 표시
4. 실시간으로 3D 뷰포트에 반영
## 참고 사항
- 기존 EGViewportSample의 레이어 구조 참조
- MVVM 패턴 사용
- HmEG LayerTable API 활용
## 우선순위
High - 토목 설계 작업에 필수 기능PRP 생성 및 실행 사이클
Step 1: INITIAL.md 작성
# PRPs/INITIAL.md 작성 후
/generate-prp PRPs/INITIAL.mdStep 2: 생성된 PRP 검토
PRPs/layer_management_prp.md 생성됨
검토 포인트:
- API 조회 마커가 적절히 표시되었나?
- 구현 단계 순서가 논리적인가?
- 검증 게이트가 충분한가?
- 위험 요소가 파악되었나?
Step 3: PRP 수정 (필요시)
# 생성된 PRP에 직접 추가
## Known Gotchas 추가
# LayerTable은 트랜잭션 내에서만 수정 가능
# 레이어 색상은 Color 타입 (System.Drawing.Color와 다름)Step 4: 구현 실행
/execute-prp PRPs/layer_management_prp.mdStep 5: 검증
dotnet build # Warning 0 확인
dotnet test # 테스트 통과 확인실제 PRP 예시: CrossSection 기능
# PRPs/cross_section_prp.md
## 개요
EGViewport에 X/Y/Z 축 단면 뷰(CrossSection) 기능 추가
## API 조회 항목
- [API 조회 필요: EGViewport.CrossSectionEnabled]
- [API 조회 필요: CrossSectionPlane Constructor]
- [API 조회 필요: EGViewport.CrossSectionPlane 속성]
## 아키텍처
### 신규 파일
src/ui/ViewModels/CrossSectionViewModel.cs
src/ui/Views/CrossSectionView.xaml
src/ui/Views/CrossSectionView.xaml.cs
### 수정 파일
src/ui/ViewModels/MainViewModel.cs <- CrossSectionViewModel 추가
## 구현 단계
### Step 1: CrossSectionViewModel 기본 구조
- ObservableObject 상속
- EGViewport 생성자 주입
- IsEnabled, Axis, Offset 프로퍼티
### Step 2: CrossSection API 적용
- [API 조회 필요: CrossSectionPlane 생성] 구현
- X/Y/Z 축 전환 로직
### Step 3: View 구현
- 슬라이더로 단면 위치 조정
- 라디오 버튼으로 축 선택
### Step 4: MainViewModel 통합
- CrossSectionViewModel 프로퍼티 추가
- 초기화 코드 추가
## 검증 게이트
- [ ] dotnet build (Warning 0)
- [ ] X축 단면 동작 확인
- [ ] Y축 단면 동작 확인
- [ ] Z축 단면 동작 확인
- [ ] 단면 On/Off 토글 동작
## 위험 완화
- CrossSectionPlane은 UI 스레드에서만 설정
- 잘못된 Offset 값에 대한 예외 처리 필수PRP vs 일반 프롬프트 비교
| 측면 | 일반 프롬프트 | PRP |
|---|---|---|
| API 정확도 | 할루시네이션 위험 | Skill 조회로 정확 |
| 코드 패턴 | AI 임의 결정 | 기존 예제 명시 |
| 구현 순서 | AI 임의 순서 | 명확한 단계별 |
| 검증 | 없음 | 게이트별 체크 |
| 실패 대응 | 없음 | 롤백 계획 포함 |
핵심 정리
- PRP = AI가 첫 번째 시도에 올바른 코드를 생성하기 위한 구조화된 작업 지시서
- generate-prp로 생성 → 검토/수정 → execute-prp로 구현
[API 조회 필요]마커: generate 시 API 할루시네이션 방지- 기존 examples/ 패턴을 명시적으로 참조
- HmEG 특화 규칙 (using 블록, try/catch)을 Gotchas에 명시
- 검증 게이트: 각 단계별 확인 기준 정의