create-ax-project 1.0.0 โ 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/create.js +97 -40
- package/package.json +5 -2
- package/template/.claude/CLAUDE.md +0 -7
- package/template/.claude/commands/CLAUDE.md +0 -0
- package/template/.claude/hooks/CLAUDE.md +0 -0
- package/template/.claude/skills/ai-collaboration/CLAUDE.md +0 -0
- package/template/.claude/skills/auto-checkpoint/CLAUDE.md +0 -0
- package/template/.claude/skills/context-compression/CLAUDE.md +0 -0
- package/template/.claude/skills/context-compression/prompts/CLAUDE.md +0 -0
- package/template/.claude/skills/output-validator/CLAUDE.md +0 -0
- package/template/.claude/skills/smart-handoff/CLAUDE.md +0 -0
- package/template/.claude/skills/stage-transition/CLAUDE.md +0 -0
- package/template/.claude/skills/stage-transition/prompts/CLAUDE.md +0 -0
- package/template/config/CLAUDE.md +0 -0
- package/template/scripts/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/HANDOFF.md +0 -110
- package/template/stages/01-brainstorm/inputs/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/inputs/project_brief.md +0 -40
- package/template/stages/01-brainstorm/outputs/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/outputs/ideas.md +0 -159
- package/template/stages/01-brainstorm/outputs/requirements_analysis.md +0 -222
- package/template/stages/01-brainstorm/prompts/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/templates/CLAUDE.md +0 -0
- package/template/stages/02-research/HANDOFF.md +0 -158
- package/template/stages/02-research/outputs/CLAUDE.md +0 -0
- package/template/stages/02-research/outputs/feasibility_report.md +0 -176
- package/template/stages/02-research/outputs/tech_research.md +0 -403
- package/template/stages/02-research/prompts/CLAUDE.md +0 -0
- package/template/stages/03-planning/HANDOFF.md +0 -168
- package/template/stages/03-planning/outputs/CLAUDE.md +0 -0
- package/template/stages/03-planning/outputs/architecture.md +0 -400
- package/template/stages/03-planning/outputs/implementation.yaml +0 -209
- package/template/stages/03-planning/outputs/project_plan.md +0 -204
- package/template/stages/03-planning/outputs/tech_stack.md +0 -176
- package/template/stages/03-planning/prompts/CLAUDE.md +0 -0
- package/template/stages/04-ui-ux/HANDOFF.md +0 -165
- package/template/stages/04-ui-ux/outputs/CLAUDE.md +0 -0
- package/template/stages/04-ui-ux/outputs/design_system.md +0 -449
- package/template/stages/04-ui-ux/outputs/user_flows.md +0 -321
- package/template/stages/04-ui-ux/outputs/wireframes.md +0 -241
- package/template/stages/04-ui-ux/prompts/CLAUDE.md +0 -0
- package/template/stages/05-task-management/HANDOFF.md +0 -187
- package/template/stages/05-task-management/outputs/CLAUDE.md +0 -0
- package/template/stages/05-task-management/outputs/milestones.md +0 -253
- package/template/stages/05-task-management/outputs/sprint_plan.md +0 -203
- package/template/stages/05-task-management/outputs/tasks.md +0 -402
- package/template/stages/05-task-management/prompts/CLAUDE.md +0 -0
- package/template/stages/05-task-management/templates/CLAUDE.md +0 -0
- package/template/stages/06-implementation/HANDOFF.md +0 -184
- package/template/stages/06-implementation/prompts/CLAUDE.md +0 -0
- package/template/stages/07-refactoring/HANDOFF.md +0 -82
- package/template/stages/07-refactoring/outputs/refactoring_report.md +0 -102
- package/template/stages/07-refactoring/prompts/CLAUDE.md +0 -0
- package/template/stages/08-qa/HANDOFF.md +0 -114
- package/template/stages/08-qa/outputs/qa_report.md +0 -138
- package/template/stages/08-qa/prompts/CLAUDE.md +0 -0
- package/template/stages/09-testing/HANDOFF.md +0 -118
- package/template/stages/09-testing/outputs/test_report.md +0 -146
- package/template/stages/09-testing/prompts/CLAUDE.md +0 -0
- package/template/stages/10-deployment/HANDOFF.md +0 -141
- package/template/stages/10-deployment/prompts/CLAUDE.md +0 -0
- package/template/stages/10-deployment/templates/CLAUDE.md +0 -0
- package/template/state/templates/CLAUDE.md +0 -0
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
# ๐ Snake Game - ์๊ตฌ์ฌํญ ๋ถ์
|
|
2
|
-
|
|
3
|
-
> ์์ฑ์ผ: 2026-01-21
|
|
4
|
-
> ์คํ
์ด์ง: 01-brainstorm
|
|
5
|
-
> ํ๋ก์ ํธ: snake-game
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. ๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ (Functional Requirements)
|
|
10
|
-
|
|
11
|
-
### FR-01: ๊ฒ์ ์์/์ข
๋ฃ
|
|
12
|
-
| ID | ์๊ตฌ์ฌํญ | ์์ธ | ์ฐ์ ์์ |
|
|
13
|
-
|----|---------|------|---------|
|
|
14
|
-
| FR-01-1 | ๊ฒ์ ์์ | ์์ ๋ฒํผ ํด๋ฆญ ๋๋ ์คํ์ด์ค๋ฐ๋ก ๊ฒ์ ์์ | ํ์ |
|
|
15
|
-
| FR-01-2 | ๊ฒ์ ์ข
๋ฃ | ์ถฉ๋ ์ ๊ฒ์ ์ค๋ฒ ํ๋ฉด ํ์ | ํ์ |
|
|
16
|
-
| FR-01-3 | ์ฌ์์ | ๊ฒ์ ์ค๋ฒ ํ ์ฌ์์ ๋ฒํผ ์ ๊ณต | ํ์ |
|
|
17
|
-
| FR-01-4 | ์ผ์์ ์ง | Pํค ๋๋ ๋ฒํผ์ผ๋ก ์ผ์์ ์ง/์ฌ๊ฐ | ์ค์ |
|
|
18
|
-
|
|
19
|
-
### FR-02: ๋ฑ ์กฐ์
|
|
20
|
-
| ID | ์๊ตฌ์ฌํญ | ์์ธ | ์ฐ์ ์์ |
|
|
21
|
-
|----|---------|------|---------|
|
|
22
|
-
| FR-02-1 | ํค๋ณด๋ ์กฐ์ | ๋ฐฉํฅํค(โโโโ)๋ก ์ด๋ ๋ฐฉํฅ ๋ณ๊ฒฝ | ํ์ |
|
|
23
|
-
| FR-02-2 | ํฐ์น ์กฐ์ | ์ค์์ดํ ๋๋ ๋ฐฉํฅ ๋ฒํผ์ผ๋ก ์กฐ์ | ์ค์ |
|
|
24
|
-
| FR-02-3 | ์ฐ์ ์ด๋ | ๋ฑ์ ์๋์ผ๋ก ํ์ฌ ๋ฐฉํฅ์ผ๋ก ์ด๋ | ํ์ |
|
|
25
|
-
| FR-02-4 | ๋ฐ๋ ๋ฐฉํฅ ์ ํ | ์ฆ์ ๋ฐ๋ ๋ฐฉํฅ ์ด๋ ๋ถ๊ฐ (์๊ธฐ ์ถฉ๋ ๋ฐฉ์ง) | ํ์ |
|
|
26
|
-
|
|
27
|
-
### FR-03: ๋จน์ด ์์คํ
|
|
28
|
-
| ID | ์๊ตฌ์ฌํญ | ์์ธ | ์ฐ์ ์์ |
|
|
29
|
-
|----|---------|------|---------|
|
|
30
|
-
| FR-03-1 | ๋จน์ด ์์ฑ | ๊ฒ์ ๋ณด๋ ๋ด ๋๋ค ์์น์ ๋จน์ด ์์ฑ | ํ์ |
|
|
31
|
-
| FR-03-2 | ๋จน์ด ํ๋ | ๋ฑ ๋จธ๋ฆฌ๊ฐ ๋จน์ด์ ์ถฉ๋ ์ ํ๋ | ํ์ |
|
|
32
|
-
| FR-03-3 | ์ฑ์ฅ | ๋จน์ด ํ๋ ์ ๋ฑ ๊ธธ์ด +1 | ํ์ |
|
|
33
|
-
| FR-03-4 | ์ ๋จน์ด | ๋จน์ด ํ๋ ํ ์ฆ์ ์ ๋จน์ด ์์ฑ | ํ์ |
|
|
34
|
-
|
|
35
|
-
### FR-04: ์ถฉ๋ ๊ฐ์ง
|
|
36
|
-
| ID | ์๊ตฌ์ฌํญ | ์์ธ | ์ฐ์ ์์ |
|
|
37
|
-
|----|---------|------|---------|
|
|
38
|
-
| FR-04-1 | ๋ฒฝ ์ถฉ๋ | ๋ณด๋ ๊ฒฝ๊ณ ์ถฉ๋ ์ ๊ฒ์ ์ค๋ฒ | ํ์ |
|
|
39
|
-
| FR-04-2 | ์๊ธฐ ์ถฉ๋ | ๋ฑ์ด ์๊ธฐ ๋ชธ๊ณผ ์ถฉ๋ ์ ๊ฒ์ ์ค๋ฒ | ํ์ |
|
|
40
|
-
| FR-04-3 | ์ฅ์ ๋ฌผ ์ถฉ๋ | (์ ํ) ์ฅ์ ๋ฌผ๊ณผ ์ถฉ๋ ์ ๊ฒ์ ์ค๋ฒ | ์ ํ |
|
|
41
|
-
|
|
42
|
-
### FR-05: ์ ์ ์์คํ
|
|
43
|
-
| ID | ์๊ตฌ์ฌํญ | ์์ธ | ์ฐ์ ์์ |
|
|
44
|
-
|----|---------|------|---------|
|
|
45
|
-
| FR-05-1 | ์ ์ ํ์ | ํ์ฌ ์ ์ ์ค์๊ฐ ํ์ | ํ์ |
|
|
46
|
-
| FR-05-2 | ์ ์ ๊ณ์ฐ | ๋จน์ด๋น 10์ (๋ ๋ฒจ์ ๋ฐ๋ผ ๋ณด๋์ค) | ํ์ |
|
|
47
|
-
| FR-05-3 | ์ต๊ณ ์ ์ | ์ต๊ณ ์ ์ ์ ์ฅ ๋ฐ ํ์ | ์ค์ |
|
|
48
|
-
| FR-05-4 | ์ ์ ์ ์ฅ | localStorage์ ํ์ด์ค์ฝ์ด ์ ์ฅ | ์ค์ |
|
|
49
|
-
|
|
50
|
-
### FR-06: ๋ ๋ฒจ ์์คํ
|
|
51
|
-
| ID | ์๊ตฌ์ฌํญ | ์์ธ | ์ฐ์ ์์ |
|
|
52
|
-
|----|---------|------|---------|
|
|
53
|
-
| FR-06-1 | ๋ ๋ฒจ ํ์ | ํ์ฌ ๋ ๋ฒจ ํ์ | ์ค์ |
|
|
54
|
-
| FR-06-2 | ๋ ๋ฒจ์
์กฐ๊ฑด | 50์ ๋ง๋ค ๋ ๋ฒจ ์ฆ๊ฐ | ์ค์ |
|
|
55
|
-
| FR-06-3 | ์๋ ์ฆ๊ฐ | ๋ ๋ฒจ๋น 10% ์๋ ์ฆ๊ฐ | ์ค์ |
|
|
56
|
-
| FR-06-4 | ์ต๋ ๋ ๋ฒจ | ๋ ๋ฒจ 10 ์ดํ ์๋ ๊ณ ์ | ์ค์ |
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## 2. ๋น๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ (Non-Functional Requirements)
|
|
61
|
-
|
|
62
|
-
### NFR-01: ์ฑ๋ฅ
|
|
63
|
-
| ID | ์๊ตฌ์ฌํญ | ๋ชฉํ | ์ธก์ ๋ฐฉ๋ฒ |
|
|
64
|
-
|----|---------|------|----------|
|
|
65
|
-
| NFR-01-1 | ํ๋ ์๋ ์ดํธ | 60fps ์ ์ง | Chrome DevTools |
|
|
66
|
-
| NFR-01-2 | ์ด๊ธฐ ๋ก๋ฉ | 2์ด ์ด๋ด | Lighthouse |
|
|
67
|
-
| NFR-01-3 | ์
๋ ฅ ์ง์ฐ | 16ms ์ด๋ด | ์๋ ํ
์คํธ |
|
|
68
|
-
| NFR-01-4 | ๋ฒ๋ค ํฌ๊ธฐ | 200KB ์ดํ | ๋น๋ ๋ถ์ |
|
|
69
|
-
|
|
70
|
-
### NFR-02: ํธํ์ฑ
|
|
71
|
-
| ID | ์๊ตฌ์ฌํญ | ๋์ | ๋น๊ณ |
|
|
72
|
-
|----|---------|------|------|
|
|
73
|
-
| NFR-02-1 | ๋ฐ์คํฌํฑ ๋ธ๋ผ์ฐ์ | Chrome, Firefox, Safari, Edge ์ต์ 2๋ฒ์ | |
|
|
74
|
-
| NFR-02-2 | ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ | iOS Safari, Android Chrome | |
|
|
75
|
-
| NFR-02-3 | ํ๋ฉด ํฌ๊ธฐ | 320px ~ 1920px | ๋ฐ์ํ |
|
|
76
|
-
|
|
77
|
-
### NFR-03: ์ ๊ทผ์ฑ
|
|
78
|
-
| ID | ์๊ตฌ์ฌํญ | ์์ธ |
|
|
79
|
-
|----|---------|------|
|
|
80
|
-
| NFR-03-1 | ํค๋ณด๋ ๋ค๋น๊ฒ์ด์
| ๋ชจ๋ UI ํค๋ณด๋๋ก ์ ๊ทผ ๊ฐ๋ฅ |
|
|
81
|
-
| NFR-03-2 | ์์ ๋๋น | WCAG AA ๊ธฐ์ค ์ถฉ์กฑ |
|
|
82
|
-
| NFR-03-3 | ํฌ์ปค์ค ํ์ | ๋ช
ํํ ํฌ์ปค์ค ์ธ๋์ผ์ดํฐ |
|
|
83
|
-
|
|
84
|
-
### NFR-04: ์ฝ๋ ํ์ง
|
|
85
|
-
| ID | ์๊ตฌ์ฌํญ | ๊ธฐ์ค |
|
|
86
|
-
|----|---------|------|
|
|
87
|
-
| NFR-04-1 | ํ์
์์ ์ฑ | TypeScript strict ๋ชจ๋ |
|
|
88
|
-
| NFR-04-2 | ๋ฆฐํธ | ESLint ๊ท์น ํต๊ณผ |
|
|
89
|
-
| NFR-04-3 | ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง | 80% ์ด์ |
|
|
90
|
-
| NFR-04-4 | ์ฝ๋ ํฌ๋งท | Prettier ์ ์ฉ |
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## 3. ๊ธฐ์ ์ ์ ์ฝ์กฐ๊ฑด
|
|
95
|
-
|
|
96
|
-
### ํ์ ๊ธฐ์ ์คํ
|
|
97
|
-
- **ํ๋ก ํธ์๋**: React 18+
|
|
98
|
-
- **์ธ์ด**: TypeScript 5+
|
|
99
|
-
- **๋น๋ ๋๊ตฌ**: Vite
|
|
100
|
-
- **๋ ๋๋ง**: Canvas API
|
|
101
|
-
|
|
102
|
-
### ๊ธ์ง ์ฌํญ
|
|
103
|
-
- ์ธ๋ถ ๊ฒ์ ์์ง (Phaser, PixiJS ๋ฑ) ๋ฏธ์ฌ์ฉ
|
|
104
|
-
- jQuery ๋ฏธ์ฌ์ฉ
|
|
105
|
-
- ๋ฐฑ์๋ ์๋ฒ ๋ฏธ์ฌ์ฉ (์ ์ ๋ฐฐํฌ)
|
|
106
|
-
|
|
107
|
-
### ๊ถ์ฅ ์ฌํญ
|
|
108
|
-
- Custom Hook์ผ๋ก ๋ก์ง ๋ถ๋ฆฌ
|
|
109
|
-
- ์ปดํฌ๋ํธ ๋จ์ ํ
์คํธ ์์ฑ
|
|
110
|
-
- CSS Modules ๋๋ Tailwind CSS
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## 4. ๋ฐ์ดํฐ ๋ชจ๋ธ
|
|
115
|
-
|
|
116
|
-
### ๊ฒ์ ์ํ (GameState)
|
|
117
|
-
```typescript
|
|
118
|
-
interface GameState {
|
|
119
|
-
status: 'idle' | 'playing' | 'paused' | 'gameover';
|
|
120
|
-
score: number;
|
|
121
|
-
level: number;
|
|
122
|
-
highScore: number;
|
|
123
|
-
}
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### ๋ฑ (Snake)
|
|
127
|
-
```typescript
|
|
128
|
-
interface Position {
|
|
129
|
-
x: number;
|
|
130
|
-
y: number;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
interface Snake {
|
|
134
|
-
body: Position[];
|
|
135
|
-
direction: 'UP' | 'DOWN' | 'LEFT' | 'RIGHT';
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### ๋จน์ด (Food)
|
|
140
|
-
```typescript
|
|
141
|
-
interface Food {
|
|
142
|
-
position: Position;
|
|
143
|
-
type: 'normal' | 'bonus';
|
|
144
|
-
}
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### ๊ฒ์ ์ค์ (GameConfig)
|
|
148
|
-
```typescript
|
|
149
|
-
interface GameConfig {
|
|
150
|
-
boardWidth: number;
|
|
151
|
-
boardHeight: number;
|
|
152
|
-
cellSize: number;
|
|
153
|
-
initialSpeed: number;
|
|
154
|
-
speedIncrement: number;
|
|
155
|
-
}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## 5. ์ฌ์ฉ์ ์๋๋ฆฌ์ค
|
|
161
|
-
|
|
162
|
-
### ์๋๋ฆฌ์ค 1: ์ฒซ ๊ฒ์ ํ๋ ์ด
|
|
163
|
-
1. ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ ์ ์
|
|
164
|
-
2. "Start Game" ๋ฒํผ ํ์๋จ
|
|
165
|
-
3. ๋ฒํผ ํด๋ฆญ ๋๋ ์คํ์ด์ค๋ฐ๋ก ๊ฒ์ ์์
|
|
166
|
-
4. ๋ฑ์ด ํ๋ฉด ์ค์์์ ์์
|
|
167
|
-
5. ๋ฐฉํฅํค๋ก ๋ฑ ์กฐ์
|
|
168
|
-
6. ๋จน์ด๋ฅผ ๋จน์ผ๋ฉด ์ ์ ์ฆ๊ฐ
|
|
169
|
-
7. ๋ฒฝ ๋๋ ์๊ธฐ ๋ชธ๊ณผ ์ถฉ๋ํ๋ฉด ๊ฒ์ ์ค๋ฒ
|
|
170
|
-
8. "Game Over" ํ๋ฉด๊ณผ ์ต์ข
์ ์ ํ์
|
|
171
|
-
9. "Restart" ๋ฒํผ์ผ๋ก ์ฌ์์
|
|
172
|
-
|
|
173
|
-
### ์๋๋ฆฌ์ค 2: ์ต๊ณ ์ ์ ๊ฐฑ์
|
|
174
|
-
1. ๊ฒ์ ํ๋ ์ด ์ค ํ์ฌ ์ ์๊ฐ ์ต๊ณ ์ ์ ์ด๊ณผ
|
|
175
|
-
2. ํ๋ฉด์ "New High Score!" ํ์
|
|
176
|
-
3. ๊ฒ์ ์ค๋ฒ ์ ์ต๊ณ ์ ์ localStorage์ ์ ์ฅ
|
|
177
|
-
4. ๋ค์ ๊ฒ์ ์์ ์ ์ ์ฅ๋ ์ต๊ณ ์ ์ ํ์
|
|
178
|
-
|
|
179
|
-
### ์๋๋ฆฌ์ค 3: ๋ชจ๋ฐ์ผ ํ๋ ์ด
|
|
180
|
-
1. ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ก ์ ์
|
|
181
|
-
2. ํ๋ฉด์ด ๋ชจ๋ฐ์ผ ํฌ๊ธฐ์ ๋ง๊ฒ ์กฐ์ ๋จ
|
|
182
|
-
3. ํ๋ฉด ํ๋จ์ ๋ฐฉํฅ ๋ฒํผ ํ์
|
|
183
|
-
4. ํฐ์น/์ค์์ดํ๋ก ๋ฑ ์กฐ์
|
|
184
|
-
5. ์ธ๋ก ๋ชจ๋์์ ์ต์ ํ๋ ๋ ์ด์์
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## 6. ์ธ์ ๊ธฐ์ค (Acceptance Criteria)
|
|
189
|
-
|
|
190
|
-
### ๊ฒ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ
|
|
191
|
-
- [ ] ๊ฒ์ ์์ ์ ๋ฑ์ด ํ๋ฉด ์ค์์ ๋ํ๋๋ค
|
|
192
|
-
- [ ] ๋ฐฉํฅํค ์
๋ ฅ์ ๋ฐ๋ผ ๋ฑ์ด ์ฆ์ ๋ฐฉํฅ์ ๋ฐ๊พผ๋ค
|
|
193
|
-
- [ ] ๋ฑ์ด ๋จน์ด๋ฅผ ๋จน์ผ๋ฉด ๊ธธ์ด๊ฐ 1 ์ฆ๊ฐํ๋ค
|
|
194
|
-
- [ ] ๋จน์ด๋ฅผ ๋จน์ผ๋ฉด ์ ์๊ฐ 10์ ์ฆ๊ฐํ๋ค
|
|
195
|
-
- [ ] ๋ฒฝ์ ๋ถ๋ชํ๋ฉด ๊ฒ์์ด ๋๋๋ค
|
|
196
|
-
- [ ] ์๊ธฐ ๋ชธ์ ๋ถ๋ชํ๋ฉด ๊ฒ์์ด ๋๋๋ค
|
|
197
|
-
- [ ] ๊ฒ์ ์ค๋ฒ ํ ์ฌ์์ํ ์ ์๋ค
|
|
198
|
-
|
|
199
|
-
### ์ถ๊ฐ ๊ธฐ๋ฅ
|
|
200
|
-
- [ ] 50์ ๋ง๋ค ๋ ๋ฒจ์ด 1 ์ฆ๊ฐํ๋ค
|
|
201
|
-
- [ ] ๋ ๋ฒจ์ด ์ค๋ฅด๋ฉด ๋ฑ์ ์๋๊ฐ ๋นจ๋ผ์ง๋ค
|
|
202
|
-
- [ ] ์ต๊ณ ์ ์๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ค
|
|
203
|
-
- [ ] Pํค๋ฅผ ๋๋ฅด๋ฉด ์ผ์์ ์ง๋๋ค
|
|
204
|
-
- [ ] ๋ชจ๋ฐ์ผ์์ ํฐ์น๋ก ์กฐ์ํ ์ ์๋ค
|
|
205
|
-
|
|
206
|
-
### ํ์ง ๊ธฐ์ค
|
|
207
|
-
- [ ] TypeScript ํ์
์๋ฌ๊ฐ ์๋ค
|
|
208
|
-
- [ ] ESLint ๊ฒฝ๊ณ /์๋ฌ๊ฐ ์๋ค
|
|
209
|
-
- [ ] ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง 80% ์ด์
|
|
210
|
-
- [ ] 60fps๋ก ๋ถ๋๋ฝ๊ฒ ๋์ํ๋ค
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
## ๐ ์์ฝ
|
|
215
|
-
|
|
216
|
-
| ์นดํ
๊ณ ๋ฆฌ | ํ์ | ์ค์ | ์ ํ |
|
|
217
|
-
|---------|------|------|------|
|
|
218
|
-
| ๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ | 12๊ฐ | 8๊ฐ | 2๊ฐ |
|
|
219
|
-
| ๋น๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ | 8๊ฐ | 3๊ฐ | 0๊ฐ |
|
|
220
|
-
| ์ด๊ณ | 20๊ฐ | 11๊ฐ | 2๊ฐ |
|
|
221
|
-
|
|
222
|
-
**MVP ๋ฒ์**: ํ์ ์๊ตฌ์ฌํญ 20๊ฐ + ์ค์ ์๊ตฌ์ฌํญ ์ค ์ ํ 5๊ฐ
|
|
File without changes
|
|
File without changes
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
# HANDOFF: 02-research โ 03-planning
|
|
2
|
-
|
|
3
|
-
> ์์ฑ์ผ: 2026-01-21
|
|
4
|
-
> ํ๋ก์ ํธ: snake-game
|
|
5
|
-
> ํ์ฌ ์คํ
์ด์ง: 02-research (์๋ฃ)
|
|
6
|
-
> ๋ค์ ์คํ
์ด์ง: 03-planning
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## โ
์๋ฃ๋ ์์
|
|
11
|
-
|
|
12
|
-
- [x] Canvas ๊ฒ์ ๋ฃจํ ๊ตฌํ ๋ฐฉ๋ฒ ์กฐ์ฌ
|
|
13
|
-
- [x] React + Canvas ํตํฉ ํจํด ๋ถ์
|
|
14
|
-
- [x] ๋ชจ๋ฐ์ผ ํฐ์น ์ด๋ฒคํธ ์ฒ๋ฆฌ ์กฐ์ฌ
|
|
15
|
-
- [x] ์ถฉ๋ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ
|
|
16
|
-
- [x] localStorage ํ์ด์ค์ฝ์ด ๊ตฌํ ๋ฐฉ๋ฒ
|
|
17
|
-
- [x] ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฒ ์กฐ์ฌ
|
|
18
|
-
- [x] ์คํ์์ค ํ๋ก์ ํธ ์ฌ๋ก ์์ง
|
|
19
|
-
- [x] ์คํ ๊ฐ๋ฅ์ฑ ๋ณด๊ณ ์ ์์ฑ
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## ๐ ํต์ฌ ๊ธฐ์ ๊ฒฐ์ ์ฌํญ
|
|
24
|
-
|
|
25
|
-
### 1. ๋ ๋๋ง ๋ฐฉ์
|
|
26
|
-
- **์ ํ**: Canvas API
|
|
27
|
-
- **์ด์ **: ๊ฒ์ ์ฑ๋ฅ, 60fps ์ ์ง, ๋ณต์กํ ์ ๋๋ฉ์ด์
์ง์
|
|
28
|
-
- **๋์ ๊ธฐ๊ฐ**: CSS Grid (๋๋ ์์ ์ ์ฑ๋ฅ ์ ํ)
|
|
29
|
-
|
|
30
|
-
### 2. ๊ฒ์ ๋ฃจํ
|
|
31
|
-
- **์ ํ**: requestAnimationFrame
|
|
32
|
-
- **์ด์ **: ๋ธ๋ผ์ฐ์ ์ต์ ํ, ํญ ๋นํ์ฑํ ์ ์๋ ์ผ์์ ์ง
|
|
33
|
-
- **๋์ ๊ธฐ๊ฐ**: setInterval (์ ํ๋ ๋ฎ์)
|
|
34
|
-
|
|
35
|
-
### 3. ์ํ ๊ด๋ฆฌ
|
|
36
|
-
- **์ ํ**: useReducer + useRef ์กฐํฉ
|
|
37
|
-
- **์ด์ **: ๋ณต์กํ ๊ฒ์ ์ํ, ๋ฆฌ๋ ๋๋ง ์ต์ํ
|
|
38
|
-
- **ํจํด**: ๊ฒ์ ๋ก์ง์ useRef, UI ํ์์ฉ๋ง useState
|
|
39
|
-
|
|
40
|
-
### 4. ๋ชจ๋ฐ์ผ ์กฐ์
|
|
41
|
-
- **์ ํ**: Custom useSwipe ํ
+ ๋ฐฉํฅ ๋ฒํผ
|
|
42
|
-
- **์ด์ **: ๊ฒ์ฆ๋ ํจํด, ๋ ๊ฐ์ง ์
๋ ฅ ๋ฐฉ์ ๋ชจ๋ ์ง์
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## ๐ ์์ฑ๋ ์ฐ์ถ๋ฌผ
|
|
47
|
-
|
|
48
|
-
| ํ์ผ | ์ค๋ช
|
|
|
49
|
-
|------|------|
|
|
50
|
-
| `outputs/tech_research.md` | ๊ธฐ์ ๋ฆฌ์์น ์์ธ ๊ฒฐ๊ณผ |
|
|
51
|
-
| `outputs/feasibility_report.md` | ์คํ ๊ฐ๋ฅ์ฑ ๋ณด๊ณ ์ |
|
|
52
|
-
| `HANDOFF.md` | ์ด ๋ฌธ์ |
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
|
|
56
|
-
## ๐ง ๊ถ์ฅ ๊ธฐ์ ์คํ
|
|
57
|
-
|
|
58
|
-
```yaml
|
|
59
|
-
# ํ๋ก์ ํธ ๊ตฌ์กฐ
|
|
60
|
-
framework: React 18+
|
|
61
|
-
language: TypeScript 5+
|
|
62
|
-
build: Vite 5+
|
|
63
|
-
rendering: Canvas API
|
|
64
|
-
state: useReducer + useRef
|
|
65
|
-
styling: CSS Modules ๋๋ Tailwind CSS
|
|
66
|
-
testing: Vitest + React Testing Library
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## ๐ ํต์ฌ ์ฝ๋ ํจํด ์์ฝ
|
|
72
|
-
|
|
73
|
-
### ๊ฒ์ ๋ฃจํ ํ
|
|
74
|
-
```typescript
|
|
75
|
-
const useGameLoop = (callback: (deltaTime: number) => void) => {
|
|
76
|
-
const requestRef = useRef<number>();
|
|
77
|
-
const previousTimeRef = useRef<number>();
|
|
78
|
-
// ... requestAnimationFrame ๊ธฐ๋ฐ ๋ฃจํ
|
|
79
|
-
};
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### ์ค์์ดํ ๊ฐ์ง ํ
|
|
83
|
-
```typescript
|
|
84
|
-
const useSwipe = (handlers: { left, right, up, down }) => {
|
|
85
|
-
// touchstart/touchend ๊ธฐ๋ฐ ๋ฐฉํฅ ๊ฐ์ง
|
|
86
|
-
};
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### ํ์
์ ์
|
|
90
|
-
```typescript
|
|
91
|
-
type Direction = 'UP' | 'DOWN' | 'LEFT' | 'RIGHT';
|
|
92
|
-
type GameStatus = 'idle' | 'playing' | 'paused' | 'gameover';
|
|
93
|
-
interface Position { x: number; y: number; }
|
|
94
|
-
interface GameState { snake, food, direction, score, status }
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## ๐ ๋ค์ ์คํ
์ด์ง ์์
|
|
100
|
-
|
|
101
|
-
### 03-planning์์ ๊ฒฐ์ ํ ์ฌํญ
|
|
102
|
-
|
|
103
|
-
1. **์์ธ ์ํคํ
์ฒ**
|
|
104
|
-
- ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋
|
|
105
|
-
- ๋ฐ์ดํฐ ํ๋ฆ ๋ค์ด์ด๊ทธ๋จ
|
|
106
|
-
- ํ
์์กด์ฑ ๊ด๊ณ
|
|
107
|
-
|
|
108
|
-
2. **ํ์ผ ๊ตฌ์กฐ**
|
|
109
|
-
- src/ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
|
|
110
|
-
- ์ปดํฌ๋ํธ/ํ
/์ ํธ/ํ์
๋ถ๋ฆฌ
|
|
111
|
-
|
|
112
|
-
3. **๊ฒ์ ์ค์ ์์**
|
|
113
|
-
- ๋ณด๋ ํฌ๊ธฐ, ์
ํฌ๊ธฐ
|
|
114
|
-
- ์ด๊ธฐ ์๋, ์๋ ์ฆ๊ฐ๋
|
|
115
|
-
- ๋ ๋ฒจ์
์กฐ๊ฑด
|
|
116
|
-
|
|
117
|
-
4. **API ์ค๊ณ**
|
|
118
|
-
- ๊ฒ์ ์ํ ์ธํฐํ์ด์ค
|
|
119
|
-
- ์ก์
ํ์
์ ์
|
|
120
|
-
- ๋ฆฌ๋์ ๋ก์ง
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## โ ๏ธ ์ฃผ์์ฌํญ
|
|
125
|
-
|
|
126
|
-
1. **์ธ๋ถ ๊ฒ์ ์์ง ๋ฏธ์ฌ์ฉ**: Phaser, PixiJS ๋ฑ ๊ธ์ง
|
|
127
|
-
2. **์์ React ๊ตฌํ**: jQuery ๋ฏธ์ฌ์ฉ
|
|
128
|
-
3. **๋ฆฌ๋ ๋๋ง ์ต์ํ**: Canvas๋ ์ง์ ์
๋ฐ์ดํธ
|
|
129
|
-
4. **์ฑ๋ฅ ์ฐ์ **: 60fps ๋ชฉํ
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## ๐ AI ํธ์ถ ๊ธฐ๋ก
|
|
134
|
-
|
|
135
|
-
| AI | ์๊ฐ | ๋๊ตฌ | ๊ฒฐ๊ณผ | ์ํ |
|
|
136
|
-
|----|------|------|------|------|
|
|
137
|
-
| Claude | 12:10 | Exa MCP | Canvas ๊ฒ์ ๋ฃจํ ํจํด ์์ง | โ
|
|
|
138
|
-
| Claude | 12:12 | Exa MCP | ๋ชจ๋ฐ์ผ ํฐ์น ์กฐ์ ํจํด ์์ง | โ
|
|
|
139
|
-
| Claude | 12:15 | - | tech_research.md ์์ฑ | โ
|
|
|
140
|
-
| Claude | 12:16 | - | feasibility_report.md ์์ฑ | โ
|
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
## ๐ ๋ค์ ๋จ๊ณ
|
|
145
|
-
|
|
146
|
-
```bash
|
|
147
|
-
# ๋ค์ ์คํ
์ด์ง ์คํ
|
|
148
|
-
/run-stage 03-planning
|
|
149
|
-
|
|
150
|
-
# ๋๋
|
|
151
|
-
/planning
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
**์์ฑ์**: ClaudeCode
|
|
157
|
-
**๊ฒํ ์**: -
|
|
158
|
-
**์น์ธ**: ๋๊ธฐ
|
|
File without changes
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
# ๐ Snake Game - ์คํ ๊ฐ๋ฅ์ฑ ๋ณด๊ณ ์
|
|
2
|
-
|
|
3
|
-
> ์์ฑ์ผ: 2026-01-21
|
|
4
|
-
> ์คํ
์ด์ง: 02-research
|
|
5
|
-
> ํ๋ก์ ํธ: snake-game
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. ๊ธฐ์ ์ ์คํ ๊ฐ๋ฅ์ฑ
|
|
10
|
-
|
|
11
|
-
### 1.1 ์ข
ํฉ ํ๊ฐ
|
|
12
|
-
|
|
13
|
-
| ํญ๋ชฉ | ๋์ด๋ | ์คํ ๊ฐ๋ฅ์ฑ | ๋น๊ณ |
|
|
14
|
-
|------|--------|------------|------|
|
|
15
|
-
| Canvas ๋ ๋๋ง | โญโญ | โ
๋์ | ํ์ค API, ํ๋ถํ ์๋ฃ |
|
|
16
|
-
| ๊ฒ์ ๋ฃจํ | โญโญ | โ
๋์ | requestAnimationFrame ํ์ค |
|
|
17
|
-
| ํค๋ณด๋ ์
๋ ฅ | โญ | โ
๋์ | ๊ธฐ๋ณธ ์ด๋ฒคํธ ์ฒ๋ฆฌ |
|
|
18
|
-
| ํฐ์น ์
๋ ฅ | โญโญ | โ
๋์ | ๊ฒ์ฆ๋ ํจํด ์กด์ฌ |
|
|
19
|
-
| ์ถฉ๋ ๊ฐ์ง | โญ | โ
๋์ | ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ |
|
|
20
|
-
| ์ํ ๊ด๋ฆฌ | โญโญ | โ
๋์ | useReducer ํ์ฉ |
|
|
21
|
-
| localStorage | โญ | โ
๋์ | ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ API |
|
|
22
|
-
| ๋ฐ์ํ ๋์์ธ | โญโญ | โ
๋์ | CSS + JS ์กฐํฉ |
|
|
23
|
-
|
|
24
|
-
**์ข
ํฉ ํ๊ฐ**: โ
**๋์ ์คํ ๊ฐ๋ฅ์ฑ**
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
### 1.2 ๊ธฐ์ ์คํ ์ ํฉ์ฑ
|
|
29
|
-
|
|
30
|
-
| ๊ธฐ์ | ์ ํ ์ด์ | ๋์ | ๋ฆฌ์คํฌ |
|
|
31
|
-
|------|----------|------|--------|
|
|
32
|
-
| React 18 | ์ปดํฌ๋ํธ ๊ธฐ๋ฐ, ํ
์์คํ
| Vue, Svelte | ๋ฎ์ |
|
|
33
|
-
| TypeScript | ํ์
์์ ์ฑ, IDE ์ง์ | JavaScript | ๋ฎ์ |
|
|
34
|
-
| Vite | ๋น ๋ฅธ ๊ฐ๋ฐ ์๋ฒ, HMR | CRA, Next.js | ๋ฎ์ |
|
|
35
|
-
| Canvas API | ๊ฒ์ ๋ ๋๋ง ์ต์ ํ | CSS Grid | ๋ฎ์ |
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## 2. ๋ฆฌ์์ค ์๊ตฌ์ฌํญ
|
|
40
|
-
|
|
41
|
-
### 2.1 ๊ฐ๋ฐ ํ๊ฒฝ
|
|
42
|
-
|
|
43
|
-
| ํญ๋ชฉ | ์๊ตฌ์ฌํญ | ํ์ฌ ์ํ |
|
|
44
|
-
|------|---------|----------|
|
|
45
|
-
| Node.js | 18+ | โ
|
|
|
46
|
-
| npm/yarn | ์ต์ | โ
|
|
|
47
|
-
| IDE | VSCode + TypeScript | โ
|
|
|
48
|
-
| ๋ธ๋ผ์ฐ์ | Chrome/Firefox ์ต์ | โ
|
|
|
49
|
-
|
|
50
|
-
### 2.2 ์ธ๋ถ ์์กด์ฑ
|
|
51
|
-
|
|
52
|
-
| ํจํค์ง | ๋ฒ์ | ์ฉ๋ | ํ์ |
|
|
53
|
-
|--------|------|------|------|
|
|
54
|
-
| react | ^18.2.0 | UI ํ๋ ์์ํฌ | โ
|
|
|
55
|
-
| react-dom | ^18.2.0 | DOM ๋ ๋๋ง | โ
|
|
|
56
|
-
| typescript | ^5.0.0 | ํ์
์์คํ
| โ
|
|
|
57
|
-
| vite | ^5.0.0 | ๋น๋ ๋๊ตฌ | โ
|
|
|
58
|
-
|
|
59
|
-
**์ธ๋ถ ๊ฒ์ ์์ง ๋ถํ์** - ์์ React + Canvas๋ก ๊ตฌํ ๊ฐ๋ฅ
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## 3. ๋ฆฌ์คํฌ ํ๊ฐ
|
|
64
|
-
|
|
65
|
-
### 3.1 ๊ธฐ์ ์ ๋ฆฌ์คํฌ
|
|
66
|
-
|
|
67
|
-
| ๋ฆฌ์คํฌ | ํ๋ฅ | ์ํฅ๋ | ๋์ ๋ฐฉ์ |
|
|
68
|
-
|--------|------|--------|----------|
|
|
69
|
-
| ๋ชจ๋ฐ์ผ ์ฑ๋ฅ ์ ํ | ์ค | ์ค | Canvas ์ต์ ํ, ํ๋ ์ ์คํต |
|
|
70
|
-
| ํฐ์น ์
๋ ฅ ์ง์ฐ | ๋ฎ | ์ค | passive ๋ฆฌ์ค๋, ์ฆ์ ์๋ต |
|
|
71
|
-
| ๋ธ๋ผ์ฐ์ ํธํ์ฑ | ๋ฎ | ๋ฎ | ํด๋ฆฌํ, ๊ธฐ๋ฅ ๊ฐ์ง |
|
|
72
|
-
| ๋ฉ๋ชจ๋ฆฌ ๋์ | ๋ฎ | ์ค | cleanup ํจ์, useEffect ์ ๋ฆฌ |
|
|
73
|
-
|
|
74
|
-
### 3.2 ํ๋ก์ ํธ ๋ฆฌ์คํฌ
|
|
75
|
-
|
|
76
|
-
| ๋ฆฌ์คํฌ | ํ๋ฅ | ์ํฅ๋ | ๋์ ๋ฐฉ์ |
|
|
77
|
-
|--------|------|--------|----------|
|
|
78
|
-
| ๋ฒ์ ํ์ฅ | ์ค | ์ค | MVP ์ฐ์ , ๊ธฐ๋ฅ ๋๊ฒฐ |
|
|
79
|
-
| ํ
์คํธ ๋ถ์กฑ | ์ค | ์ค | TDD ์ ๊ทผ, ์ปค๋ฒ๋ฆฌ์ง ๋ชฉํ ์ค์ |
|
|
80
|
-
| ์ผ์ ์ง์ฐ | ๋ฎ | ๋ฎ | ๋ฒํผ ์๊ฐ ํ๋ณด |
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## 4. MVP vs ์ ์ฒด ๊ธฐ๋ฅ ๋น๊ต
|
|
85
|
-
|
|
86
|
-
### 4.1 MVP ๋ฒ์ (Phase 1)
|
|
87
|
-
|
|
88
|
-
| ๊ธฐ๋ฅ | ๋ณต์ก๋ | ์์ ์๊ฐ | ์ฐ์ ์์ |
|
|
89
|
-
|------|--------|----------|---------|
|
|
90
|
-
| ๊ธฐ๋ณธ ๋ฑ ์กฐ์ | ๋ฎ | 30๋ถ | ๐ด ํ์ |
|
|
91
|
-
| ๋จน์ด ์์คํ
| ๋ฎ | 20๋ถ | ๐ด ํ์ |
|
|
92
|
-
| ์ถฉ๋ ๊ฐ์ง | ๋ฎ | 20๋ถ | ๐ด ํ์ |
|
|
93
|
-
| ์ ์ ์์คํ
| ๋ฎ | 10๋ถ | ๐ด ํ์ |
|
|
94
|
-
| ๊ฒ์ ์ฌ์์ | ๋ฎ | 15๋ถ | ๐ด ํ์ |
|
|
95
|
-
| **์๊ณ** | - | **~1.5์๊ฐ** | - |
|
|
96
|
-
|
|
97
|
-
### 4.2 ์ถ๊ฐ ๊ธฐ๋ฅ (Phase 2)
|
|
98
|
-
|
|
99
|
-
| ๊ธฐ๋ฅ | ๋ณต์ก๋ | ์์ ์๊ฐ | ์ฐ์ ์์ |
|
|
100
|
-
|------|--------|----------|---------|
|
|
101
|
-
| ๋ ๋ฒจ ์์คํ
| ๋ฎ | 20๋ถ | ๐ก ์ค์ |
|
|
102
|
-
| ์ต๊ณ ์ ์ ์ ์ฅ | ๋ฎ | 15๋ถ | ๐ก ์ค์ |
|
|
103
|
-
| ์ผ์์ ์ง | ๋ฎ | 15๋ถ | ๐ก ์ค์ |
|
|
104
|
-
| ๋ชจ๋ฐ์ผ ํฐ์น | ์ค | 40๋ถ | ๐ก ์ค์ |
|
|
105
|
-
| **์๊ณ** | - | **~1.5์๊ฐ** | - |
|
|
106
|
-
|
|
107
|
-
### 4.3 ์ ํ ๊ธฐ๋ฅ (Phase 3)
|
|
108
|
-
|
|
109
|
-
| ๊ธฐ๋ฅ | ๋ณต์ก๋ | ์์ ์๊ฐ | ์ฐ์ ์์ |
|
|
110
|
-
|------|--------|----------|---------|
|
|
111
|
-
| ์ฌ์ด๋ ํจ๊ณผ | ์ค | 30๋ถ | ๐ข ์ ํ |
|
|
112
|
-
| ํ
๋ง/์คํจ | ์ค | 45๋ถ | ๐ข ์ ํ |
|
|
113
|
-
| ์ฅ์ ๋ฌผ ๋ชจ๋ | ์ค | 30๋ถ | ๐ข ์ ํ |
|
|
114
|
-
| **์๊ณ** | - | **~2์๊ฐ** | - |
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## 5. ์ฑ๊ณต ์งํ
|
|
119
|
-
|
|
120
|
-
### 5.1 ๊ธฐ์ ์งํ
|
|
121
|
-
|
|
122
|
-
| ์งํ | ๋ชฉํ | ์ธก์ ๋ฐฉ๋ฒ |
|
|
123
|
-
|------|------|----------|
|
|
124
|
-
| ํ๋ ์๋ ์ดํธ | 60fps | Chrome DevTools |
|
|
125
|
-
| ์ด๊ธฐ ๋ก๋ฉ | < 2์ด | Lighthouse |
|
|
126
|
-
| ๋ฒ๋ค ํฌ๊ธฐ | < 200KB | vite-bundle-visualizer |
|
|
127
|
-
| ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง | > 80% | vitest coverage |
|
|
128
|
-
|
|
129
|
-
### 5.2 ํ์ง ์งํ
|
|
130
|
-
|
|
131
|
-
| ์งํ | ๋ชฉํ | ์ธก์ ๋ฐฉ๋ฒ |
|
|
132
|
-
|------|------|----------|
|
|
133
|
-
| TypeScript ์๋ฌ | 0๊ฐ | tsc --noEmit |
|
|
134
|
-
| ESLint ๊ฒฝ๊ณ | 0๊ฐ | eslint . |
|
|
135
|
-
| ์ ๊ทผ์ฑ | WCAG AA | axe-core |
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## 6. ๊ฒฐ๋ก ๋ฐ ๊ถ์ฅ์ฌํญ
|
|
140
|
-
|
|
141
|
-
### 6.1 ์ต์ข
ํ๊ฐ
|
|
142
|
-
|
|
143
|
-
```
|
|
144
|
-
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
145
|
-
โ ์คํ ๊ฐ๋ฅ์ฑ: โ
๋งค์ฐ ๋์ โ
|
|
146
|
-
โ ๊ธฐ์ ์ ๋์ด๋: โญโญ (์คํ) โ
|
|
147
|
-
โ ๋ฆฌ์คํฌ ์์ค: ๐ข ๋ฎ์ โ
|
|
148
|
-
โ ๊ถ์ฅ ์งํ: โ
์น์ธ โ
|
|
149
|
-
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
### 6.2 ๊ถ์ฅ์ฌํญ
|
|
153
|
-
|
|
154
|
-
1. **MVP ์ฐ์ ๊ฐ๋ฐ**: ํต์ฌ ๊ธฐ๋ฅ ๋จผ์ ์์ฑ ํ ํ์ฅ
|
|
155
|
-
2. **Canvas ์ฌ์ฉ**: CSS Grid ๋์ ์ฑ๋ฅ ์ฐ์
|
|
156
|
-
3. **useRef ํ์ฉ**: ๊ฒ์ ์ํ๋ ๋ฆฌ๋ ๋๋ง ์ต์ํ
|
|
157
|
-
4. **ํ
์คํธ ๋ณํ**: ๋ก์ง ํ
์คํธ ๋จผ์ , UI ํ
์คํธ ๋์ค
|
|
158
|
-
5. **์ ์ง์ ๋ชจ๋ฐ์ผ ์ง์**: ๋ฐ์คํฌํฑ ์์ฑ ํ ํฐ์น ์ถ๊ฐ
|
|
159
|
-
|
|
160
|
-
### 6.3 ๋ค์ ๋จ๊ณ
|
|
161
|
-
|
|
162
|
-
1. **03-planning**: ์์ธ ์ํคํ
์ฒ ์ค๊ณ
|
|
163
|
-
2. **04-ui-ux**: ๊ฒ์ ํ๋ฉด ์์ด์ดํ๋ ์
|
|
164
|
-
3. **05-tasks**: ์คํ๋ฆฐํธ ๊ณํ ์๋ฆฝ
|
|
165
|
-
4. **06-implementation**: MVP ๊ฐ๋ฐ ์ฐฉ์
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## ๐ ์น์ธ
|
|
170
|
-
|
|
171
|
-
| ํญ๋ชฉ | ์ํ |
|
|
172
|
-
|------|------|
|
|
173
|
-
| ๊ธฐ์ ์ ์คํ ๊ฐ๋ฅ์ฑ | โ
ํ์ธ |
|
|
174
|
-
| ๋ฆฌ์์ค ์๊ตฌ์ฌํญ | โ
์ถฉ์กฑ |
|
|
175
|
-
| ๋ฆฌ์คํฌ ํ๊ฐ | โ
์์ฉ ๊ฐ๋ฅ |
|
|
176
|
-
| **์ต์ข
๊ฒฐ์ ** | โ
**๊ฐ๋ฐ ์งํ ์น์ธ** |
|