# Unity 프로젝트 워크플로우 가이드
## 📋 개요
Unity 게임 개발 프로젝트에서 PRD, TRD, Todo 문서를 활용한 체계적인 개발 워크플로우를 제시하는 가이드입니다.
## 🔄 전체 개발 워크플로우
```mermaid
graph TD
A[프로젝트 시작] --> B[PRD 작성]
B --> C[이해관계자 검토]
C --> D{PRD 승인?}
D -->|No| B
D -->|Yes| E[TRD 작성]
E --> F[기술 검토]
F --> G{TRD 승인?}
G -->|No| E
G -->|Yes| H[스프린트 계획]
H --> I[Todo 생성]
I --> J[개발 진행]
J --> K[일일 스크럼]
K --> L{스프린트 완료?}
L -->|No| J
L -->|Yes| M[스프린트 리뷰]
M --> N[회고]
N --> O{프로젝트 완료?}
O -->|No| H
O -->|Yes| P[프로젝트 완료]
```
## 1️⃣ 프로젝트 시작 단계
### 📋 PRD (Product Requirements Document) 작성
#### 작성 책임자
- **주 담당자**: 기획자 또는 프로덕트 오너
- **참여자**: 개발 리드, 아트 디렉터, 마케팅 담당자
#### 작성 프로세스
```
1. 비즈니스 요구사항 분석
↓
2. 사용자 리서치 및 페르소나 정의
↓
3. 핵심 기능 정의 및 우선순위 결정
↓
4. Unity 특화 요구사항 정의
↓
5. 일정 및 리소스 계획
```
#### 체크포인트
- [ ] 비즈니스 목표가 명확히 정의되었는가?
- [ ] 타겟 사용자층이 구체적으로 식별되었는가?
- [ ] 핵심 기능과 부가 기능이 명확히 분류되었는가?
- [ ] 성공 지표(KPI)가 측정 가능하게 정의되었는가?
- [ ] Unity 플랫폼별 요구사항이 포함되었는가?
#### 이해관계자 검토
```
기획자 → 개발 리드 → 아트 디렉터 → 마케팅 → 경영진
↓ ↓ ↓ ↓ ↓
피드백 수집 → 수정 반영 → 재검토 → 최종 승인
```
## 2️⃣ 기술 설계 단계
### 🔧 TRD (Technical Requirements Document) 작성
#### 작성 책임자
- **주 담당자**: 기술 리드 또는 시니어 개발자
- **참여자**: 개발팀 전체, 인프라 담당자
#### 작성 프로세스
```
1. PRD 분석 및 기술적 요구사항 추출
↓
2. 아키텍처 설계 (MVVM + DI + 메시징)
↓
3. 기술 스택 및 라이브러리 선정 (R3, UniTask, VContainer, MessagePipe, Google Protobuf)
↓
4. 네트워크 통신 및 데이터 직렬화 설계 (Protobuf 스키마)
↓
5. 성능 요구사항 및 최적화 계획
↓
6. 개발 환경 및 빌드 프로세스 정의
```
#### Unity 특화 고려사항
- **아키텍처 패턴**: MVVM 패턴을 중심으로 한 모듈화
- **의존성 주입**: VContainer를 활용한 DI 설계
- **메시징 시스템**: MessagePipe를 통한 모듈 간 통신
- **비동기 처리**: UniTask 활용한 성능 최적화
- **반응형 프로그래밍**: R3(UniRx) 활용한 이벤트 처리
- **데이터 직렬화**: Google Protobuf를 통한 고성능 네트워크 통신
#### 기술 검토 프로세스
```
기술 리드 작성 → 시니어 개발자 검토 → 팀 전체 리뷰 → 최종 승인
↓ ↓ ↓ ↓
기술 검증 → 구현 가능성 평가 → 리스크 식별 → 대응 방안 수립
```
## 3️⃣ 개발 계획 단계
### 📅 스프린트 계획 (Sprint Planning)
#### 참여자
- **스크럼 마스터**: 진행 및 촉진
- **프로덕트 오너**: 우선순위 결정
- **개발팀**: 작업 분해 및 추정
#### 계획 프로세스
```
1. 백로그 정리 및 우선순위 확인
↓
2. 팀 벨로시티 및 용량 계산
↓
3. 사용자 스토리 분해 및 태스크 생성
↓
4. 스토리 포인트 추정 (Planning Poker)
↓
5. 스프린트 목표 설정
```
#### 사용자 스토리 분해 예시
```
Epic: 플레이어 시스템
├── User Story: 플레이어 캐릭터 생성
│ ├── Task: Character Model 클래스 구현
│ ├── Task: CharacterView UI 작성
│ ├── Task: CharacterViewModel 바인딩
│ └── Task: 캐릭터 생성 테스트 작성
├── User Story: 플레이어 스탯 관리
│ ├── Task: StatsModel ScriptableObject 작성
│ ├── Task: StatsViewModel 구현
│ └── Task: 스탯 UI 연결
```
### ✅ Todo 작업 생성
#### Todo 작성 원칙
1. **SMART 원칙**: Specific, Measurable, Achievable, Relevant, Time-bound
2. **단일 책임**: 하나의 Todo는 하나의 기능만 담당
3. **명확한 완료 조건**: 체크 가능한 구체적 기준 제시
4. **의존성 명시**: 다른 작업과의 관계 명확히 표시
#### 우선순위 분류 (아이젠하워 매트릭스)
```
🔥 긴급 & 중요 (Do First)
├── 게임 크래시 버그 수정
├── 빌드 실패 이슈 해결
└── 데드라인 임박 핵심 기능
📈 중요 & 비긴급 (Schedule)
├── 핵심 게임플레이 구현
├── 아키텍처 개선
└── 성능 최적화
⚡ 긴급 & 비중요 (Delegate)
├── 사소한 UI 버그
├── 문서 업데이트
└── 환경 설정 이슈
📝 비긴급 & 비중요 (Eliminate)
├── 추가 기능
├── 실험적 기능
└── 불필요한 최적화
```
## 4️⃣ 개발 실행 단계
### 🔄 일일 워크플로우
#### 일일 스크럼 (Daily Scrum)
**시간**: 매일 오전 9:00 (15분)
**형식**: 3가지 질문 기반
1. **어제 무엇을 했는가?**
- 완료한 Todo 항목 공유
- 구현한 기능이나 해결한 문제점
2. **오늘 무엇을 할 것인가?**
- 계획된 Todo 항목
- 예상 소요 시간 및 완료 목표
3. **차단 요소가 있는가?**
- 진행을 막는 기술적/인적 문제
- 도움이 필요한 부분
#### 작업 진행 프로세스
```
Todo 선택 → 브랜치 생성 → 개발 → 로컬 테스트 → PR 생성 → 코드 리뷰 → 병합 → Todo 완료
```
#### 코드 리뷰 체크리스트
- [ ] **Unity 코딩 표준 준수**: 네이밍 규칙, 들여쓰기 등
- [ ] **MVVM 패턴 적용**: View-ViewModel-Model 분리
- [ ] **성능 최적화**: GetComponent 캐싱, GC 최소화
- [ ] **메모리 관리**: 이벤트 구독 해제, 오브젝트 풀링
- [ ] **테스트 커버리지**: 단위 테스트 작성 여부
- [ ] **문서화**: 주석 및 README 업데이트
### 📊 진행 상황 추적
#### 칸반 보드 운영
```
📋 Backlog → 🔄 In Progress → 👀 Review → ✅ Done
↑ ↑ ↑ ↑
새로운 작업 진행 중 작업 리뷰 대기 완료된 작업
```
#### 번다운 차트 관리
- **업데이트 주기**: 매일 스크럼 후
- **추적 항목**: 남은 스토리 포인트, 완료된 작업
- **경고 기준**: 이상적 번다운 대비 20% 이상 지연
## 5️⃣ 스프린트 완료 단계
### 📊 스프린트 리뷰 (Sprint Review)
#### 참여자
- **개발팀**: 구현 내용 데모
- **프로덕트 오너**: 수용 여부 결정
- **이해관계자**: 피드백 제공
#### 리뷰 프로세스
```
1. 스프린트 목표 달성도 확인
↓
2. 완료된 기능 데모
↓
3. 이해관계자 피드백 수집
↓
4. 백로그 우선순위 재조정
↓
5. 다음 스프린트 방향성 논의
```
#### 데모 가이드라인
- **실제 기기에서 시연**: Unity 에디터가 아닌 빌드 버전
- **사용자 시나리오 기반**: 실제 사용 패턴 시연
- **성능 지표 포함**: FPS, 로딩 시간 등 수치 제시
### 🔄 스프린트 회고 (Sprint Retrospective)
#### 참여자: 개발팀만 (Scrum Team)
#### 회고 형식: Start-Stop-Continue
**Start (시작할 것)**
- 새로 도입하면 좋을 프로세스나 도구
- 팀 생산성 향상을 위한 아이디어
**Stop (중단할 것)**
- 비효율적이거나 방해가 되는 요소
- 시간 낭비를 유발하는 활동
**Continue (지속할 것)**
- 잘 작동하고 있는 프로세스
- 팀에 도움이 되는 관행들
#### 액션 아이템 도출
- [ ] **구체적 개선 사항**: [내용] - 담당자: [이름] - 기한: [날짜]
- [ ] **실험적 시도**: [내용] - 담당자: [이름] - 기한: [날짜]
## 6️⃣ 품질 관리 프로세스
### 🧪 테스트 전략
#### 테스트 피라미드
```
/\
/ \
/ UI \ ← End-to-End Tests (적은 수)
/______\
/ \
/Integration\ ← Integration Tests (중간 수)
/__________\
/ \
/ Unit Tests \ ← Unit Tests (많은 수)
/______________\
```
#### Unity 특화 테스트
- **Play Mode Tests**: 실제 게임 환경에서의 통합 테스트
- **Edit Mode Tests**: 로직 중심의 단위 테스트
- **Performance Tests**: 성능 및 메모리 사용량 테스트
### 📋 Definition of Done (완료 기준)
#### 개발 완료 기준
- [ ] 기능 구현 완료 (수용 기준 100% 충족)
- [ ] 단위 테스트 작성 및 통과 (커버리지 80% 이상)
- [ ] 코드 리뷰 완료 및 승인 (최소 2명)
- [ ] 정적 분석 도구 통과 (Linting, 컴파일 경고 0개)
#### 품질 검증 기준
- [ ] 통합 테스트 통과
- [ ] 성능 기준 충족 (목표 FPS, 메모리 사용량)
- [ ] UI/UX 가이드라인 준수
- [ ] 접근성 기준 충족 (다국어, 색약 지원 등)
#### 배포 준비 기준
- [ ] QA 테스트 통과
- [ ] 문서 업데이트 완료 (API 문서, 사용자 매뉴얼)
- [ ] 빌드 스크립트 검증
- [ ] 프로덕트 오너 최종 승인
## 7️⃣ 위기 대응 프로세스
### ⚠️ 차단 요소 해결
#### 즉시 대응 (24시간 내)
- **크리티컬 버그**: 게임 크래시, 데이터 손실
- **빌드 실패**: CI/CD 파이프라인 중단
- **외부 의존성 문제**: 라이브러리 오류, API 장애
#### 해결 프로세스
```
문제 발생 → 즉시 보고 → 원인 분석 → 우선순위 조정 → 해결 → 사후 검토
↓ ↓ ↓ ↓ ↓ ↓
이슈 생성 → 담당자 지정 → 임시 방안 → 근본 해결 → 테스트 → 문서화
```
### 📈 리스크 관리
#### Unity 개발 특화 리스크
- **메모리 부족**: 모바일 플랫폼에서 메모리 사용량 초과
- **성능 저하**: 목표 FPS 미달성
- **플랫폼 호환성**: 다양한 디바이스 대응 문제
- **에셋 관리**: 용량 초과, 로딩 시간 지연
#### 대응 전략
1. **예방**: 정기적 성능 테스트, 코드 리뷰
2. **완화**: 프로토타입으로 미리 검증
3. **전가**: 외부 라이브러리나 외주 활용
4. **수용**: 발생 시 대응 계획 수립
## 8️⃣ 도구 및 환경
### 🛠️ 개발 도구 통합
#### 버전 관리
- **Git**: 소스 코드 및 문서 버전 관리
- **Git LFS**: 대용량 에셋 관리 (아트, 오디오)
- **브랜치 전략**: Git Flow 기반
#### 프로젝트 관리
- **GitHub Issues**: 버그 리포트, 기능 요청
- **GitHub Projects**: 칸반 보드, 마일스톤 관리
- **Slack/Discord**: 팀 커뮤니케이션
#### CI/CD 파이프라인
```
코드 커밋 → 자동 빌드 → 자동 테스트 → 배포 → 알림
↓ ↓ ↓ ↓ ↓
Git Hook → Unity Cloud → Test Runner → Deployment → Team Notification
```
### 📊 모니터링 및 분석
#### 개발 메트릭스
- **코드 품질**: SonarQube를 통한 정적 분석
- **테스트 커버리지**: 단위 테스트 커버리지 추적
- **빌드 성공률**: CI/CD 파이프라인 성공률
#### 팀 생산성
- **벨로시티**: 스프린트별 완료 스토리 포인트
- **리드 타임**: 작업 시작부터 완료까지 시간
- **사이클 타임**: 실제 작업 진행 시간
## 🎓 베스트 프랙티스
### 📝 문서 관리
- **실시간 업데이트**: 변경사항 발생 시 즉시 문서 반영
- **버전 관리**: 중요 문서는 버전 히스토리 유지
- **접근성**: 모든 팀원이 쉽게 접근 가능한 위치에 저장
### 🤝 팀 협업
- **투명한 소통**: 진행 상황과 문제점 공유
- **지식 공유**: 정기적인 기술 세미나나 코드 리뷰
- **지속적 개선**: 회고를 통한 프로세스 개선
### 🔧 기술적 우수 사례
- **모듈화**: 기능별로 독립적인 모듈 설계
- **테스트 자동화**: 지속적인 품질 보증
- **성능 모니터링**: 정기적인 프로파일링
---
## 📚 참고 자료
- [Scrum Guide](https://scrumguides.org/)
- [Unity Best Practices](https://docs.unity3d.com/Manual/BestPractice.html)
- [Agile Manifesto](https://agilemanifesto.org/)
- [Clean Code 원칙](https://clean-code-developer.com/)
---
*최종 업데이트: 2024-01-03*
*작성자: Unity Development Team*
*버전: v1.0*