diff --git a/01_Archive/2026-04-20/Architecture-Design Principles.md b/01_Archive/2026-04-20/Architecture-Design Principles.md new file mode 100644 index 00000000..40f05438 --- /dev/null +++ b/01_Archive/2026-04-20/Architecture-Design Principles.md @@ -0,0 +1,17 @@ +# ๐Ÿ—๏ธ ์‹œ์Šคํ…œ ์„ค๊ณ„ ์›์น™: [ํ”„๋กœ์ ํŠธ๋ช…] ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜ ๊ฐ€์ด๋“œ๋ผ์ธ + +## ๐ŸŽฏ ๋ชฉํ‘œ: ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ (Separation of Concerns - SoC)์˜ ๊ทน๋Œ€ํ™” +์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ๋ถ€๋ถ„์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ์„œ๋กœ์—๊ฒŒ ์ตœ์†Œํ•œ์˜ ์˜ํ–ฅ๋งŒ ์ฃผ๋„๋ก ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. + +### ๐Ÿงฉ ํ•ต์‹ฌ ๋ ˆ์ด์–ด ์ •์˜ +1. **Domain Engine Layer (ํ•ต์‹ฌ ๊ทœ์น™):** + * **์—ญํ• :** ๊ฒŒ์ž„/์‹œ๋ฎฌ๋ ˆ์ด์…˜์˜ ๋ชจ๋“  ๋ฌผ๋ฆฌ์  ๊ทœ์น™(์ถฉ๋Œ, ์ค‘๋ ฅ, ์ ์ˆ˜ ๊ณ„์‚ฐ ๋“ฑ)์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. **์™ธ๋ถ€ ํ™˜๊ฒฝ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.** + * **๊ตฌํ˜„ ์›์น™:** ๋ฐ˜๋“œ์‹œ Web Worker์™€ ๊ฐ™์€ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ๊ตฌ๋™ํ•˜์—ฌ ๋ฉ”์ธ UI ์Šค๋ ˆ๋“œ์˜ ๋ถ€ํ•˜๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. +2. **State Management Layer (์ง„์‹ค์˜ ์ถœ์ฒ˜):** + * **์—ญํ• :** ์‹œ์Šคํ…œ์ด ํ˜„์žฌ ์–ด๋–ค ์ƒํƒœ์ธ์ง€(State)์— ๋Œ€ํ•œ ๋‹จ ํ•˜๋‚˜์˜ ๊ณต์‹ ๊ธฐ๋ก์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์€ ์˜ค์ง ์ด ๋ ˆ์ด์–ด๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. + * **์›์น™:** **๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์› (Single Source of Truth, SSOT)** ์›์น™ ์ค€์ˆ˜. +3. **Presentation Layer (๋ Œ๋”๋ง):** + * **์—ญํ• :** State Manager๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„์™€์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์ ˆ๋Œ€ ํฌํ•จํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. + +## ๐Ÿ” ํ•ต์‹ฌ ์„ค๊ณ„ ํŒจํ„ด ์ ์šฉ ์ง€์นจ +* **๋ช…๋ น์–ด/์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ†ต์‹ :** ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์ง์ ‘์ ์ธ ํ˜ธ์ถœ(Direct Call) ๋Œ€์‹ , ๋ฉ”์‹œ์ง€/์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (Decoupling). \ No newline at end of file diff --git a/01_Archive/2026-04-20/Communication-Protocol-and-State-Management.md b/01_Archive/2026-04-20/Communication-Protocol-and-State-Management.md new file mode 100644 index 00000000..b6a81ab3 --- /dev/null +++ b/01_Archive/2026-04-20/Communication-Protocol-and-State-Management.md @@ -0,0 +1,18 @@ +# ๐Ÿ“ก ์‹œ์Šคํ…œ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ ๋ฐ ์ƒํƒœ ์ „์ด ๊ด€๋ฆฌ ๋งค๋‰ด์–ผ (Protocols & State Flow) + +## ๐Ÿ“œ 1. ํ‘œ์ค€ํ™”๋œ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ๊ทœ์•ฝ (Standardized Message Protocol) +* **์›์น™:** ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๋ฉ”์‹œ์ง€๋Š” ๋ฐ˜๋“œ์‹œ ๋‹ค์Œ JSON ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. + `{ type: 'ACTION_TYPE', payload: { data: value } }` +* **ํ•„์ˆ˜ ์ •์˜ ์˜ˆ์‹œ:** + * `INIT`: ์‹œ์Šคํ…œ ์ดˆ๊ธฐํ™” ์š”์ฒญ ๋ฐ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ์‹œ์ž‘ ์‹ ํ˜ธ. + * `KEY_INPUT`: ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ์˜ ํ‚ค ์ฝ”๋“œ ์ „์†ก. + * `UPDATE`: ์—”์ง„์—์„œ ๊ณ„์‚ฐ ์™„๋ฃŒ ํ›„, ์ƒˆ๋กœ์šด ์ƒํƒœ(Board State)๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์‹ ํ˜ธ. + +## ๐Ÿ”„ 2. ์‹œ์Šคํ…œ ์ƒ๋ช… ์ฃผ๊ธฐ (Life Cycle Management) +์‹œ์Šคํ…œ์€ ๋‹ค์Œ์˜ ๋ช…ํ™•ํ•œ ์ƒํƒœ ํ๋ฆ„์„ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค: +1. **[Initialization]**: ์ดˆ๊ธฐ ์„ค์ • $\rightarrow$ ์—”์ง„ ์‹œ์ž‘ ์š”์ฒญ (`INIT` ๋ฉ”์‹œ์ง€ ์ „์†ก). +2. **[Active Loop]**: ์ž…๋ ฅ ๊ฐ์ง€ ๋ฐ ํƒ€์ด๋จธ ๊ธฐ๋ฐ˜ ๋ฃจํ”„ ์‹คํ–‰ (State Update & Redraw Cycle). +3. **[Termination]**: ๊ฒŒ์ž„ ์˜ค๋ฒ„, ๋‹ค์Œ ๋‹จ๊ณ„ ์ง„์ž… ๋“ฑ ๋ช…ํ™•ํ•œ ์ข…๋ฃŒ ์‹ ํ˜ธ ๋ฐœ์ƒ ์‹œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌ(Cleanup)ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. + +## ๐Ÿšจ State Machine ํ•„์ˆ˜ ์ ์šฉ +์‹œ์Šคํ…œ์˜ ๋ณต์žก๋„๊ฐ€ ๋†’์•„์งˆ์ˆ˜๋ก **์ƒํƒœ ๋จธ์‹ (State Machine)**์„ ๋„์ž…ํ•˜์—ฌ, ํ˜„์žฌ ์‹œ์Šคํ…œ์ด ์–ด๋–ค ์ƒํƒœ์— ์žˆ๋Š”์ง€ (์˜ˆ: `READY`, `RUNNING`, `PAUSED`, `GAME_OVER`)๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ  ์ œ์–ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. \ No newline at end of file diff --git a/01_Archive/2026-04-20/Debugging-Methodology-Checklist.md b/01_Archive/2026-04-20/Debugging-Methodology-Checklist.md new file mode 100644 index 00000000..9c58a55d --- /dev/null +++ b/01_Archive/2026-04-20/Debugging-Methodology-Checklist.md @@ -0,0 +1,18 @@ +# ๐Ÿ› ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ์ง„๋‹จ ์ฒดํฌ๋ฆฌ์ŠคํŠธ (Troubleshooting Checklist) + +## ๐Ÿ” ๋‹จ๊ณ„๋ณ„ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ˆœ์„œ (The Diagnostic Flowchart) + +### Step 1: ํ™˜๊ฒฝ/ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ (L1 - Low Level Check) +* **ํ™•์ธ ๋Œ€์ƒ:** ๋ธŒ๋ผ์šฐ์ € Console์˜ ๋นจ๊ฐ„์ƒ‰ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ (`404 Not Found`, `SyntaxError`). +* **์ง„๋‹จ ๋ชฉํ‘œ:** ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ, **'์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ์ž์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š”๊ฐ€?'**๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. +* **์กฐ์น˜:** ์บ์‹œ ๋ฌธ์ œ ์˜์‹ฌ $\rightarrow$ **๊ฐ•์ œ ์ƒˆ๋กœ๊ณ ์นจ (Ctrl + F5)** ํ›„, ์„œ๋ฒ„ ์žฌ์‹œ์ž‘(`Ctrl + C` ํ›„ `npm start`)์„ ํ•„์ˆ˜๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค. + +### Step 2: ํ†ต์‹  ํ”„๋กœํ† ์ฝœ ๊ฒ€์ฆ (L2 - Communication Check) +* **ํ™•์ธ ๋Œ€์ƒ:** `onmessage` ํ•ธ๋“ค๋Ÿฌ์˜ ๋™์ž‘ ์—ฌ๋ถ€. +* **์ง„๋‹จ ๋ชฉํ‘œ:** '๋ฉ”์‹œ์ง€ A'๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, '์˜ˆ์ƒ๋œ ๋ฉ”์‹œ์ง€ B'๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •์ด ์ •์ƒ์ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. +* **์กฐ์น˜:** ๋กœ๊ทธ(`console.log`)๋ฅผ ํ†ตํ•ด **๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ž์ฒด**์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ์ถ”์ ํ•œ๋‹ค. + +### Step 3: ๋กœ์ง ๋ฐ ์‹œ์Šคํ…œ ๊ฒ€์ฆ (L3 - High Level Logic Check) +* **ํ™•์ธ ๋Œ€์ƒ:** ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™(์ถฉ๋Œ ํŒ์ •, ์ ์ˆ˜ ๊ณ„์‚ฐ ๋“ฑ). +* **์ง„๋‹จ ๋ชฉํ‘œ:** ์ฝ”๋“œ๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์™„๋ฒฝํ•œ์ง€ ํ™•์ธํ•œ๋‹ค. +* **์กฐ์น˜:** ๊ฐ€์žฅ ๋‹จ์ˆœํ™”๋œ **์ตœ์†Œ ์‹คํ–‰ ์˜ˆ์ œ(Minimum Reproducible Example)**๋ฅผ ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธํ•˜๋ฉฐ ๋กœ์ง์„ ๊ฒ€์ฆํ•œ๋‹ค. \ No newline at end of file diff --git a/01_Archive/2026-04-20/TETRIS-Project-Retrospective-Game-Development-Protocol.md b/01_Archive/2026-04-20/TETRIS-Project-Retrospective-Game-Development-Protocol.md new file mode 100644 index 00000000..12f71ddb --- /dev/null +++ b/01_Archive/2026-04-20/TETRIS-Project-Retrospective-Game-Development-Protocol.md @@ -0,0 +1,33 @@ +# ๐Ÿ† ํ”„๋กœ์ ํŠธ ํšŒ๊ณ  ๋ฐ ๊ฐœ๋ฐœ ํ”„๋กœํ† ์ฝœ: ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„ (P-Reinforce) + +## ๐Ÿ“„ ๊ฐœ์š” ๋ฐ ๋ชฉํ‘œ (Objective & Architecture Goal) +๋ณธ ๋ฌธ์„œ๋Š” ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„์„ ์™„์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ๊ฒฌ๋œ **'์‹ค์ œ ์ž‘๋™ ๊ฐ€๋Šฅํ•œ ๊ณ ์„ฑ๋Šฅ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์›์น™'**๊ณผ **'๊ฐœ๋ฐœ ๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•๋ก '**์„ ๊ธฐ๋กํ•œ ํšŒ๊ณ ๋ก์ž…๋‹ˆ๋‹ค. + +* **์ตœ์ข… ๋ชฉํ‘œ:** ์‚ฌ์šฉ์ž ์ž…๋ ฅ(ํ‚ค๋ณด๋“œ)์— ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ฐ˜์‘ํ•˜๋Š”, ์‹œ๊ฐ์  ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ํฌํ•จ๋œ ์‹ค์‹œ๊ฐ„ ๊ฒŒ์ž„ ๊ตฌํ˜„. +* **ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜ ์›์น™:** **[Web Worker ๊ธฐ๋ฐ˜์˜ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ (Separation of Concerns)]**. ๊ณ„์‚ฐ ๋กœ์ง(Engine)๊ณผ ๋ Œ๋”๋ง/UI ๋กœ์ง(React App)์„ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ถ€ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. + +## โš ๏ธ ๋ฐœ๊ฒฌ๋œ ํ•ต์‹ฌ ์‹คํŒจ ์ง€์  ๋ฐ ํ•ด๊ฒฐ ์›์น™ (Failure & Debugging Protocol) +์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์˜ ๊ฐ€์žฅ ํฐ ๊ตํ›ˆ์€ '๋…ผ๋ฆฌ๊ฐ€ ์™„๋ฒฝํ•ด๋„ ์‹คํ–‰ ํ™˜๊ฒฝ์ด ๋ฌด๋„ˆ์ง€๋ฉด ์•„๋ฌด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค'๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋””๋ฒ„๊น… ํ”„๋กœํ† ์ฝœ์„ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. + +### 1. [ํ”„๋กœํ† ์ฝœ 1] ํŒŒ์ผ ๊ฒฝ๋กœ/๋‚ด์šฉ๋ฌผ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ (The Integrity Check) +* **๋ฌธ์ œ:** `Unexpected token '<'` ์—๋Ÿฌ ๋ฐœ์ƒ. +* **์›์ธ ๋ถ„์„:** Web Worker๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์€ ์ˆœ์ˆ˜ํ•œ JavaScript ์ฝ”๋“œ์—ฌ์•ผ ํ•˜๋Š”๋ฐ, ์‹ค์ œ๋กœ๋Š” ์„œ๋ฒ„์˜ HTML ์—๋Ÿฌ ํŽ˜์ด์ง€(``)๋ฅผ ๋ฐ›๊ณ  ์‹คํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•จ. (ํŒŒ์ผ ๊ฒฝ๋กœ/๋‚ด์šฉ๋ฌผ ๋ถˆ์ผ์น˜). +* **ํ•ด๊ฒฐ์ฑ…:** `public` ํด๋”์— ํŒŒ์ผ์ด **๋ฌผ๋ฆฌ์ ์œผ๋กœ ์กด์žฌํ•˜๋ฉฐ**, ๋‚ด์šฉ๋ฌผ์ด 100% ์ˆœ์ˆ˜ JS ์ฝ”๋“œ์—ฌ์•ผ ํ•จ์„ ์›์น™ํ™”ํ•ฉ๋‹ˆ๋‹ค. + +### 2. [ํ”„๋กœํ† ์ฝœ 2] ํ†ต์‹  ๊ทœ์•ฝ ์„ค๊ณ„ (The Communication Protocol Design) +* **๋ฌธ์ œ:** ๋ฉ”์ธ ์Šค๋ ˆ๋“œ(React)์™€ Worker ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ์ฒด๊ณ„์ ์ด์ง€ ๋ชปํ•จ. +* **ํ•ด๊ฒฐ์ฑ…:** ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ตํ™˜์€ **`postMessage({ type: 'COMMAND', payload: {} })`** ํ˜•ํƒœ์˜ ํ‘œ์ค€ํ™”๋œ JSON ๊ทœ์•ฝ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. (e.g., `INIT`, `KEY_INPUT`, `UPDATE`) + +### 3. [ํ”„๋กœํ† ์ฝœ 3] ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์žฌ์„ค์ • ๋ฃจํ‹ด (The Restart Ritual) +* ๊ฐ€์žฅ ํ”ํ•œ ์˜ค๋ฅ˜๋Š” '์บ์‹ฑ' ๋˜๋Š” '์„œ๋ฒ„์˜ ๋ฏธ์ธ์‹'์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค: + 1. **Ctrl + C** ๋กœ ์„œ๋ฒ„ ์™„์ „ํžˆ ์ข…๋ฃŒ. + 2. `npm start`๋กœ ์žฌ์‹œ์ž‘. + +## ๐ŸŽฎ ์ตœ์ข… ์„ฑ๊ณต ์•„ํ‚คํ…์ฒ˜ ์š”์•ฝ (Final Architecture Summary) +| ์ปดํฌ๋„ŒํŠธ | ์—ญํ•  | ๊ธฐ์ˆ ์  ๊ตฌํ˜„ ์›์น™ | ๋‹ด๋‹น ํŒŒ์ผ | +| :--- | :--- | :--- | :--- | +| **GameEngine** | ๋ฌผ๋ฆฌ ๊ณ„์‚ฐ, ๊ทœ์น™ ์ฒ˜๋ฆฌ, ์ƒํƒœ ์ „์ด ๊ด€๋ฆฌ. | Web Worker (`gameWorker.js`) ์‚ฌ์šฉ. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ๋ถ„๋ฆฌ. | `public/gameWorker.js` | +| **State Manager** | UI ์ƒํƒœ์˜ ์œ ์ผํ•œ ์ง„์‹ค ๊ณต๊ธ‰์› (Single Source of Truth). | React State (`useState`). ์›Œ์ปค๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋งŒ ์‹ ๋ขฐํ•จ. | `src/App.js` | +| **Renderer** | ์‹œ๊ฐ์  ํ‘œํ˜„ ๋‹ด๋‹น. | Props ๊ธฐ๋ฐ˜ ๋ Œ๋”๋ง (`GameBoard.jsx`). ์„ฑ๋Šฅ ์ตœ์ ํ™”(Virtual DOM)๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•จ. | `src/components/GameBoard.jsx` | + +--- \ No newline at end of file diff --git a/10_Wiki/Topics/.obsidian/workspace.json b/10_Wiki/Topics/.obsidian/workspace.json index a2ee0147..260dfc42 100644 --- a/10_Wiki/Topics/.obsidian/workspace.json +++ b/10_Wiki/Topics/.obsidian/workspace.json @@ -178,6 +178,10 @@ }, "active": "5e19c94f304a33d1", "lastOpenFiles": [ + "Tetris_Project_Retrospective.md", + "System_Debugging_Protocol.md", + "System_Protocol_Standard.md", + "Project_Architecture_Guidelines.md", "Systemic_Simulation_Principles.md", "DevOps_Environment_Setup.md", "Separation_of_Concerns.md", diff --git a/10_Wiki/Topics/Project_Architecture_Guidelines.md b/10_Wiki/Topics/Project_Architecture_Guidelines.md new file mode 100644 index 00000000..50ee1a3d --- /dev/null +++ b/10_Wiki/Topics/Project_Architecture_Guidelines.md @@ -0,0 +1,29 @@ +--- +title: ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ฐ€์ด๋“œ๋ผ์ธ (Separation of Concerns) +category: Software Architecture +tags: [Architecture, SoC, Modular Design, Layered Architecture] +created: 2026-04-20 +--- + +# ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ฐ€์ด๋“œ๋ผ์ธ (์•„ํ‚คํ…์ฒ˜ ๋ ˆ์ด์–ด๋ง) + +## ๐ŸŽฏ ํ•ต์‹ฌ ๋ชฉํ‘œ +์‹œ์Šคํ…œ์˜ ๊ฐ ๋ถ€๋ถ„์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ ์„œ๋กœ์—๊ฒŒ ์ตœ์†Œํ•œ์˜ ์˜ํ–ฅ๋งŒ ์ฃผ๋„๋ก ํ•˜๋Š” **๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(SoC)**๋ฅผ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. + +## ๐Ÿงฑ ํ•ต์‹ฌ ๋ ˆ์ด์–ด (The Three Pillars) +1. **Domain Engine (ํ•ต์‹ฌ ๊ทœ์น™)**: + * ๋ฌผ๋ฆฌ ๋ฒ•์น™, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋‹ด๋‹น. + * ์›์น™: **์™ธ๋ถ€ ํ™˜๊ฒฝ ๋น„์˜์กด์„ฑ**. Web Worker ๋“ฑ์„ ํ†ตํ•œ ์Šค๋ ˆ๋“œ ๋…๋ฆฝ์„ฑ ํ™•๋ณด. +2. **State Management (์ง„์‹ค์˜ ์ถœ์ฒ˜)**: + * **๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›(SSOT)** ํŒจํ„ด ์ค€์ˆ˜. + * ์›์น™: ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์€ ์˜ค์ง ์ด ๋ ˆ์ด์–ด๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ฐœ์ƒํ•จ. +3. **Presentation Layer (๋ Œ๋”๋ง)**: + * ๋ฐ์ดํ„ฐ ๊ฐ€์‹œํ™” ๋‹ด๋‹น. + * ์›์น™: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํฌํ•จ ๊ธˆ์ง€. ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋งŒ ํ‘œํ˜„. + +## ๐Ÿ” ํ†ต์‹  ์ง€์นจ +- **Decoupling**: ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ง์ ‘ ํ˜ธ์ถœ ๋Œ€์‹  ๋ฉ”์‹œ์ง€/์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ†ต์‹  ์ง€ํ–ฅ. + +## ๐Ÿ”— ์—ฐ๊ฒฐ๋œ ์ง€์‹ +- [[System_Protocol_Standard]] +- [[WebWorker_Performance]] diff --git a/10_Wiki/Topics/System_Debugging_Protocol.md b/10_Wiki/Topics/System_Debugging_Protocol.md new file mode 100644 index 00000000..22e46087 --- /dev/null +++ b/10_Wiki/Topics/System_Debugging_Protocol.md @@ -0,0 +1,27 @@ +--- +title: ๋‹จ๊ณ„๋ณ„ ์‹œ์Šคํ…œ ๋””๋ฒ„๊น… ์ฒดํฌ๋ฆฌ์ŠคํŠธ (L1~L3) +category: Software Architecture +tags: [Debugging, Troubleshooting, Checklist, Process] +created: 2026-04-20 +--- + +# ๋‹จ๊ณ„๋ณ„ ์‹œ์Šคํ…œ ๋””๋ฒ„๊น… ์ฒดํฌ๋ฆฌ์ŠคํŠธ (The Diagnostic Flowchart) + +## ๐Ÿ” L1: ํ™˜๊ฒฝ ๋ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ (Low Level) +- **๋Œ€์ƒ**: 404 Error, Syntax Error, ํŒŒ์ผ ๊ฒฝ๋กœ. +- **๋ชฉํ‘œ**: **'์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฌผ๋ฆฌ์  ํ† ๋Œ€'**๊ฐ€ ๋งˆ๋ จ๋˜์–ด ์žˆ๋Š”๊ฐ€? +- **ํ•„์ˆ˜ ์กฐ์น˜**: ๊ฐ•์ œ ์ƒˆ๋กœ๊ณ ์นจ(Ctrl + F5), ์„œ๋ฒ„ ์žฌ์‹œ์ž‘(Restart Ritual). + +## ๐Ÿ” L2: ํ†ต์‹  ๋ฐ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ฒ€์ฆ (Communication) +- **๋Œ€์ƒ**: `onmessage`, `postMessage`, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ. +- **๋ชฉํ‘œ**: ๋ฉ”์‹œ์ง€๊ฐ€ ์˜๋„ํ•œ ๋Œ€๋กœ ํ๋ฅด๊ณ  ์žˆ๋Š”๊ฐ€? +- **ํ•„์ˆ˜ ์กฐ์น˜**: ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ถ”์ (`console.log`), ํ•ธ๋“ค๋Ÿฌ ๋™์ž‘ ์œ ๋ฌด ํ™•์ธ. + +## ๐Ÿ” L3: ๋…ผ๋ฆฌ ์—”์ง„ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฒ€์ฆ (High Level) +- **๋Œ€์ƒ**: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ์ˆ˜ํ•™์  ๊ณต์‹, ๋ฌผ๋ฆฌ ์—”์ง„. +- **๋ชฉํ‘œ**: ์ฝ”๋“œ๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌด๊ฒฐํ•œ๊ฐ€? +- **ํ•„์ˆ˜ ์กฐ์น˜**: ์ตœ์†Œ ์‹คํ–‰ ์˜ˆ์ œ(MRE)๋ฅผ ํ†ตํ•œ ๊ฒฉ๋ฆฌ ํ…Œ์ŠคํŠธ. + +## ๐Ÿ”— ์—ฐ๊ฒฐ๋œ ์ง€์‹ +- [[Tetris_Project_Retrospective]] +- [[DevOps_Environment_Setup]] diff --git a/10_Wiki/Topics/System_Protocol_Standard.md b/10_Wiki/Topics/System_Protocol_Standard.md new file mode 100644 index 00000000..ad3808c9 --- /dev/null +++ b/10_Wiki/Topics/System_Protocol_Standard.md @@ -0,0 +1,26 @@ +--- +title: ํ‘œ์ค€ ์‹œ์Šคํ…œ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ ๋ฐ ์ƒํƒœ ์ œ์–ด +category: Software Architecture +tags: [Protocol, State Machine, Data Exchange, Lifecycle] +created: 2026-04-20 +--- + +# ํ‘œ์ค€ ์‹œ์Šคํ…œ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ ๋ฐ ์ƒํƒœ ์ œ์–ด + +## ๐Ÿ“ก ๋ฐ์ดํ„ฐ ๊ตํ™˜ ๊ทœ์•ฝ (Standard Protocol) +๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ํ†ต์‹ ์€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. +- **ํฌ๋งท**: `{ type: 'ACTION_TYPE', payload: { data: value } }` +- **์ฃผ์š” ์•ก์…˜ ํƒ€์ž…**: + - `INIT`: ์‹œ์Šคํ…œ ์ดˆ๊ธฐํ™” ๋ฐ ๋™๊ธฐํ™” ์‹œ์ž‘. + - `KEY_INPUT`: ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ๋ฐ์ดํ„ฐ ์ „์†ก. + - `UPDATE`: ์—”์ง„ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ์˜ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ. + +## ๐Ÿ”„ ์‹œ์Šคํ…œ ์ƒ๋ช… ์ฃผ๊ธฐ (Life Cycle) +์‹œ์Šคํ…œ์€ [์ดˆ๊ธฐํ™” $\rightarrow$ ํ™œ์„ฑ ๋ฃจํ”„ $\rightarrow$ ์ข…๋ฃŒ/์ •๋ฆฌ]์˜ ๋ช…ํ™•ํ•œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜(Memory Leak)๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +## ๐Ÿšจ ์ƒํƒœ ๋จธ์‹  (State Machine) ๋„์ž… +์‹œ์Šคํ…œ ๋ณต์žก๋„๊ฐ€ ์ž„๊ณ„์น˜๋ฅผ ๋„˜์„ ๊ฒฝ์šฐ, `READY`, `RUNNING`, `PAUSED` ๋“ฑ ์ƒํƒœ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์–ดํ•˜๋Š” **State Machine** ์ ์šฉ์„ ์›์น™์œผ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค. + +## ๐Ÿ”— ์—ฐ๊ฒฐ๋œ ์ง€์‹ +- [[Project_Architecture_Guidelines]] +- [[Single_Source_of_Truth]] diff --git a/10_Wiki/Topics/Tetris_Project_Retrospective.md b/10_Wiki/Topics/Tetris_Project_Retrospective.md new file mode 100644 index 00000000..44c54f1d --- /dev/null +++ b/10_Wiki/Topics/Tetris_Project_Retrospective.md @@ -0,0 +1,30 @@ +--- +title: ํ”„๋กœ์ ํŠธ ํšŒ๊ณ : ๊ณ ์„ฑ๋Šฅ ํ…ŒํŠธ๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜ +category: Projects +tags: [Retrospective, Tetris, Architecture, Performance] +created: 2026-04-20 +--- + +# ํ”„๋กœ์ ํŠธ ํšŒ๊ณ : ๊ณ ์„ฑ๋Šฅ ํ…ŒํŠธ๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜ (P-Reinforce) + +## ๐ŸŒŠ ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜ ์š”์•ฝ +๋ณธ ํ”„๋กœ์ ํŠธ๋Š” **Web Worker**๋ฅผ ํ™œ์šฉํ•œ ์™„์ „ํ•œ ์—ฐ์‚ฐ-๋ Œ๋”๋ง ๋ถ„๋ฆฌ๋ฅผ ์‹คํ˜„ํ•˜์—ฌ, ์‹ค์‹œ๊ฐ„ ๊ฒŒ์ž„ ํ™˜๊ฒฝ์—์„œ ๊ทน๊ฐ•์˜ ๋ถ€๋“œ๋Ÿฌ์›€์„ ํ™•๋ณดํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. + +### ๐Ÿงฉ ์ปดํฌ๋„ŒํŠธ๋ณ„ ๊ธฐ์ˆ ์  ์—ญํ•  +- **Game Engine**: ๋ฌผ๋ฆฌ ๊ณ„์‚ฐ ๋ฐ ์ƒํƒœ ์ „์ด (`public/gameWorker.js`). +- **State Manager**: UI์˜ ์œ ์ผํ•œ ์ง„์‹ค ๊ณต๊ธ‰์› (`src/App.js`). +- **Renderer**: Props ๊ธฐ๋ฐ˜์˜ ์ˆœ์ˆ˜ ๋งคํ•‘ ๋ Œ๋”๋Ÿฌ (`src/components/GameBoard.jsx`). + +## โš ๏ธ ํ•ต์‹ฌ ๊ตํ›ˆ (Lessons Learned) +> [!IMPORTANT] +> **"๋…ผ๋ฆฌ๊ฐ€ ์™„๋ฒฝํ•ด๋„ ์‹คํ–‰ ํ™˜๊ฒฝ์ด ๋ฌด๋„ˆ์ง€๋ฉด ์•„๋ฌด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค."** +> ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋งŒํผ์ด๋‚˜ 'ํŒŒ์ผ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ'๊ณผ 'ํ™˜๊ฒฝ ์žฌ์„ค์ • ๋ฃจํ‹ด'์ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์— ์ง€๋Œ€ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. + +## ๐Ÿ† ์„ฑ๊ณผ +- [x] Web Worker ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์—”์ง„ ๊ตฌ์ถ• ์™„๋ฃŒ. +- [x] ํ‘œ์ค€ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜์˜ Decoupling ์„ฑ๊ณต. +- [x] ์ฒด๊ณ„์ ์ธ ๋””๋ฒ„๊น… ํ”„๋กœํ† ์ฝœ ์ˆ˜๋ฆฝ. + +## ๐Ÿ”— ์—ฐ๊ฒฐ๋œ ์ง€์‹ +- [[System_Debugging_Protocol]] +- [[Project_Architecture_Guidelines]]