From 247b9dbee7e4f5ef396f5c71efe1aff1d4727c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=9C=EA=B3=A8=EC=95=BD=EC=82=AC?= Date: Tue, 9 Sep 2025 15:34:12 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=8F=A5=20Add=20FARMQ=20Headplane=20custom?= =?UTF-8?q?ization=20business=20plan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Comprehensive business plan for customizing Headplane for FARMQ: - Company overview: 100 pharmacies with Proxmox infrastructure - Current system analysis: Working Headscale + Headplane setup - Enhancement requirements: Pharmacy info, machine specs, monitoring - Database schema design: pharmacy_info, machine_specs, monitoring_data - Implementation approaches: Fork vs separate system vs plugin - Technical specifications: React frontend + API backend + Proxmox integration - Development roadmap: 4-5 weeks phased implementation - Success metrics and cost analysis Ready for pharmacy management system development based on existing Headplane. πŸ€– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- FARMQ_HEADPLANE_CUSTOMIZATION_PLAN.md | 349 ++++++++++++++++++++++++++ 1 file changed, 349 insertions(+) create mode 100644 FARMQ_HEADPLANE_CUSTOMIZATION_PLAN.md diff --git a/FARMQ_HEADPLANE_CUSTOMIZATION_PLAN.md b/FARMQ_HEADPLANE_CUSTOMIZATION_PLAN.md new file mode 100644 index 0000000..24f6227 --- /dev/null +++ b/FARMQ_HEADPLANE_CUSTOMIZATION_PLAN.md @@ -0,0 +1,349 @@ +# πŸ₯ 팜큐(FARMQ) Headplane μ»€μŠ€ν„°λ§ˆμ΄μ§• κΈ°νšμ„œ + +## πŸ“‹ ν”„λ‘œμ νŠΈ κ°œμš” + +### νšŒμ‚¬ ν˜„ν™© +- **νšŒμ‚¬λͺ…**: 팜큐(FARMQ) +- **사업 규λͺ¨**: μ•½κ΅­ 100κ°œμ†Œ +- **인프라**: 각 μ•½κ΅­λ§ˆλ‹€ Proxmox 호슀트 PC λ‚©ν’ˆ +- **관리 λŒ€μƒ**: 약ꡭ별 VM ν™˜κ²½ 원격 관리 +- **λ„€νŠΈμ›Œν¬**: WireGuard 기반 Headscale + Headplane μ „ν™˜ μ™„λ£Œ + +### ν˜„μž¬ ν™˜κ²½ +- βœ… **Headscale μ„œλ²„**: http://192.168.0.151:8070 (정상 운영) +- βœ… **Headplane UI**: http://192.168.0.151:3000/admin/ (정상 운영) +- βœ… **VPN λ„€νŠΈμ›Œν¬**: 100.64.0.0/10 λŒ€μ—­ ν• λ‹Ή +- βœ… **κΈ°λ³Έ κΈ°λŠ₯**: Machine/User 관리 κ°€λŠ₯ + +### κ°œμ„  λͺ©ν‘œ +ν˜„μž¬ κΈ°λ³Έ Headplane UIλ₯Ό **팜큐 μ „μš© μ•½κ΅­ 관리 μ‹œμŠ€ν…œ**으둜 ν™•μž₯ + +## 🎯 μš”κ΅¬μ‚¬ν•­ 뢄석 + +### 1. 데이터 ν™•μž₯ μš”κ΅¬μ‚¬ν•­ + +#### ν˜„μž¬ User ν…Œμ΄λΈ” ꡬ쑰 +``` +User | Role | Created At | Last Seen +myuser | Unmanaged | 2025.9.9 | Connected +``` + +#### ν™•μž₯ μš”κ΅¬μ‚¬ν•­ +``` +User | μ•½κ΅­λͺ… | μ‚¬μ—…μžλ²ˆν˜Έ | Role | Created At | Last Seen +myuser | μ„œμšΈμ•½κ΅­ | 123-45-67890 | Unmanaged | 2025.9.9 | Connected +``` + +#### Machine 정보 ν™•μž₯ μš”κ΅¬μ‚¬ν•­ +- **ν˜„μž¬**: Machine μ΄λ¦„λ§Œ 관리 +- **ν™•μž₯ ν›„**: + - μ•½κ΅­λͺ… 연동 + - PC 사양 정보 (CPU, RAM, Storage) + - Proxmox 호슀트 정보 + - μ‹€μ‹œκ°„ ν•˜λ“œμ›¨μ–΄ λͺ¨λ‹ˆν„°λ§ + +### 2. λͺ¨λ‹ˆν„°λ§ μš”κ΅¬μ‚¬ν•­ +- **Proxmox API 연동**: CPU μ˜¨λ„, μ‚¬μš©λ₯ , VM μƒνƒœ +- **μ‹€μ‹œκ°„ λŒ€μ‹œλ³΄λ“œ**: 약ꡭ별 μ‹œμŠ€ν…œ ν˜„ν™© +- **μ•Œλ¦Ό μ‹œμŠ€ν…œ**: μž₯μ•  λ°œμƒ μ‹œ μ‹€μ‹œκ°„ μ•Œλ¦Ό + +## πŸ—οΈ μ•„ν‚€ν…μ²˜ 섀계 + +### μ‹œμŠ€ν…œ ꡬ쑰 +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Headplane UI │───►│ Custom Backend │───►│ Proxmox Hosts β”‚ +β”‚ (Frontend) β”‚ β”‚ (API Server) β”‚ β”‚ (100개 μ•½κ΅­) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ β”‚ β”‚ + β”‚ β–Ό β”‚ + β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ + └─────────────►│ Headscale DB β”‚β—„β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ (Extended) β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### λ°μ΄ν„°λ² μ΄μŠ€ ν™•μž₯ 섀계 + +#### μƒˆλ‘œμš΄ ν…Œμ΄λΈ”: `pharmacy_info` +```sql +CREATE TABLE pharmacy_info ( + id SERIAL PRIMARY KEY, + user_id VARCHAR(255) UNIQUE REFERENCES users(name), + pharmacy_name VARCHAR(255) NOT NULL, + business_number VARCHAR(20), + address TEXT, + phone VARCHAR(20), + manager_name VARCHAR(100), + proxmox_host VARCHAR(255), + proxmox_api_token TEXT, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() +); +``` + +#### μƒˆλ‘œμš΄ ν…Œμ΄λΈ”: `machine_specs` +```sql +CREATE TABLE machine_specs ( + id SERIAL PRIMARY KEY, + machine_id BIGINT REFERENCES machines(id), + pharmacy_id INTEGER REFERENCES pharmacy_info(id), + cpu_model VARCHAR(255), + cpu_cores INTEGER, + ram_gb INTEGER, + storage_gb INTEGER, + gpu_model VARCHAR(255), + last_updated TIMESTAMP DEFAULT NOW() +); +``` + +#### μƒˆλ‘œμš΄ ν…Œμ΄λΈ”: `monitoring_data` +```sql +CREATE TABLE monitoring_data ( + id SERIAL PRIMARY KEY, + machine_id BIGINT REFERENCES machines(id), + cpu_usage DECIMAL(5,2), + memory_usage DECIMAL(5,2), + disk_usage DECIMAL(5,2), + cpu_temperature INTEGER, + network_rx_bytes BIGINT, + network_tx_bytes BIGINT, + vm_count INTEGER, + vm_running INTEGER, + collected_at TIMESTAMP DEFAULT NOW() +); +``` + +## πŸ› οΈ κ΅¬ν˜„ λ°©μ•ˆ + +### λ°©μ•ˆ 1: Headplane 포크 + 직접 μˆ˜μ • (ꢌμž₯) +**μž₯점**: μ™„μ „ν•œ μ»€μŠ€ν„°λ§ˆμ΄μ§• κ°€λŠ₯ +**단점**: μ—…μŠ€νŠΈλ¦Ό μ—…λ°μ΄νŠΈ 반영 어렀움 +**개발 κΈ°κ°„**: 2-3μ£Ό + +#### κ΅¬ν˜„ 단계: +1. **포크 및 κ°œλ°œν™˜κ²½ ꡬ성** +2. **λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ ν™•μž₯** +3. **API μ—”λ“œν¬μΈνŠΈ μΆ”κ°€** +4. **UI μ»΄ν¬λ„ŒνŠΈ μ»€μŠ€ν„°λ§ˆμ΄μ§•** +5. **Proxmox API 연동 λͺ¨λ“ˆ 개발** +6. **λͺ¨λ‹ˆν„°λ§ λŒ€μ‹œλ³΄λ“œ κ΅¬ν˜„** + +### λ°©μ•ˆ 2: 별도 관리 μ‹œμŠ€ν…œ + Headplane 연동 +**μž₯점**: κΈ°μ‘΄ Headplane μœ μ§€, 독립적 개발 +**단점**: μ‹œμŠ€ν…œ λΆ„λ¦¬λ‘œ λ³΅μž‘λ„ 증가 +**개발 κΈ°κ°„**: 3-4μ£Ό + +### λ°©μ•ˆ 3: Headplane ν”ŒλŸ¬κ·ΈμΈ μ‹œμŠ€ν…œ ꡬ좕 +**μž₯점**: λͺ¨λ“ˆλŸ¬ ꡬ쑰, ν™•μž₯μ„± μ’‹μŒ +**단점**: ν”ŒλŸ¬κ·ΈμΈ μ‹œμŠ€ν…œ 자체 개발 ν•„μš” +**개발 κΈ°κ°„**: 4-5μ£Ό + +## πŸ“‹ μ„ΈλΆ€ κΈ°λŠ₯ λͺ…μ„Έ + +### 1. μ•½κ΅­ 정보 관리 +#### 1-1. μ•½κ΅­ 등둝/μˆ˜μ • ν™”λ©΄ +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ μ•½κ΅­ 정보 등둝 β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ μ•½κ΅­λͺ…: [μ„œμšΈμ€‘μ•™μ•½κ΅­ ] β”‚ +β”‚ μ‚¬μ—…μžλ²ˆν˜Έ: [123-45-67890 ] β”‚ +β”‚ μ£Όμ†Œ: [μ„œμšΈμ‹œ 강남ꡬ... ] β”‚ +β”‚ μ „ν™”λ²ˆν˜Έ: [02-1234-5678 ] β”‚ +β”‚ λ‹΄λ‹Ήμž: [홍길동 ] β”‚ +β”‚ Proxmox 호슀트: [192.168.1.100 ] β”‚ +β”‚ API 토큰: [********************] β”‚ +β”‚ β”‚ +β”‚ [μ €μž₯] [μ·¨μ†Œ] β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +#### 1-2. μ‚¬μš©μž ν…Œμ΄λΈ” ν™•μž₯ +``` +User | μ•½κ΅­λͺ… | μ‚¬μ—…μžλ²ˆν˜Έ | μ „ν™”λ²ˆν˜Έ | Role | Last Seen +pharmacy1| μ„œμšΈμ€‘μ•™μ•½κ΅­ | 123-45-67890 | 02-1234-5678 | Active | 5λΆ„ μ „ +pharmacy2| λΆ€μ‚°ν•΄μš΄μ•½κ΅­ | 987-65-43210 | 051-9876-5432| Active | 1μ‹œκ°„ μ „ +``` + +### 2. λ¨Έμ‹  정보 ν™•μž₯ +#### 2-1. λ¨Έμ‹  상세 정보 ν™”λ©΄ +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ λ¨Έμ‹  상세 정보: pharmacy1-main β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ μ•½κ΅­λͺ…: μ„œμšΈμ€‘μ•™μ•½κ΅­ β”‚ +β”‚ IP μ£Όμ†Œ: 100.64.0.15 β”‚ +β”‚ λ§ˆμ§€λ§‰ 접속: 2λΆ„ μ „ β”‚ +β”‚ β”‚ +β”‚ ν•˜λ“œμ›¨μ–΄ 정보: β”‚ +β”‚ CPU: Intel i7-12700 (12μ½”μ–΄) β”‚ +β”‚ RAM: 32GB β”‚ +β”‚ Storage: 1TB NVMe SSD β”‚ +β”‚ β”‚ +β”‚ μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§: β”‚ +β”‚ CPU μ‚¬μš©λ₯ : β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 80% β”‚ +β”‚ CPU μ˜¨λ„: 65Β°C β”‚ +β”‚ λ©”λͺ¨λ¦¬ μ‚¬μš©λ₯ : β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘ 60% β”‚ +β”‚ λ””μŠ€ν¬ μ‚¬μš©λ₯ : β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 30% β”‚ +β”‚ β”‚ +β”‚ VM μƒνƒœ: β”‚ +β”‚ 총 VM: 5개 | 싀행쀑: 4개 | μ •μ§€: 1κ°œβ”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### 3. 톡합 λŒ€μ‹œλ³΄λ“œ +#### 3-1. 메인 λŒ€μ‹œλ³΄λ“œ λ ˆμ΄μ•„μ›ƒ +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ 팜큐 μ•½κ΅­ 관리 μ‹œμŠ€ν…œ [μ‚¬μš©μž: admin] β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ πŸ“Š 전체 ν˜„ν™© β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ │총 μ•½κ΅­ 수 β”‚μ˜¨λΌμΈ β”‚μ˜€ν”„λΌμΈ │평균 CPU μ˜¨λ„ β”‚ β”‚ +β”‚ β”‚ 100 β”‚ 95 β”‚ 5 β”‚ 62Β°C β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”‚ +β”‚ 🚨 μ•Œλ¦Ό β”‚ +β”‚ β€’ λΆ€μ‚°ν•΄μš΄μ•½κ΅­: CPU μ˜¨λ„ 85Β°C (κ²½κ³ ) β”‚ +β”‚ β€’ λŒ€κ΅¬μ€‘μ•™μ•½κ΅­: λ””μŠ€ν¬ μ‚¬μš©λ₯  95% (μœ„ν—˜) β”‚ +β”‚ β”‚ +β”‚ πŸ“ˆ 약ꡭ별 μƒνƒœ β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚μ•½κ΅­λͺ… β”‚μƒνƒœ β”‚CPUμ˜¨λ„ β”‚λ©”λͺ¨λ¦¬ β”‚λ§ˆμ§€λ§‰ 접속 β”‚ β”‚ +β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ +β”‚ β”‚μ„œμšΈμ€‘μ•™μ•½κ΅­ β”‚πŸŸ’ μ˜¨λΌμΈβ”‚ 65Β°C β”‚ 80% β”‚ 2λΆ„ μ „ β”‚ β”‚ +β”‚ β”‚λΆ€μ‚°ν•΄μš΄μ•½κ΅­ β”‚πŸŸ‘ κ²½κ³  β”‚ 85Β°C β”‚ 60% β”‚ 5λΆ„ μ „ β”‚ β”‚ +β”‚ β”‚λŒ€κ΅¬μ€‘μ•™μ•½κ΅­ β”‚πŸ”΄ μœ„ν—˜ β”‚ 70Β°C β”‚ 95% β”‚ 10λΆ„ μ „ β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### 4. Proxmox API 연동 +#### 4-1. 데이터 μˆ˜μ§‘ ν”„λ‘œμ„ΈμŠ€ +```python +# proxmox_monitor.py +class ProxmoxMonitor: + def collect_host_info(self, proxmox_host, api_token): + """Proxmox 호슀트 정보 μˆ˜μ§‘""" + # CPU μ˜¨λ„, μ‚¬μš©λ₯  + # λ©”λͺ¨λ¦¬ μ‚¬μš©λ₯  + # λ””μŠ€ν¬ μ‚¬μš©λ₯  + # VM μƒνƒœ 및 개수 + # λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½ + + def collect_vm_info(self, proxmox_host, vm_id): + """κ°œλ³„ VM 정보 μˆ˜μ§‘""" + # VM μƒνƒœ (running, stopped) + # λ¦¬μ†ŒμŠ€ ν• λ‹ΉλŸ‰ + # μ‹€μ œ λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰ +``` + +## πŸ”§ 기술 μŠ€νƒ + +### Frontend (Headplane 기반) +- **React 19.1.0** + TypeScript +- **Tailwind CSS** (μŠ€νƒ€μΌλ§) +- **React Router** (λΌμš°νŒ…) +- **Chart.js** (λͺ¨λ‹ˆν„°λ§ 차트) +- **Socket.io Client** (μ‹€μ‹œκ°„ μ—…λ°μ΄νŠΈ) + +### Backend (ν™•μž₯ API μ„œλ²„) +- **Node.js** + Express.js λ˜λŠ” **Python FastAPI** +- **PostgreSQL** (ν™•μž₯된 λ°μ΄ν„°λ² μ΄μŠ€) +- **Socket.io** (μ‹€μ‹œκ°„ 톡신) +- **Proxmox API Client** +- **Cron Jobs** (주기적 데이터 μˆ˜μ§‘) + +### λͺ¨λ‹ˆν„°λ§ μŠ€νƒ +- **Proxmox API** (호슀트 정보) +- **Glances API** (μ‹œμŠ€ν…œ λ©”νŠΈλ¦­) +- **InfluxDB** (μ‹œκ³„μ—΄ 데이터 μ €μž₯) +- **Redis** (캐싱 및 μ‹€μ‹œκ°„ 데이터) + +## πŸ“… 개발 λ‘œλ“œλ§΅ + +### Phase 1: 기반 ꡬ좕 (1μ£Ό) +- [ ] Headplane 포크 및 κ°œλ°œν™˜κ²½ ꡬ성 +- [ ] λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ 섀계 및 ν™•μž₯ +- [ ] κΈ°λ³Έ μ•½κ΅­ 정보 CRUD API κ΅¬ν˜„ +- [ ] UI κΈ°λ³Έ λ ˆμ΄μ•„μ›ƒ μˆ˜μ • + +### Phase 2: 핡심 κΈ°λŠ₯ (2μ£Ό) +- [ ] μ‚¬μš©μž ν…Œμ΄λΈ”μ— μ•½κ΅­ 정보 연동 +- [ ] λ¨Έμ‹  정보 ν™•μž₯ 및 UI κ°œμ„  +- [ ] Proxmox API 연동 λͺ¨λ“ˆ 개발 +- [ ] κΈ°λ³Έ λͺ¨λ‹ˆν„°λ§ λŒ€μ‹œλ³΄λ“œ κ΅¬ν˜„ + +### Phase 3: 고도화 (1μ£Ό) +- [ ] μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ κ΅¬ν˜„ +- [ ] μ•Œλ¦Ό μ‹œμŠ€ν…œ ꡬ좕 +- [ ] 톡합 λŒ€μ‹œλ³΄λ“œ μ™„μ„± +- [ ] μ„±λŠ₯ μ΅œμ ν™” 및 ν…ŒμŠ€νŠΈ + +### Phase 4: 배포 및 운영 (1μ£Ό) +- [ ] ν”„λ‘œλ•μ…˜ ν™˜κ²½ 배포 +- [ ] 100개 μ•½κ΅­ 데이터 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ +- [ ] 운영 맀뉴얼 μž‘μ„± +- [ ] μ‚¬μš©μž ꡐ윑 및 ν”Όλ“œλ°± μˆ˜μ§‘ + +## πŸ’° μ˜ˆμƒ λΉ„μš© 및 λ¦¬μ†ŒμŠ€ + +### 개발 λ¦¬μ†ŒμŠ€ +- **개발 κΈ°κ°„**: 4-5μ£Ό +- **개발자**: ν’€μŠ€νƒ 개발자 1λͺ… +- **λ””μžμ΄λ„ˆ**: UI/UX λ””μžμ΄λ„ˆ 0.5λͺ… + +### 인프라 λΉ„μš© +- **ν™•μž₯ μ„œλ²„**: μΆ”κ°€ μ„œλ²„ μΈμŠ€ν„΄μŠ€ (λͺ¨λ‹ˆν„°λ§ 데이터 처리) +- **λ°μ΄ν„°λ² μ΄μŠ€**: PostgreSQL + InfluxDB +- **μŠ€ν† λ¦¬μ§€**: μ‹œκ³„μ—΄ 데이터 μ €μž₯용 + +## πŸš€ μ‹œμž‘ν•˜κΈ° + +### 1단계: μš”κ΅¬μ‚¬ν•­ ν™•μ • +- [ ] μ•½κ΅­ 정보 ν•„λ“œ μ΅œμ’… ν™•μ • +- [ ] λͺ¨λ‹ˆν„°λ§ μ§€ν‘œ μš°μ„ μˆœμœ„ κ²°μ • +- [ ] UI/UX λ””μžμΈ 컨셉 κ²°μ • + +### 2단계: κ°œλ°œν™˜κ²½ ꡬ성 +- [ ] Headplane 포크 및 클둠 +- [ ] 둜컬 κ°œλ°œν™˜κ²½ μ„ΈνŒ… +- [ ] ν…ŒμŠ€νŠΈμš© Proxmox 호슀트 μ€€λΉ„ + +### 3단계: ν”„λ‘œν† νƒ€μž… 개발 +- [ ] μ•½κ΅­ 정보 등둝 ν™”λ©΄ κ΅¬ν˜„ +- [ ] κΈ°λ³Έ λͺ¨λ‹ˆν„°λ§ κΈ°λŠ₯ κ΅¬ν˜„ +- [ ] 초기 버전 데λͺ¨ + +## πŸ“Š 성곡 μ§€ν‘œ + +### κΈ°λŠ₯적 μ§€ν‘œ +- [ ] 100개 μ•½κ΅­ 정보 μ™„μ „ 등둝 +- [ ] μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ 정확도 95% 이상 +- [ ] μ•Œλ¦Ό λ°˜μ‘ μ‹œκ°„ 1λΆ„ 이내 +- [ ] μ‹œμŠ€ν…œ κ°€μš©μ„± 99.5% 이상 + +### μ‚¬μš©μ„± μ§€ν‘œ +- [ ] κ΄€λ¦¬μž 업무 효율 50% ν–₯상 +- [ ] μž₯μ•  발견 μ‹œκ°„ 80% 단좕 +- [ ] μ‚¬μš©μž λ§Œμ‘±λ„ 4.5/5.0 이상 + +## πŸ“ 체크리슀트 + +### μ¦‰μ‹œ κ²€ν†  ν•„μš”μ‚¬ν•­ +- [ ] ν˜„μž¬ Headscale DB ꡬ쑰 뢄석 +- [ ] Proxmox API μ ‘κ·Ό κΆŒν•œ 확인 +- [ ] 약ꡭ별 λ„€νŠΈμ›Œν¬ μ ‘κ·Όμ„± ν…ŒμŠ€νŠΈ +- [ ] μΆ”κ°€ ν•˜λ“œμ›¨μ–΄ λ¦¬μ†ŒμŠ€ μš”κ΅¬μ‚¬ν•­ κ²€ν†  + +### μž₯기적 고렀사항 +- [ ] ν™•μž₯μ„±: μ•½κ΅­ 수 증가 λŒ€λΉ„ +- [ ] λ³΄μ•ˆ: μ•½κ΅­ 데이터 보호 +- [ ] λ°±μ—…: μ€‘μš” 데이터 λ°±μ—… μ „λž΅ +- [ ] μ—…λ°μ΄νŠΈ: μ›ν™œν•œ μ‹œμŠ€ν…œ μ—…λ°μ΄νŠΈ λ°©μ•ˆ + +--- +**πŸ“… μž‘μ„±μΌ**: 2025-09-09 +**πŸ‘€ μž‘μ„±μž**: Claude Code Assistant +**🏒 λŒ€μƒ**: 팜큐(FARMQ) - μ•½κ΅­ IT 인프라 관리 μ‹œμŠ€ν…œ \ No newline at end of file