# ๐Ÿ“ก ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ API ๋ช…์„ธ์„œ (v1.5) ๋ณธ ๋ฌธ์„œ๋Š” `๋‡Œ์‚ฌ๋ฃŒ` ํ”„๋กœ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ตฌ์กฐ(Schema)์™€ ๋ชจ๋“  ์™ธ๋ถ€ ํ†ต์‹  ์ธํ„ฐํŽ˜์ด์Šค(API)๋ฅผ ์ƒ์„ธํžˆ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ—„๏ธ 1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ (DB Schema) ### 1.1 `memos` ํ…Œ์ด๋ธ” ๋ฉ”๋ชจ์˜ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. | ์ปฌ๋Ÿผ๋ช… | ํƒ€์ž… | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… | | :--- | :--- | :--- | :--- | | `id` | INTEGER | PRIMARY KEY | ์ž๋™ ์ฆ๊ฐ€ ๊ณ ์œ  ์•„์ด๋”” | | `title` | TEXT | - | ๋ฉ”๋ชจ ์ œ๋ชฉ | | `content` | TEXT | - | ๋ฉ”๋ชจ ๋ณธ๋ฌธ (๋งˆํฌ๋‹ค์šด) | | `summary` | TEXT | - | AI ์ƒ์„ฑ ์š”์•ฝ๋ฌธ | | `color` | TEXT | `#2c3e50` | ๋ฉ”๋ชจ ์นด๋“œ ํ…Œ๋งˆ ์ƒ‰์ƒ | | `is_pinned` | BOOLEAN | 0 | ์ƒ๋‹จ ๊ณ ์ • ์—ฌ๋ถ€ | | `status` | TEXT | `'active'` | ์ƒํƒœ (`active`, `done`, `archived`) | | `group_name` | TEXT | `'default'` | ๊ทธ๋ฃน ID (์˜๋ฌธ ์ƒ์ˆ˜ ๊ถŒ์žฅ) | | `category` | TEXT | - | (v1.5) ์†Œ์† ์นดํ…Œ๊ณ ๋ฆฌ ๋ช… | | `is_encrypted` | BOOLEAN | 0 | ์•”ํ˜ธํ™” ์—ฌ๋ถ€ | | `created_at` | TIMESTAMP | - | ์ƒ์„ฑ ์ผ์‹œ | | `updated_at` | TIMESTAMP | - | ์ˆ˜์ • ์ผ์‹œ | ### 1.2 `tags` ํ…Œ์ด๋ธ” ๋ฉ”๋ชจ์™€ ํƒœ๊ทธ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. | ์ปฌ๋Ÿผ๋ช… | ํƒ€์ž… | ์„ค๋ช… | | :--- | :--- | :--- | | `memo_id` | INTEGER | ์†Œ์† ๋ฉ”๋ชจ ID | | `name` | TEXT | ํƒœ๊ทธ ์ด๋ฆ„ | | `source` | TEXT | ์ƒ์„ฑ ์ฃผ์ฒด (`user`, `ai`) | ### 1.3 `attachments` ํ…Œ์ด๋ธ” ๋ฉ”๋ชจ์— ์ฒจ๋ถ€๋œ ๋ฏธ๋””์–ด ์ž์‚ฐ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. | ์ปฌ๋Ÿผ๋ช… | ํƒ€์ž… | ์„ค๋ช… | | :--- | :--- | :--- | | `memo_id` | INTEGER | ์†Œ์† ๋ฉ”๋ชจ ID | | `filename` | TEXT | ์ €์žฅ๋œ ํŒŒ์ผ๋ช… (UUID ๊ธฐ๋ฐ˜) | | `original_name`| TEXT | ์›๋ณธ ํŒŒ์ผ๋ช… | | `file_type` | TEXT | MIME ํƒ€์ž… | | `size` | INTEGER | ํŒŒ์ผ ํฌ๊ธฐ (Bytes) | ### 1.4 `memo_links` ํ…Œ์ด๋ธ” ๋ฉ”๋ชจ ๊ฐ„์˜ `[[#ID]]` ๋งํฌ ๋ฐ ์‹œ๊ฐํ™” ์ธ๋ ฅ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. | ์ปฌ๋Ÿผ๋ช… | ํƒ€์ž… | ์„ค๋ช… | | :--- | :--- | :--- | | `source_id` | INTEGER | ๋งํฌ๋ฅผ ๊ฑด ๋ฉ”๋ชจ ID | | `target_id` | INTEGER | ๋งํฌ ๋Œ€์ƒ ๋ฉ”๋ชจ ID | --- ## ๐ŸŒ 2. API ์—”๋“œํฌ์ธํŠธ ๋ช…์„ธ (์ฃผ์š” ํ•ญ๋ชฉ) ### 2.1 Memos & Search - `GET /api/memos`: ํ•„ํ„ฐ๋ง๋œ ๋ฉ”๋ชจ ๋ชฉ๋ก ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ†ตํ•ฉ ์กฐํšŒ. - **`GET /api/memos/` (v2.0)**: ํŠน์ • ๋ฉ”๋ชจ์˜ ์ƒ์„ธ ์ •๋ณด(๋ณธ๋ฌธ, ํƒœ๊ทธ, ์ฒจ๋ถ€ํŒŒ์ผ ํฌํ•จ) ๋‹จ๊ฑด ์กฐํšŒ. - `POST /api/memos//decrypt`: ์•”ํ˜ธํ™”๋œ ๋ฉ”๋ชจ ๋ณตํ˜ธํ™” ์š”์ฒญ. - `GET /api/stats/heatmap`: ํžˆํŠธ๋งต ๋ Œ๋”๋ง์„ ์œ„ํ•œ ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ ์กฐํšŒ. ### 2.2 Settings & Configuration (v1.5 ์—…๋ฐ์ดํŠธ) | Method | URL | Parameters | Description | | :--- | :--- | :--- | :--- | | `GET` | `/api/settings` | - | ํ…Œ๋งˆ, ์–ธ์–ด, ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์ƒํƒœ ์กฐํšŒ | | `POST` | `/api/settings` | `lang`, `enable_categories`, `bg_color` ๋“ฑ | ์„œ๋ฒ„ ์„ค์ •์„ ์˜๊ตฌ ์—…๋ฐ์ดํŠธ | > **v1.5 ๋ณ€๊ฒฝ์ **: `lang`(์–ธ์–ด), `enable_categories`(๊ณ ๊ธ‰ ์นดํ…Œ๊ณ ๋ฆฌ ์‚ฌ์šฉ ์—ฌ๋ถ€) ํ•„๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.