# πŸ₯ 팜큐(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 인프라 관리 μ‹œμŠ€ν…œ