# ๐Ÿข ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ํด๋” ๊ตฌ์กฐ (v5.0+) ๋ณธ ๋ฌธ์„œ๋Š” `๋‡Œ์‚ฌ๋ฃŒ` ํ”„๋กœ์ ํŠธ์˜ ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ตฌ์กฐ์™€ ๋…ผ๋ฆฌ์  ์„ค๊ณ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ƒ์„ธํžˆ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ“ 1. ํด๋” ๊ตฌ์กฐ (Folder Structure) | ๊ฒฝ๋กœ | ์—ญํ•  | ์ƒ์„ธ ์„ค๋ช… | | :--- | :--- | :--- | | `/app` | **Backend Core** | Flask ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋กœ์ง ๋ฐ ๋ผ์šฐํŠธ | | `/app/routes` | **Modular Routes** | ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌ๋œ API ์—”๋“œํฌ์ธํŠธ ํŒจํ‚ค์ง€ | | `/data` | **Database Box** | SQLite3 DB ํŒŒ์ผ (`memos.db`) ์ €์žฅ ์œ„์น˜ | | `/docs` | **Documentation** | ์‹œ์Šคํ…œ ๊ธฐ์ˆ  ๋ฌธ์„œ ๋ฐ ๊ฐ€์ด๋“œ | | `/logs` | **Log Box** | ์‹œ์Šคํ…œ ์ž‘๋™ ๋ฐ ์ ‘๊ทผ ๋กœ๊ทธ (`app.log`) | | `/static` | **Static Assets** | CSS, ์ด๋ฏธ์ง€, ํŒŒ๋น„์ฝ” ๋ฐ ํ”„๋ก ํŠธ์—”๋“œ JS | | `/static/js/components` | **UI Components** | D3.js ์‹œ๊ฐํ™” ๋ชจ๋“ˆ ๋ฐ UI ํ•ต์‹ฌ ๋กœ์ง | | `/templates` | **HTML Templates** | Jinja2 ๊ธฐ๋ฐ˜ ๋ ˆ์ด์•„์›ƒ ๋ฐ ํŽ˜์ด์ง€ | | `deploy.py` | **Ops Tool** | ์ˆ˜์ˆ ์  ์ •๋ฐ€ ๋ฐฐํฌ ๋„๊ตฌ (Surgical Deployment) | | `backup.py` | **Disaster Recovery** | ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ(DB, .env, ์ฒจ๋ถ€ํŒŒ์ผ) ์ฆ๋ถ„ ๋ฐฑ์—… ๋„๊ตฌ | --- ## ๐Ÿ—๏ธ 2. ์„ค๊ณ„ ์•„ํ‚คํ…์ฒ˜ (Design Architecture) ### 2.1 Backend: Blueprint-based Modular Flask - **ํŒจํ‚ค์ง€ ๊ตฌ์กฐ**: `app/__init__.py`์—์„œ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ์•ฑ์„ ์ƒ์„ฑํ•˜๊ณ , `routes/` ์•„๋ž˜์˜ ๊ฐ ๊ธฐ๋Šฅ์„ Blueprint๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. - **๋ณด์•ˆ ์‹ค๋“œ (Security Shield)**: `before_request` ๋‹จ๊ณ„์—์„œ ๋น„์ •์ƒ์ ์ธ ํŠธ๋ž˜ํ”ฝ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋กœ๊น… ์‹œ์Šคํ…œ์ด ์„ ์ œ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. - **์„ฑ๋Šฅ ์ตœ์ ํ™” (Bulk Fetch)**: ๋‹ค๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ ์กฐํšŒ ์‹œ ๋ฐœ์ƒํ•˜๋Š” N+1 ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํƒœ๊ทธ, ์ฒจ๋ถ€ํŒŒ์ผ, ๋ฐฑ๋งํฌ ์ •๋ณด๋ฅผ ํ•œ๊บผ๋ฒˆ์— Fetchํ•˜๋Š” ๋ฒŒํฌ ์กฐํšŒ ๋กœ์ง์ด ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ### 2.2 Frontend: Modular Component Architecture - **์ง€์‹ ๋„ค๋ทธ๋ผ (Knowledge Nebula)**: D3.js์˜ ๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์—”์ง„์„ ๋„์ž…ํ•˜์—ฌ ์œ ๊ธฐ์ ์ธ ์„ฑ๋‹จ ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. - **์ปดํฌ๋„ŒํŠธ ์ค‘์‹ฌ ์„ค๊ณ„**: `HeatmapManager.js` (ํ™œ๋™ ์‹œ๊ฐํ™”), `CalendarManager.js` (๋‹ฌ๋ ฅ), `Visualizer.js` (๊ทธ๋ž˜ํ”„), `DrawerManager.js` (ํƒ์ƒ‰๊ธฐ) ๋“ฑ์œผ๋กœ ๋…๋ฆฝ๋œ ๋ชจ๋“ˆ ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. - **๋ ˆ์ด์•„์›ƒ ํ˜๋ช…**: **๋ฌดํ•œ ์Šคํฌ๋กค(Infinite Scroll)** ํŽ˜์ด์ง• ๊ธฐ๋ฒ•์„ ๋„์ž…ํ•˜์—ฌ ์ˆ˜์ฒœ ๊ฐœ์˜ ์ง€์‹ ํŒŒํŽธ๋„ ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - **State Management**: `AppService.js`๋ฅผ ์ค‘์•™ ์ƒํƒœ ๊ด€๋ฆฌ ์—”์ง„์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์š”์ฒญ๊ณผ UI ์—…๋ฐ์ดํŠธ์˜ ์ •ํ•ฉ์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ### 2.3 Ops & Reliability - **Merged Configuration**: ๊ฐœ๋ฐœ/์šด์˜ ํ™˜๊ฒฝ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ํ•œ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋ฐฐํฌ ์‹œ `.env` ํŒŒ์ผ์„ ํ†ตํ•ด ๋ณด์•ˆ ์„ค์ •์ด ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค. - **Surgical Cleanup**: ๋ฐฐํฌ ์‹œ ์šด์˜ ๋ฐ์ดํ„ฐ(DB, Uploads)๋Š” ๋ณด์กดํ•˜๊ณ  ์ฝ”๋“œ ์˜์—ญ๋งŒ ์ •๋ฐ€ํ•˜๊ฒŒ ๊ต์ฒดํ•˜๋Š” ์ˆ˜์ˆ ์  ๋ฐฐํฌ ๋ฐฉ์‹์„ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. - **Disaster Recovery**: `backup.py`๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„ ์นจํ•ด๋‚˜ ์‹œ์Šคํ…œ ๋ถ•๊ดด ์‹œ์—๋„ 3๋Œ€ ํ•ต์‹ฌ ์ž์‚ฐ(.env, DB, Uploads)๋งŒ์œผ๋กœ ์ฆ‰์‹œ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ท„์Šต๋‹ˆ๋‹ค.