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.
Files changed (63) hide show
  1. package/bin/create.js +97 -40
  2. package/package.json +5 -2
  3. package/template/.claude/CLAUDE.md +0 -7
  4. package/template/.claude/commands/CLAUDE.md +0 -0
  5. package/template/.claude/hooks/CLAUDE.md +0 -0
  6. package/template/.claude/skills/ai-collaboration/CLAUDE.md +0 -0
  7. package/template/.claude/skills/auto-checkpoint/CLAUDE.md +0 -0
  8. package/template/.claude/skills/context-compression/CLAUDE.md +0 -0
  9. package/template/.claude/skills/context-compression/prompts/CLAUDE.md +0 -0
  10. package/template/.claude/skills/output-validator/CLAUDE.md +0 -0
  11. package/template/.claude/skills/smart-handoff/CLAUDE.md +0 -0
  12. package/template/.claude/skills/stage-transition/CLAUDE.md +0 -0
  13. package/template/.claude/skills/stage-transition/prompts/CLAUDE.md +0 -0
  14. package/template/config/CLAUDE.md +0 -0
  15. package/template/scripts/CLAUDE.md +0 -0
  16. package/template/stages/01-brainstorm/HANDOFF.md +0 -110
  17. package/template/stages/01-brainstorm/inputs/CLAUDE.md +0 -0
  18. package/template/stages/01-brainstorm/inputs/project_brief.md +0 -40
  19. package/template/stages/01-brainstorm/outputs/CLAUDE.md +0 -0
  20. package/template/stages/01-brainstorm/outputs/ideas.md +0 -159
  21. package/template/stages/01-brainstorm/outputs/requirements_analysis.md +0 -222
  22. package/template/stages/01-brainstorm/prompts/CLAUDE.md +0 -0
  23. package/template/stages/01-brainstorm/templates/CLAUDE.md +0 -0
  24. package/template/stages/02-research/HANDOFF.md +0 -158
  25. package/template/stages/02-research/outputs/CLAUDE.md +0 -0
  26. package/template/stages/02-research/outputs/feasibility_report.md +0 -176
  27. package/template/stages/02-research/outputs/tech_research.md +0 -403
  28. package/template/stages/02-research/prompts/CLAUDE.md +0 -0
  29. package/template/stages/03-planning/HANDOFF.md +0 -168
  30. package/template/stages/03-planning/outputs/CLAUDE.md +0 -0
  31. package/template/stages/03-planning/outputs/architecture.md +0 -400
  32. package/template/stages/03-planning/outputs/implementation.yaml +0 -209
  33. package/template/stages/03-planning/outputs/project_plan.md +0 -204
  34. package/template/stages/03-planning/outputs/tech_stack.md +0 -176
  35. package/template/stages/03-planning/prompts/CLAUDE.md +0 -0
  36. package/template/stages/04-ui-ux/HANDOFF.md +0 -165
  37. package/template/stages/04-ui-ux/outputs/CLAUDE.md +0 -0
  38. package/template/stages/04-ui-ux/outputs/design_system.md +0 -449
  39. package/template/stages/04-ui-ux/outputs/user_flows.md +0 -321
  40. package/template/stages/04-ui-ux/outputs/wireframes.md +0 -241
  41. package/template/stages/04-ui-ux/prompts/CLAUDE.md +0 -0
  42. package/template/stages/05-task-management/HANDOFF.md +0 -187
  43. package/template/stages/05-task-management/outputs/CLAUDE.md +0 -0
  44. package/template/stages/05-task-management/outputs/milestones.md +0 -253
  45. package/template/stages/05-task-management/outputs/sprint_plan.md +0 -203
  46. package/template/stages/05-task-management/outputs/tasks.md +0 -402
  47. package/template/stages/05-task-management/prompts/CLAUDE.md +0 -0
  48. package/template/stages/05-task-management/templates/CLAUDE.md +0 -0
  49. package/template/stages/06-implementation/HANDOFF.md +0 -184
  50. package/template/stages/06-implementation/prompts/CLAUDE.md +0 -0
  51. package/template/stages/07-refactoring/HANDOFF.md +0 -82
  52. package/template/stages/07-refactoring/outputs/refactoring_report.md +0 -102
  53. package/template/stages/07-refactoring/prompts/CLAUDE.md +0 -0
  54. package/template/stages/08-qa/HANDOFF.md +0 -114
  55. package/template/stages/08-qa/outputs/qa_report.md +0 -138
  56. package/template/stages/08-qa/prompts/CLAUDE.md +0 -0
  57. package/template/stages/09-testing/HANDOFF.md +0 -118
  58. package/template/stages/09-testing/outputs/test_report.md +0 -146
  59. package/template/stages/09-testing/prompts/CLAUDE.md +0 -0
  60. package/template/stages/10-deployment/HANDOFF.md +0 -141
  61. package/template/stages/10-deployment/prompts/CLAUDE.md +0 -0
  62. package/template/stages/10-deployment/templates/CLAUDE.md +0 -0
  63. 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
- | **์ตœ์ข… ๊ฒฐ์ •** | โœ… **๊ฐœ๋ฐœ ์ง„ํ–‰ ์Šน์ธ** |