commit 6bca7beb8ed4255f44cebe4ceb5218922d5d31da Author: JooWangi Date: Mon Apr 13 14:17:43 2026 +0900 Initial commit diff --git a/.gemini/settings.json b/.gemini/settings.json new file mode 100644 index 0000000..b0948b3 --- /dev/null +++ b/.gemini/settings.json @@ -0,0 +1,15 @@ +{ + "mcpServers": { + "gitea": { + "command": "npx", + "args": [ + "-y", + "@andrebuzeli/git-mcp@latest" + ], + "env": { + "GITEA_HOST": "https://gitea.hmac.kr", + "GITEA_ACCESS_TOKEN": "0318de8265b9cbabc5e70773e94c59807ec3ad8a" + } + } + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40b878d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..056e508 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# ๐Ÿ› ๏ธ ๊ฐœ๋ฐœ ๋ฐ ๊ด€๋ฆฌ ๊ทœ์น™ (Strict Development Rules) + +1. **์–ธ์–ด ์„ค์ •**: ์˜์–ด๋กœ ์ƒ๊ฐํ•˜๋˜, ๋ชจ๋“  ๋‹ต๋ณ€์€ **ํ•œ๊ตญ์–ด**๋กœ ์ž‘์„ฑํ•œ๋‹ค. +2. **์ž„์˜ ์ˆ˜์ • ์ ˆ๋Œ€ ๊ธˆ์ง€ (Zero-Arbitrary Change)**: + - ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์‹œํ•œ ๋ถ€๋ถ„ ์™ธ์—๋Š” **๋‹จ ํ•œ ์ค„์˜ ์ฝ”๋“œ๋„, ๊ทธ ์–ด๋–ค ํŒŒ์ผ๋„ ์ž„์˜๋กœ ์ˆ˜์ •, ์ •๋ฆฌ, ๋ฆฌํŒฉํ† ๋งํ•˜์ง€ ์•Š๋Š”๋‹ค.** + - ์ง€์‹œ๋ฐ›์ง€ ์•Š์€ ๋‹ค๋ฅธ ํŒŒํŠธ์˜ ์ฝ”๋“œ๋Š” ์ ˆ๋Œ€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์œผ๋ฉฐ, ์˜ํ–ฅ ๋ฒ”์œ„๊ฐ€ ์š”์ฒญ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋„๋ก '์™ธ๊ณผ ์ˆ˜์ˆ ์‹(Surgical) ์ˆ˜์ •'์„ ์›์น™์œผ๋กœ ํ•œ๋‹ค. +3. **๊ฐœ์„  ์ž‘์—… ์ ˆ์ฐจ (Test-First Approach)**: + - ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐœ์„ (Refactoring, Optimization ๋“ฑ)์„ ์ง€์‹œํ•œ ๊ฒฝ์šฐ, **์ˆ˜์ • ์ „ ํ˜„์žฌ ์‹œ์Šคํ…œ์ด ์ •์ƒ์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ๋จผ์ € ์ „์ˆ˜ ํ™•์ธ**ํ•œ๋‹ค. + - ๊ธฐ์กด ๋™์ž‘ ๋ฐฉ์‹๊ณผ ์„ฑ๋Šฅ์„ ๊ธฐ์ค€(Baseline)์œผ๋กœ ์‚ผ๊ณ , ์ˆ˜์ • ํ›„์—๋„ **๊ธฐ์กด์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ๋ฌด๊ฒฐํ•˜๊ฒŒ ์œ ์ง€๋˜๋Š”์ง€ ๋ฐ˜๋“œ์‹œ ํ…Œ์ŠคํŠธํ•˜์—ฌ ์ž…์ฆ**ํ•œ๋‹ค. + - ๊ฒ€์ฆ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ "๋ฌด์—‡์„, ์™œ, ์–ด๋–ป๊ฒŒ" ๋ฐ”๊ฟ€์ง€ ์ƒ์„ธ ๋ณด๊ณ  ํ›„, ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ **'์ง„ํ–‰์‹œ์ผœ'** ์Šน์ธ์„ ์–ป์€ ๋’ค์—๋งŒ ์ง‘ํ–‰ํ•œ๋‹ค. +4. **์„ ๋ณด๊ณ  ํ›„์Šน์ธ**: ๋ชจ๋“  ๊ธฐ๋Šฅ ์ˆ˜์ • ๋ฐ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์ „์—๋Š” ์˜ˆ์ƒ ๋ฐฉ์•ˆ์„ ๋จผ์ € ๋ณด๊ณ ํ•˜๊ณ  ์Šน์ธ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์นœ๋‹ค. + +--- + +### ๐Ÿš€ ์„œ๋ฒ„ ๊ตฌ๋™ ๋ฐ ์™ธ๋ถ€ ์ ‘์† ๊ทœ์น™ (Server Run & External Access) + +1. **ํฌํŠธ ๊ณ ์ •**: ๊ฐœ๋ฐœ ์„œ๋ฒ„๋Š” ๋ฐ˜๋“œ์‹œ **8080** ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (`vite.config.ts` ์„ค์ • ์ค€์ˆ˜) +2. **์™ธ๋ถ€ ์ ‘์† ํ—ˆ์šฉ (Host)**: ์‚ฌ๋ฌด์‹ค ๋‚ด ํƒ€ ์ง์›์ด ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก `--host` ๋ชจ๋“œ๋กœ ๊ตฌ๋™ํ•œ๋‹ค. +3. **๊ตฌ๋™ ๋ช…๋ น์–ด**: + ```bash + npm run dev + ``` + * ํ•ด๋‹น ๋ช…๋ น์–ด ์‹คํ–‰ ์‹œ `0.0.0.0` ๋˜๋Š” `Network: http://[๋‚ด-IP]:8080/` ๊ฒฝ๋กœ๋กœ ํƒ€์ธ ์ ‘์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค. +4. **IP ํ™•์ธ ๋ฐฉ๋ฒ•**: + * Windows: `ipconfig` ๋ช…๋ น์–ด๋กœ 'IPv4 ์ฃผ์†Œ' ํ™•์ธ ํ›„ ๊ณต์œ . + +--- + +### ๐ŸŽจ ITAM ์‹œ์Šคํ…œ ๋””์ž์ธ ๊ฐ€์ด๋“œ (Design Guide) + +1. **๋””์ž์ธ ์ฒ ํ•™ (Design Philosophy)** + * **Minimalist & Border-based**: ๋ถˆํ•„์š”ํ•œ ๋ฐ•์Šค(Card) ์‚ฌ์šฉ์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ์ •๋ณด์˜ ๊ตฌ๋ถ„์€ ๊ฐ„๊ฒฐํ•œ ๋ผ์ธ(Border/Divider)์„ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ฐ์  ํ”ผ๋กœ๋„๋ฅผ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค. + * **Professional Achromatic**: ๋ฌด์ฑ„์ƒ‰(Black, White, Grey)์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜์—ฌ ์ •๋ˆ๋œ ์—…๋ฌด ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. + * **Green Accent**: ๋ธ”๋ฃจ ๋Œ€์‹  ์ง™์€ ๊ทธ๋ฆฐ(`#1E5149`)์„ ํฌ์ธํŠธ ์ปฌ๋Ÿฌ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ฐจ๋ถ„ํ•œ ์ „๋ฌธ์„ฑ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. + +2. **ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ (Typography)** + * **Font Family**: `Pretendard` (์ „์—ญ ์ ์šฉ) + * **Letter Spacing**: `-0.02em` (์•ฝ -2%) ์ ์šฉ. ์ž๊ฐ„์„ ์ข๊ฒŒ ์„ค์ •ํ•˜์—ฌ ๋ฐ€๋„ ์žˆ๊ณ  ์„ธ๋ จ๋œ ๊ฐ€๋…์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค. + * **Weights**: 400(Regular), 500(Medium), 600(SemiBold), 700(Bold). + +3. **์ปฌ๋Ÿฌ ํŒ”๋ ˆํŠธ (Color Palette)** + * **Point Color**: `#1E5149` (Deep Green) - ๊ฐ•์กฐ, ํ™œ์„ฑํ™” ์ƒํƒœ, ์ฃผ์š” ์•ก์…˜ ๋ฒ„ํŠผ. + * **Text**: Main(`#111827` - Near Black), Muted(`#6B7280` - Grey). + * **Border/Divider**: `#E5E7EB` (Light Grey) - ์ •๋ณด ๊ตฌ๋ถ„์„ ์œ„ํ•œ ์–‡์€ ์‹ค์„ . + * **Background**: `#FFFFFF` (White) / `#F9FAFB` (Off White). + +4. **๋ ˆ์ด์•„์›ƒ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๊ทœ์น™ (Layout Rules)** + * **Box-less Design**: ๊ผญ ํ•„์š”ํ•œ ์ •๋ณด ๋ฌถ์Œ(๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ™” ๋“ฑ)์ด ์•„๋‹ˆ๋ฉด ๋ฐ•์Šค ํ˜•ํƒœ์˜ ํ…Œ๋‘๋ฆฌ๋‚˜ ๋ฐฐ๊ฒฝ ์‚ฌ์šฉ์„ ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค. + * **Line-based Division**: ์„น์…˜ ๊ฐ„์˜ ๊ตฌ๋ถ„์€ 1px ๋‘๊ป˜์˜ ์–‡์€ ์‹ค์„ (Border)์„ ํ†ตํ•ด ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค. + * **Table**: ๋ฐฐ๊ฒฝ์ƒ‰์ด๋‚˜ ํ™”๋ คํ•œ ํšจ๊ณผ ์—†์ด ํ–‰(Row) ๊ฐ„์˜ ์–‡์€ ๊ตฌ๋ถ„์„ ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณธ์—ฐ์— ์ง‘์ค‘ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. + * **Input/Button**: ์ž…๋ ฅ ํ•„๋“œ์™€ ๋ฒ„ํŠผ์€ ์ตœ์†Œํ•œ์˜ ๋ณด๋”์™€ ํฌ์ธํŠธ ์ปฌ๋Ÿฌ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์ •๊ฐˆํ•˜๊ฒŒ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. + * **Modal (๋ชจ๋‹ฌ ๊ณตํ†ต ๊ทœ์น™)**: + * **Header**: ์ง™์€ ๊ทธ๋ฆฐ(`#1E5149`) ๋ฐฐ๊ฒฝ์— ํ™”์ดํŠธ ํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์šฐ์ธก ์ƒ๋‹จ์— ๋ช…ํ™•ํ•œ 'X' ๋‹ซ๊ธฐ ๋ฒ„ํŠผ์„ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. + * **Interaction**: ์‚ฌ์šฉ์ž์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด `ESC` ํ‚ค๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ๋ชจ๋‹ฌ ๋ฐ”๊นฅ ์˜์—ญ(Overlay)์„ ํด๋ฆญํ•˜๋ฉด ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๋„๋ก ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. + * **Layout**: `detail.png` ๊ธฐ์ค€์˜ 2์—ด ๊ทธ๋ฆฌ๋“œ ์‹œ์Šคํ…œ์„ ๊ถŒ์žฅํ•˜๋ฉฐ, ํ•˜๋‹จ ์šฐ์ธก์— ์•ก์…˜ ๋ฒ„ํŠผ(๋‹ซ๊ธฐ, ์ €์žฅ ๋“ฑ)์„ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. + diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/00.HW์š”์•ฝ์ •๋ณด.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/00.HW์š”์•ฝ์ •๋ณด.png new file mode 100644 index 0000000..c705eef Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/00.HW์š”์•ฝ์ •๋ณด.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/00.SW์š”์•ฝ์ •๋ณด.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/00.SW์š”์•ฝ์ •๋ณด.png new file mode 100644 index 0000000..6adf117 Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/00.SW์š”์•ฝ์ •๋ณด.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/01.SW์ž์‚ฐ ์‚ฌ์šฉ์ž ํ• ๋‹น.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/01.SW์ž์‚ฐ ์‚ฌ์šฉ์ž ํ• ๋‹น.png new file mode 100644 index 0000000..8234fa2 Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/01.SW์ž์‚ฐ ์‚ฌ์šฉ์ž ํ• ๋‹น.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/02.๊ฐœ์ธPCํ”„๋กœ๊ทธ๋žจ์„ค์น˜ํ˜„ํ™ฉ.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/02.๊ฐœ์ธPCํ”„๋กœ๊ทธ๋žจ์„ค์น˜ํ˜„ํ™ฉ.png new file mode 100644 index 0000000..4795416 Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/02.๊ฐœ์ธPCํ”„๋กœ๊ทธ๋žจ์„ค์น˜ํ˜„ํ™ฉ.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/03.๋น„์ธ๊ฐ€ํ”„๋กœ๊ทธ๋žจ์‹คํ–‰์ฐฏ์•ˆ.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/03.๋น„์ธ๊ฐ€ํ”„๋กœ๊ทธ๋žจ์‹คํ–‰์ฐฏ์•ˆ.png new file mode 100644 index 0000000..8e06abb Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/03.๋น„์ธ๊ฐ€ํ”„๋กœ๊ทธ๋žจ์‹คํ–‰์ฐฏ์•ˆ.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/04.๊ฐœ์ธPC์‚ฌ์–‘์ •๋ณด์ˆ˜์ง‘.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/04.๊ฐœ์ธPC์‚ฌ์–‘์ •๋ณด์ˆ˜์ง‘.png new file mode 100644 index 0000000..2516b59 Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/04.๊ฐœ์ธPC์‚ฌ์–‘์ •๋ณด์ˆ˜์ง‘.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/05.๊ตฌ๋…๋ผ์ด์„ผ์Šค๋“ฑ๋กํŽ˜์ด์ง€.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/05.๊ตฌ๋…๋ผ์ด์„ผ์Šค๋“ฑ๋กํŽ˜์ด์ง€.png new file mode 100644 index 0000000..59626eb Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/05.๊ตฌ๋…๋ผ์ด์„ผ์Šค๋“ฑ๋กํŽ˜์ด์ง€.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/05.์˜๊ตฌ๋ผ์ด์„ผ์Šค๋“ฑ๋กํŽ˜์ด์ง€.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/05.์˜๊ตฌ๋ผ์ด์„ผ์Šค๋“ฑ๋กํŽ˜์ด์ง€.png new file mode 100644 index 0000000..d17d615 Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/05.์˜๊ตฌ๋ผ์ด์„ผ์Šค๋“ฑ๋กํŽ˜์ด์ง€.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/06. ํ”„๋กœ๊ทธ๋žจ ํ• ๋‹น ํ˜„ํ™ฉ.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/06. ํ”„๋กœ๊ทธ๋žจ ํ• ๋‹น ํ˜„ํ™ฉ.png new file mode 100644 index 0000000..f650bf3 Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/06. ํ”„๋กœ๊ทธ๋žจ ํ• ๋‹น ํ˜„ํ™ฉ.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/07.์‹ค๋ฌผ์ž์‚ฐ๊ด€๋ฆฌํŽ˜์ด์ง€.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/07.์‹ค๋ฌผ์ž์‚ฐ๊ด€๋ฆฌํŽ˜์ด์ง€.png new file mode 100644 index 0000000..0d57cfc Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/07.์‹ค๋ฌผ์ž์‚ฐ๊ด€๋ฆฌํŽ˜์ด์ง€.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/07.์‹ค๋ฌผ์ž์‚ฐ๋“ฑ๋กํŽ˜์ด์ง€.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/07.์‹ค๋ฌผ์ž์‚ฐ๋“ฑ๋กํŽ˜์ด์ง€.png new file mode 100644 index 0000000..3537b6c Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/07.์‹ค๋ฌผ์ž์‚ฐ๋“ฑ๋กํŽ˜์ด์ง€.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/08.๋ณ€๊ฒฝ๋‚ด์—ญํŽ˜์ด์ง€.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/08.๋ณ€๊ฒฝ๋‚ด์—ญํŽ˜์ด์ง€.png new file mode 100644 index 0000000..f3a3a6a Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/08.๋ณ€๊ฒฝ๋‚ด์—ญํŽ˜์ด์ง€.png differ diff --git a/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/09.HW๊ด€๋ฆฌํŽ˜์ด์ง€.png b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/09.HW๊ด€๋ฆฌํŽ˜์ด์ง€.png new file mode 100644 index 0000000..5d2bc5d Binary files /dev/null and b/Reference/SAMQ ๊ธฐ๋Šฅ ์ด๋ฏธ์ง€ ์บก์ณ/09.HW๊ด€๋ฆฌํŽ˜์ด์ง€.png differ diff --git a/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_agent.pdf b/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_agent.pdf new file mode 100644 index 0000000..961f66d Binary files /dev/null and b/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_agent.pdf differ diff --git a/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_app.pdf b/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_app.pdf new file mode 100644 index 0000000..e516327 Binary files /dev/null and b/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_app.pdf differ diff --git a/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_web_realassets.pdf b/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_web_realassets.pdf new file mode 100644 index 0000000..194bb8d Binary files /dev/null and b/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_web_realassets.pdf differ diff --git a/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_web_software.pdf b/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_web_software.pdf new file mode 100644 index 0000000..2d8d5e3 Binary files /dev/null and b/Reference/SAMQ ๋งค๋‰ด์–ผ/SAMQ_manual_web_software.pdf differ diff --git a/create_db.js b/create_db.js new file mode 100644 index 0000000..f045a75 --- /dev/null +++ b/create_db.js @@ -0,0 +1,24 @@ +import * as XLSX from 'xlsx'; + +const hwTabs = ['๊ฐœ์ธPC', '์„œ๋ฒ„', '์Šคํ† ๋ฆฌ์ง€', '์ „์‚ฐ๋น„ํ’ˆ']; +const swTabs = ['๊ตฌ๋…SW', '์˜๊ตฌSW']; + +const hwHeaders = ['๋ฒ•์ธ', '์ž์‚ฐ์ฝ”๋“œ', '๋ช…์นญ', '์œ„์น˜', '๊ด€๋ฆฌ์ž', 'IP์ฃผ์†Œ', 'MACaddress', 'HW์‚ฌ์–‘', 'OS']; +const swHeaders = ['๋ฒ•์ธ', 'SW๋ช…', '๋ผ์ด์„ ์Šคํ‚ค', 'ํ• ๋‹น์ž', '์‚ฌ์šฉ๊ธฐ๊ฐ„', '๋น„๊ณ ']; + +const wb = XLSX.utils.book_new(); + +hwTabs.forEach((tab, i) => { + const wsData = [hwHeaders, [`(์ฃผ)ํšŒ์‚ฌ${i}`, `ASSET-${i}00`, `${tab} ๋ชจ๋ธA`, '๋ณธ์‚ฌ 1์ธต', '๊ด€๋ฆฌ์žA', '192.168.0.1', '00:00:00:00:00:01', 'Core i7, 16GB RAM', 'Windows 10']]; + const ws = XLSX.utils.aoa_to_sheet(wsData); + XLSX.utils.book_append_sheet(wb, ws, tab); +}); + +swTabs.forEach((tab, i) => { + const wsData = [swHeaders, [`(์ฃผ)ํšŒ์‚ฌ${i}`, `${tab} Adobe CC`, '1234-5678-ABCD', 'ํ™๊ธธ๋™,๊น€์ฒ ์ˆ˜', '2024.01~2024.12', '๋ณธ์‚ฌ ์ „์šฉ']]; + const ws = XLSX.utils.aoa_to_sheet(wsData); + XLSX.utils.book_append_sheet(wb, ws, tab); +}); + +XLSX.writeFile(wb, 'temp_db.xlsx'); +console.log('temp_db.xlsx created!'); diff --git a/implementation_plan.md b/implementation_plan.md new file mode 100644 index 0000000..beae5a1 --- /dev/null +++ b/implementation_plan.md @@ -0,0 +1,77 @@ +# H/W ์ž์‚ฐ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ํ”„๋กœํ† ํƒ€์ž… ๊ตฌํ˜„ ๊ณ„ํš (Excel ๊ธฐ๋ฐ˜ DB) + +ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” DB ์—ฐ๋™ ์—†์ด ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ๊ฐœ๋ฐœ๋˜๋ฉฐ, ์ดˆ๊ธฐ H/W ์ž์‚ฐ์„ ์—‘์…€ ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •๋œ ๋””์ž์ธ ๊ฐ€์ด๋“œ๋ผ์ธ(`README.md`)์— ๋”ฐ๋ผ ์„ธ๋ จ๋˜๊ณ  ์ „๋ฌธ์ ์ธ UI๋ฅผ Vite + Vanilla JS (๋˜๋Š” TS) ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. + +## User Review Required + +> [!IMPORTANT] +> **์—‘์…€์„ DB์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹**์— ๋Œ€ํ•œ ์ฃผ์š” ๋™์ž‘ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฐฉ์‹์ด ์˜๋„ํ•˜์‹  ๋ฐ”์™€ ๋งž๋Š”์ง€ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. +> 1. ํ™”๋ฉด ์ง„์ž… ์‹œ ์ œ๊ณต๋˜๋Š” **ํ…œํ”Œ๋ฆฟ ์—‘์…€ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ** +> 2. ํ•ด๋‹น ์–‘์‹์— ๋งž์ถฐ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ํ›„ ๋ธŒ๋ผ์šฐ์ €์— **์—‘์…€ ํŒŒ์ผ ์—…๋กœ๋“œ(Import)** +> 3. ์›น ์ƒ์—์„œ **Data Table ํ˜•ํƒœ๋กœ ๋ Œ๋”๋ง** (ํŽธ์ง‘/์ถ”๊ฐ€/์‚ญ์ œ ๊ธฐ๋Šฅ ์ œ๊ณต) +> 4. ์ˆ˜์ •์ด ์™„๋ฃŒ๋œ ํ›„ **์—‘์…€ ํŒŒ์ผ๋กœ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ(Export)** ํ•˜์—ฌ ๋กœ์ปฌ์— ์ €์žฅ + +## ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์„ค๊ณ„ (H/W ์ž์‚ฐ) + +์š”์ฒญํ•˜์‹  ํ•ญ๋ชฉ์— ๋งž์ถ˜ ํ•„์ˆ˜ H/W ์ž์‚ฐ ๋ฐ์ดํ„ฐ ํ•„๋“œ์ž…๋‹ˆ๋‹ค. ์—‘์…€์˜ ์—ด(Column)๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. + +- **๋ฒ•์ธ (Company)**: ์†Œ์† ๋ฒ•์ธ +- **์ž์‚ฐ์ฝ”๋“œ (AssetCode)**: ์ž์‚ฐ์˜ ๊ณ ์œ  ์‹๋ณ„์ž +- **๋ช…์นญ (DeviceName)**: ๋ชจ๋ธ๋ช… ๋˜๋Š” ๊ธฐ๊ธฐ๋ช… +- **์œ„์น˜ (Location)**: ํ˜„์žฌ ํŒŒ์•…๋œ ๋ฌผ๋ฆฌ์  ์œ„์น˜ +- **๊ด€๋ฆฌ์ž (Manager)**: ์‹ค ์‚ฌ์šฉ์ž ๋˜๋Š” ๋‹ด๋‹น์ž +- **IP์ฃผ์†Œ (IPAddress)**: ํ• ๋‹น๋œ IP +- **MAC address (MacAddress)**: ๊ธฐ๊ธฐ ๊ณ ์œ  MAC ์ฃผ์†Œ +- **H/W ์‚ฌ์–‘ (HWSpecs)**: CPU, RAM, Storage ๋“ฑ ์‚ฌ์–‘ ์š”์•ฝ +- **OS (OperatingSystem)**: ์„ค์น˜๋œ ์šด์˜์ฒด์ œ ์ •๋ณด + +## Proposed Changes + +### 1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • (Vite ๊ธฐ๋ฐ˜) +- `npx create-vite` ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ `vanilla-ts` (๋˜๋Š” `vanilla`) ํ”„๋กœ์ ํŠธ๋ฅผ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. +- `package.json` ๋ฐ `vite.config.ts` ์„ค์ • (ํฌํŠธ 8080 ๋ฐ host ํ—ˆ์šฉ) +- Excel ์ œ์–ด๋ฅผ ์œ„ํ•ด `xlsx` (SheetJS) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. + +#### [NEW] package.json +#### [NEW] vite.config.ts + +--- + +### 2. UI ๋ฐ ๋””์ž์ธ ์ปดํฌ๋„ŒํŠธ (`README.md` ๊ฐ€์ด๋“œ๋ผ์ธ ์ค€์ˆ˜) +- ๋””์ž์ธ: Box-less Design, Line-based Division ์ ์šฉ +- ์ปฌ๋Ÿฌ: `#1E5149`(Point), `#E5E7EB`(Border), `#F9FAFB`(Background) +- ํฐํŠธ: `Pretendard`, `Letter Spacing: -0.02em` ์ ์šฉ +- ํ…Œ์ด๋ธ” ์š”์†Œ: ๊ตฌ๋ถ„์„ ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฏธ๋‹ˆ๋ฉ€ ํ…Œ์ด๋ธ” + +#### [NEW] index.css + +--- + +### 3. ๋ฉ”์ธ HTML ๋ฐ ๋กœ์ง ๊ตฌํ˜„ +- **File Upload Area**: ์—‘์…€ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜ ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ๋‹จ ์ปจํŠธ๋กค ์˜์—ญ. +- **Data Table**: ํŒŒ์‹ฑ๋œ H/W ์ž์‚ฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅ. +- **Modal Component**: `README.md`์— ์ •์˜๋œ 2์—ด ๊ทธ๋ฆฌ๋“œ์™€ ์šฐ์ธก ์ƒ๋‹จ ๋‹ซ๊ธฐ, ํ•˜๋‹จ ์ €์žฅ ๋ฒ„ํŠผ์ด ํฌํ•จ๋œ ์ •๋ณด ์ˆ˜์ •/์ƒ์„ฑ ๋ชจ๋‹ฌ. +- **Excel Logic**: ์—…๋กœ๋“œ๋œ Excel ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ JSON ํ˜•ํƒœ๋กœ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ์— ๋“ค๊ณ  ์ฒ˜๋ฆฌํ•œ ํ›„ ๋‹ค์‹œ Excel๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ. + +#### [NEW] index.html +#### [NEW] src/main.ts +#### [NEW] src/excelHandler.ts + +## Open Questions + +> [!WARNING] +> 1. ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ œ ๊ทœ์ •์ด ์—†๋‹ค๋ฉด, ๊ฒฝ๋Ÿ‰ํ™” ๋ฐ ์„ค์ • ํŽธ์˜๋ฅผ ์œ„ํ•ด `Vite + Vanilla TypeScript` ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ์œผ์‹ ๊ฐ€์š”? (์›ํ•˜์‹ ๋‹ค๋ฉด React๋‚˜ Vue๋กœ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.) +> 2. ์ถ”๊ฐ€์ ์ธ ๊ฒ€์ƒ‰ ํ•„ํ„ฐ(์˜ˆ: ๋ฒ•์ธ๋ณ„, ๊ด€๋ฆฌ์ž๋ณ„ ๊ฒ€์ƒ‰)๊ฐ€ ๋‹น์žฅ ๋„์ž…๋˜์–ด์•ผ ํ•˜๋Š” ํ•„์ˆ˜ ๊ธฐ๋Šฅ์ธ๊ฐ€์š”? + +## Verification Plan + +### Automated Tests +- `npm run dev` ๋ฅผ ํ†ตํ•ด `http://localhost:8080` ํฌํŠธ ๊ฐœ๋ฐฉ ์„ฑ๊ณต ์—ฌ๋ถ€ ํ™•์ธ. +- ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ: + - ํ…œํ”Œ๋ฆฟ ๋‹ค์šด๋กœ๋“œ ํด๋ฆญ -> ์ •์ƒ์ ์ธ `hw_assets.xlsx` ๋‹ค์šด๋กœ๋“œ ์—ฌ๋ถ€ + - ์ƒ˜ํ”Œ ์—‘์…€ ํŒŒ์ผ ์—…๋กœ๋“œ -> ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์— ํ–‰(Row) ์ƒ์„ฑ ์—ฌ๋ถ€ + - ํ•ญ๋ชฉ ๋”๋ธ” ํด๋ฆญ ํ˜น์€ [์ˆ˜์ •] ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ -> ๋ชจ๋‹ฌ ํŒ์—… ๋ฐ ๋ฐ์ดํ„ฐ ์—ฐ๋™ ํ™•์ธ + - [์ €์žฅ ํ›„ ๋‚ด๋ณด๋‚ด๊ธฐ] ํด๋ฆญ -> ์—…๋ฐ์ดํŠธ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ์ƒˆ ์—‘์…€ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ํ™•์ธ + +### Manual Verification +- ๋””์ž์ธ ์š”๊ตฌ์‚ฌํ•ญ(`Pretendard`, `#1E5149`, Border-less ์ปจ์…‰) ๋ฐ˜์˜ ํ™•์ธ์„ ์Šคํฌ๋ฆฐ์ƒท ๋ Œ๋”๋ง์œผ๋กœ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. diff --git a/implementation_plan2 b/implementation_plan2 new file mode 100644 index 0000000..0d9d862 --- /dev/null +++ b/implementation_plan2 @@ -0,0 +1,51 @@ +# ๊ตฌ์กฐ ๊ฐœ์„  ๋ฐ ๋‹ค์ค‘ ํƒญ(Depth 2) ๋„์ž… ๊ณ„ํš + +์‚ฌ์šฉ์ž ์š”์ฒญ์— ๋”ฐ๋ผ H/W์™€ S/W๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ , ๊ทธ ํ•˜์œ„์— ๊ฐ๊ฐ ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ์ƒ์„ธ ํ•ญ๋ชฉ(๊ฐœ์ธPC, ์„œ๋ฒ„ ๋“ฑ) ํƒญ์„ ๋‚˜๋ˆ„๋Š” ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ตฌ์กฐ๋ฅผ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋‹๋ผ JS ๊ธฐ๋ฐ˜์—์„œ ๊ฐ ํƒญ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์„ ๊ทธ๋ ค๋‚ด๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. + +## User Review Required + +> [!IMPORTANT] +> 1. **์—‘์…€ ๊ด€๋ฆฌ ๋ฐฉ์‹ (Sheets ๋ถ„๋ฆฌ)**: ๋‹จ์ผ ์—‘์…€ ํŒŒ์ผ ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‹œํŠธ(Sheet)๋ฅผ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ์—‘์…€์„ ์—…๋กœ๋“œํ•˜๋ฉด, `๊ฐœ์ธPC`, `์„œ๋ฒ„`, `์Šคํ† ๋ฆฌ์ง€`, `์ „์‚ฐ๋น„ํ’ˆ` ๋“ฑ ๊ฐ๊ฐ์˜ ์‹œํŠธ๋ฅผ ํ•œ๋ฐฉ์— ํŒŒ์‹ฑํ•˜์—ฌ ๊ฐ ํƒญ์— ์ ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. +> 2. **S/W ์Šคํ‚ค๋งˆ**: ํ˜„์žฌ H/W ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ๋งŒ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. [๊ตฌ๋… ์†Œํ”„ํŠธ์›จ์–ด]์™€ [์˜๊ตฌ ์†Œํ”„ํŠธ์›จ์–ด] ํƒญ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ๋“ค(์˜ˆ: ์‚ฌ์šฉ๊ธฐ๊ฐ„, ๋ผ์ด์„ ์Šคํ‚ค, ๊ฒฐ์ œ๋ฐฉ์‹ ๋“ฑ)์€ ์•„์ง ์ •ํ•ด์ง€์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์ผ๋‹จ ๊ณตํ†ต S/W ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ž„์‹œ ํ…œํ”Œ๋ฆฟ(S/W๋ช…, ์œ ํ˜•, ๋ผ์ด์„ ์Šคํ‚ค, ํ• ๋‹น๋œ ์‚ฌ์šฉ์ž ๋“ฑ)์œผ๋กœ ๋งŒ๋“ค์–ด ๋‘๊ณ  ์ถ”ํ›„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœํ•ด๋„ ๋ ๊นŒ์š”? + +## Proposed Changes + +### 1. UI/UX: 2 Depth ๋„ค๋น„๊ฒŒ์ด์…˜ (`index.html`, `style.css`) +- **์ขŒ์ธก(๋˜๋Š” ์ƒ๋‹จ) GNB (Global Navigation Bar)**: H/W ์™€ S/W ๋ฅผ ์Šค์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ธ ํƒญ ์ƒ์„ฑ. +- **LNB (Local Navigation Bar)**: ๋ฉ”์ธ ํƒญ ์ „ํ™˜ ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ์„œ๋ธŒ ํƒญ(H/W: ๋Œ€์‹œ๋ณด๋“œ/PC/์„œ๋ฒ„/์Šคํ† ๋ฆฌ์ง€/๋น„ํ’ˆ, S/W: ๋Œ€์‹œ๋ณด๋“œ/๊ตฌ๋…/์˜๊ตฌ). +- `README.md` ๊ฐ€์ด๋“œ๋ผ์ธ์— ๋”ฐ๋ผ ํ™”๋ฉด์„ ๋ถ„ํ• ํ•˜๊ณ  ์ •๋ณด ๋ฐ€๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด Box-less, Line-based Layout ์œ ์ง€. + +#### [MODIFY] index.html +#### [MODIFY] src/style.css + +--- + +### 2. ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ (`main.ts`) +- ํ˜„์žฌ ์„ ํƒ๋œ ๋ฉ”๋‰ด ๋ށ์Šค(์˜ˆ: `activeCategory = 'HW'`, `activeSubTab = '๊ฐœ์ธPC'`)์— ๋”ฐ๋ผ ๋ Œ๋”๋ง ํ•จ์ˆ˜๊ฐ€ ๋™๊ธฐํ™”๋˜๋„๋ก ๋ผ์šฐํŒ…/์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง ์ถ”๊ฐ€. +- `Dashboard` ํƒญ ์ง„์ž… ์‹œ, ๋ชจ๋“  ์„œ๋ธŒ ํƒญ ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜(Total PCs, Total Servers ๋“ฑ)๋ฅผ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋Š” ์š”์•ฝ ์˜์—ญ(Summary Cards/Charts ์˜์—ญ) ์˜ˆ์•ฝ ๋ฐ ๊ตฌํ˜„. + +#### [MODIFY] src/main.ts + +--- + +### 3. ๋ฉ€ํ‹ฐ-์‹œํŠธ(Multi-sheet) ์—‘์…€ ํŒŒ์‹ฑ (`excelHandler.ts`) +- `SheetJS` ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œ/๋ฐ์ดํ„ฐ ์ถ”์ถœ ์‹œ ๋‹ค์ค‘ ์‹œํŠธ ์ƒ์„ฑ. +- **H/W ํ…œํ”Œ๋ฆฟ ์‹œํŠธ๋ช…**: `[๊ฐœ์ธPC, ์„œ๋ฒ„, ์Šคํ† ๋ฆฌ์ง€, ์ „์‚ฐ๋น„ํ’ˆ]` +- **S/W ํ…œํ”Œ๋ฆฟ ์‹œํŠธ๋ช…**: `[๊ตฌ๋…SW, ์˜๊ตฌSW]` + +#### [MODIFY] src/excelHandler.ts + +## Open Questions + +> [!WARNING] +> * ์™ผ์ชฝ ์‚ฌ์ด๋“œ๋ฐ”๋กœ ๋ฉ”๋‰ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”, ์ƒ๋‹จ ๊ฐ€๋กœ๋ฐ”(Top Nav) 2๋‹จ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”? Reference ์ด๋ฏธ์ง€๊ฐ€ ๋”ฐ๋กœ ์—†๋‹ค๋ฉด ๋ฒ”์šฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ํŽธํ•œ **์™ผ์ชฝ ์‚ฌ์ด๋“œ๋ฐ” ๊ตฌ์กฐ(Sidebar Menu)** ๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. (์ง„ํ–‰ ์Šน์ธ ์‹œ ์‚ฌ์ด๋“œ๋ฐ” ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.) + +## Verification Plan + +### Automated Tests +- ์ขŒ์ธก `H/W`, `S/W` ํด๋ฆญ ์‹œ ์„œ๋ธŒ ๋ฉ”๋‰ด๊ฐ€ ์ •์ƒ ํ† ๊ธ€๋˜๋Š”์ง€ ๊ฒ€์ฆ(`main.ts` DOM class toggle ํ™•์ธ). +- ์„œ๋ธŒ ๋ฉ”๋‰ด `์„œ๋ฒ„` ํด๋ฆญ ์‹œ ๋นˆ ํ…Œ์ด๋ธ”(๋˜๋Š” ์„œ๋ฒ„ ์ž์‚ฐ ํ…Œ์ด๋ธ”)์ด ๊ทธ๋ ค์ง€๋Š”์ง€ ํ™•์ธ. +- ๋‹ฌ๋ผ์ง„ ๊ตฌ์กฐ๋กœ `์—‘์…€ ํ…œํ”Œ๋ฆฟ ์–‘์‹`์„ ๋‹ค์šด๋กœ๋“œํ–ˆ์„ ๋•Œ ํŒŒ์ผ์— ๋‹ค์ˆ˜์˜ ์‹œํŠธ(Sheet)๊ฐ€ ์ •์ƒ ๋ถ„๋ฅ˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ. + +### Manual Verification +- ๋ธŒ๋ผ์šฐ์ € ์—์ด์ „ํŠธ๋ฅผ ํ†ตํ•ด ๋ฐ”๋€ ํ™”๋ฉด์˜ ์Šคํฌ๋ฆฐ์ƒท(LNB ์‚ฌ์ด๋“œ๋ฐ”, Dashboard ํ™”๋ฉด ๋“ฑ)์„ ์ฐ์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๊ณ . diff --git a/implementation_plan3 b/implementation_plan3 new file mode 100644 index 0000000..c6c38e2 --- /dev/null +++ b/implementation_plan3 @@ -0,0 +1,47 @@ +# ์ž„์‹œ DB ์ƒ์„ฑ ๋ฐ S/W ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ฐœํŽธ + +์ž„์‹œ DB ์—‘์…€ ํŒŒ์ผ ์ƒ์„ฑ๊ณผ S/W ๋ชฉ๋ก์˜ 'ํ• ๋‹น์ž' ์†์„ฑ UI ๊ฐœํŽธ์— ๋Œ€ํ•œ ๊ธฐ์ˆ  ๊ตฌํ˜„ ๊ณ„ํš์ž…๋‹ˆ๋‹ค. + +## User Review Required +> [!IMPORTANT] +> **์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ์‹์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.** +> ์—‘์…€์„ ์ž„์‹œ DB๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, "์‚ฌ์šฉ์ž ๊ด€๋ฆฌ" ํŒ์—…์—์„œ ์ถ”๊ฐ€/์‚ญ์ œ๋œ ์‚ฌ์šฉ์ž ๋ชฉ๋ก์„ ์—‘์…€์— ์ €์žฅํ•  ๋•Œ **์‰ผํ‘œ(,)๋กœ ๊ตฌ๋ถ„๋œ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด**(์˜ˆ: `ํ™๊ธธ๋™, ๊น€์ฒ ์ˆ˜, ์ด์˜ํฌ`)๋กœ ๊ธฐ์กด `ํ• ๋‹น์ž` ์ปฌ๋Ÿผ์— ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ์‹์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์ด ๊ดœ์ฐฎ์œผ์‹ ๊ฐ€์š”? + +## Proposed Changes + +### 1. ์ž„์‹œ DB ์—ฐ๋™ +์ž„์‹œ๋กœ ์‚ฌ์šฉํ•  ์ดˆ๊ธฐ ์—‘์…€ ํŒŒ์ผ(`temp_db.xlsx`)์„ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. +- ๊ฐœ์ธPC, ์„œ๋ฒ„, ๊ตฌ๋…SW, ์˜๊ตฌSW ์‹œํŠธ์— ๊ฐ๊ฐ ๊ตฌ์„ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” dummy ๋ฐ์ดํ„ฐ 1~2๊ฐœ์”ฉ์„ ํฌํ•จํ•˜์—ฌ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. +- ํ–ฅํ›„ ํ™”๋ฉด์—์„œ '์—‘์…€ ์—…๋กœ๋“œ'๋ฅผ ํ†ตํ•ด ์ด ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ๋ฟŒ๋ ค๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์›ํ•˜์‹œ๋ฉด ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ ์ด ํŒŒ์ผ์„ ์ž„ํฌํŠธํ•˜๋„๋ก ๋กœ์ง์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์œผ๋‚˜, ๋ธŒ๋ผ์šฐ์ € ๋‹จ์—์„œ ๋กœ์ปฌ ํŒŒ์ผ์„ ์ž๋™ ๋ฆฌ๋”ฉํ•˜๋Š” ๊ฒƒ์€ ์ œํ•œ์ด ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ํŒŒ์ผ์„ ์ œ๊ณต๋งŒ ํ•ฉ๋‹ˆ๋‹ค.) + +--- + +### 2. ์ปดํฌ๋„ŒํŠธ: HTML ๊ตฌ์กฐ ๋ณ€๊ฒฝ +#### [MODIFY] [index.html](file:///c:/Project/HM%20ITAM/index.html) +- `sw-asset-modal`์˜ ํผ ๋‚ด์šฉ ์ค‘ "ํ• ๋‹น์ž" ์ž…๋ ฅ ํผ(