# FARMQ 인프라 아키텍처 완전 분석 ## 📋 개요 FARMQ는 100개 약국 네트워크를 관리하는 혁신적인 인프라로, **기존 VPN 방식의 한계를 뛰어넘는 SSL 도메인 직접 접속 구조**를 구현했습니다. Headscale을 관리 목적으로 활용하면서도, 일반 사용자는 VPN 설치 없이 웹브라우저만으로 각 지역 Proxmox에 접속할 수 있는 독창적인 아키텍처입니다. ## 🏗️ 전체 네트워크 구성 ### 1. 외부 인증 및 라우팅 계층 ``` [클라우드플레어] ├── DNS-01 챌린지 (API 인증) ├── Let's Encrypt SSL 인증서 발급 └── *.pharmq.kr 와일드카드 인증서 ``` ### 2. 물리적 네트워크 구성 ``` [ISP KT] 192.168.0.1 (게이트웨이) └── Proxmox Host: 192.168.0.200 ├── Ubuntu VM 104: 192.168.0.100 (Headscale 중앙서버) └── Debian LXC 103: 192.168.0.19 (Caddy 리버스 프록시) ``` ## 🔧 현재 시스템 상태 확인 (2025-09-22 13:28 기준) ### Docker 컨테이너 상태 ``` CONTAINER: headscale (a1e850fbf942) ├── 상태: Up 4 hours (healthy) ├── 포트: 8070→8080 (FARMQ Admin), 9090→9090 (Headscale API) ├── 이미지: headscale/headscale:latest └── 헬스체크: 정상 ``` ### 활성 프로세스 ``` ✅ Docker 서비스: Active (running) - PID 36505 ✅ Headscale 컨테이너: /ko-app/headscale serve - PID 38393 ✅ FARMQ Admin: Python Flask 앱 - PID 53064 ✅ Docker 프록시: 4개 프로세스 (포트 8070, 9090 바인딩) ``` ### Headscale 네트워크 상태 ``` 노드 상태 (docker exec headscale headscale nodes list): ├── ubuntu (ID: 1, 100.64.0.1): 🟢 온라인 - Last seen: 2025-09-22 12:17:26 ├── pve5 (ID: 2, 100.64.0.2): 🟢 온라인 - Last seen: 2025-09-22 12:17:26 └── caddy (ID: 3, 100.64.0.3): 🟢 온라인 - Last seen: 2025-09-22 12:17:26 사용자: default (ID: 1, Created: 2025-09-22 09:12:02) IP 대역: 100.64.0.x/10, fd7a:115c:a1e0::/48 (IPv6) ``` ### 서비스 엔드포인트 상태 ``` ✅ FARMQ Health Check (localhost:8070): {"status":"pass"} ✅ 포트 바인딩 확인 (ss -tlnp): - 0.0.0.0:8070 (FARMQ Admin) - 0.0.0.0:9090 (Headscale API) - IPv6 지원 활성화 ``` ### 시스템 리소스 ``` 디스크 사용량: 4.2G/14G (31% 사용) 메모리 사용량: ├── Headscale 컨테이너: ~56MB ├── FARMQ Admin Python: ~83MB └── Docker 데몬: ~84MB ``` ## ⚡ 핵심 혁신: VPN 불필요 SSL 접속 ### 기존 Magic DNS vs 우리 아키텍처 #### ❌ 기존 Magic DNS 한계 ``` Magic DNS (Tailscale/Headscale 표준) ├── 클라이언트가 반드시 VPN 네트워크에 포함되어야 함 ├── 100.x.x.x 내부 IP로만 접근 가능 ├── 외부 네트워크에서 직접 접근 불가 ├── 모든 접속 장치에 노드 설치 필요 ├── 복잡한 키 관리 및 네트워크 설정 └── 방화벽 및 보안 정책 충돌 가능성 ``` #### ✅ 우리의 혁신적 구조 ``` SSL 도메인 직접 접속 (VPN 불필요) ├── 외부 인터넷에서 바로 pve1.pharmq.kr 접속 ├── SSL 인증서로 보안 연결 (Let's Encrypt) ├── 클라이언트에 VPN 설치 불필요 ├── 일반 웹브라우저로 즉시 접근 가능 ├── 복잡한 네트워크 설정 없음 └── 사용자 친화적 웹 인터페이스 ``` ## 🌐 SSL 도메인 직접 접속 구조 ### 접속 플로우 (VPN 없이) ``` [외부 사용자] ↓ HTTPS 요청 (웹브라우저) [pve1.pharmq.kr:8006] ↓ Cloudflare DNS 조회 [Caddy 리버스 프록시] (192.168.0.19) ↓ SSL 터미네이션 + 라우팅 [지역 Proxmox Host] (로컬망/LTE망) ↓ 웹 인터페이스 제공 [Proxmox 관리 화면] ``` ### 각 지역 Proxmox 접속 예시 ``` 🏥 약국 A: pve1.pharmq.kr → 부산 지역 Proxmox 🏥 약국 B: pve2.pharmq.kr → 서울 지역 Proxmox 🏥 약국 C: pve3.pharmq.kr → 대구 지역 Proxmox 🏥 약국 D: pve4.pharmq.kr → 대전 지역 Proxmox 모든 접속이 SSL 보안 + 공인 도메인으로 가능 브라우저 주소창에 직접 입력하여 접속 ``` ## 🔄 Headscale의 실제 역할 ### Headscale 네트워크 (내부 관리용) ``` Headscale은 관리 목적으로만 사용: ├── 중앙 서버 ↔ 지역 Proxmox 간 관리 통신 ├── 모니터링 및 상태 확인 ├── 원격 유지보수 및 업데이트 ├── FARMQ Admin 웹 인터페이스 데이터 수집 └── 100.64.0.x 대역으로 내부 관리망 구성 ``` ### 일반 사용자 접속 (Headscale 독립) ``` 일반 사용자는 Headscale 불필요: ├── 웹브라우저로 pve1.pharmq.kr 직접 접속 ├── VPN 클라이언트 설치 없음 ├── 복잡한 네트워크 설정 없음 ├── 즉시 Proxmox 웹 인터페이스 사용 └── 스마트폰에서도 동일하게 접속 가능 ``` ## 🎯 아키텍처의 혁신적 장점 ### 1. 사용자 편의성 ``` 기존 VPN 방식: ❌ 각 PC에 Tailscale/Headscale 클라이언트 설치 ❌ 복잡한 네트워크 설정 및 키 관리 ❌ 방화벽 및 보안 정책 충돌 가능성 ❌ 모바일 장치에서 복잡한 설정 우리 SSL 방식: ✅ 웹브라우저만 있으면 즉시 접속 ✅ 설치나 설정 과정 불필요 ✅ 일반 웹사이트처럼 직관적 접근 ✅ 모든 플랫폼에서 동일한 사용자 경험 ``` ### 2. 네트워크 투명성 ``` 지역별 Proxmox 환경: ├── 로컬 라우터 뒤 (NAT 환경) ├── LTE/5G 모바일 연결 ├── 기업용 방화벽 뒤 ├── 공공 WiFi 환경 └── 모든 환경에서 동일한 pveX.pharmq.kr 접속 ``` ### 3. 보안 및 확장성 ``` SSL 인증서 자동 관리: ├── Let's Encrypt 자동 갱신 (90일마다) ├── Cloudflare DNS-01 챌린지 ├── 와일드카드 인증서로 무제한 서브도메인 ├── 각 지역별 독립적 보안 정책 적용 가능 └── TLS 1.3 최신 보안 프로토콜 지원 ``` ## 📊 FARMQ Admin 구현 아키텍처 ### 계층 구조 ``` ┌─────────────────────────────────────┐ │ FARMQ Admin │ ← 웹 UI, 약국 관리, 대시보드 │ (Flask + Bootstrap + JS) │ ├─────────────────────────────────────┤ │ API Layer │ ← REST API, CLI 인터페이스 │ (Python subprocess calls) │ ├─────────────────────────────────────┤ │ Headscale CLI │ ← 네트워크 관리 엔진 │ (Docker containerized) │ ├─────────────────────────────────────┤ │ Database Layer │ ← 이중 데이터베이스 │ ┌─────────────┬─────────────────┐ │ │ │ FARMQ DB │ Headscale DB │ │ │ │ (약국정보) │ (노드정보) │ │ │ └─────────────┴─────────────────┘ │ └─────────────────────────────────────┘ ``` ### CLI 기반 기능 구현 패턴 ```python # 표준 구현 패턴 def headscale_function(): try: # Docker를 통해 Headscale CLI 실행 result = subprocess.run( ['docker', 'exec', 'headscale', 'headscale', 'command', 'args'], capture_output=True, text=True, check=True ) # JSON 출력 파싱 (가능한 경우) if '-o json' in args: data = json.loads(result.stdout) return data return {'success': True, 'output': result.stdout} except subprocess.CalledProcessError as e: return {'success': False, 'error': e.stderr} ``` ## 🌐 데이터 플로우 및 연결성 ### 인바운드 트래픽 ``` 외부 클라이언트 ↓ HTTPS://pve1.pharmq.kr Cloudflare DNS ↓ IP 주소 해석 KT ISP (192.168.0.1) ↓ 라우팅 Caddy LXC (192.168.0.19) ↓ SSL 터미네이션 + 프록시 Headscale VM (192.168.0.100) ↓ 최종 서비스 ``` ### 내부 네트워크 통신 ``` FARMQ Admin (8070) ← 웹 인터페이스 및 API Headscale API (9090) ← CLI 명령 처리 및 노드 관리 Docker 네트워크 (172.18.0.2) ← 컨테이너 간 통신 Headscale VPN (100.64.0.x) ← 관리 목적 내부 통신 ``` ## 🚀 확장 시나리오 ### 새로운 지역 추가 시 ``` 1. 새 Proxmox Host 설치 (임의의 네트워크 환경) 2. pveN.pharmq.kr DNS 레코드 추가 (Cloudflare) 3. Caddy 라우팅 규칙 업데이트 4. SSL 인증서 자동 발급 (Let's Encrypt) 5. 즉시 외부 접속 가능 선택사항: - Headscale VPN 노드 추가 (관리 목적) - FARMQ Admin에서 모니터링 설정 ``` ### 100개 약국 확장 예시 ``` pve1.pharmq.kr → 서울 강남구 약국 pve2.pharmq.kr → 부산 해운대구 약국 pve3.pharmq.kr → 대구 중구 약국 ... pve100.pharmq.kr → 제주도 약국 각각 독립적인 SSL 도메인으로 접속 중앙에서 FARMQ Admin으로 통합 관리 ``` ## 🔐 보안 고려사항 ### 1. SSL/TLS 보안 ``` 인증서 관리: ├── Let's Encrypt 무료 인증서 ├── 90일 자동 갱신 ├── TLS 1.3 최신 프로토콜 ├── Perfect Forward Secrecy (PFS) └── HSTS (HTTP Strict Transport Security) ``` ### 2. 네트워크 보안 ``` 접근 제어: ├── Cloudflare DDoS 보호 ├── Caddy 리버스 프록시 보안 헤더 ├── Proxmox 자체 인증 시스템 ├── 각 지역별 독립적 보안 정책 └── VPN 관리망은 별도 보안 채널 ``` ### 3. 관리 보안 ``` FARMQ Admin: ├── Flask 세션 관리 ├── API 엔드포인트 권한 확인 ├── Headscale CLI 명령 검증 ├── 약국별 데이터 접근 제한 └── 관리자/사용자 역할 구분 ``` ## 📈 성능 최적화 ### 1. 네트워크 최적화 ``` 연결 경로 최적화: ├── Cloudflare CDN 활용 ├── Caddy HTTP/2 지원 ├── Keep-Alive 연결 유지 ├── Gzip 압축 활성화 └── 정적 자원 캐싱 ``` ### 2. 서버 최적화 ``` 리소스 관리: ├── Docker 컨테이너 리소스 제한 ├── Python Flask 앱 최적화 ├── 데이터베이스 쿼리 최적화 ├── CLI 호출 최소화 └── 결과 캐싱 (단기간) ``` ## 🎯 결론 ### 핵심 혁신점 1. **VPN 설치 불필요**: 웹브라우저만으로 모든 Proxmox 접속 2. **사용자 친화성**: 복잡한 네트워크 설정 없이 즉시 사용 3. **확장성**: 새 지역 추가 시 DNS 레코드만 추가하면 완료 4. **보안성**: SSL/TLS 표준 보안 + Cloudflare 보호 5. **투명성**: 네트워크 환경에 관계없이 동일한 접속 방법 ### 기존 방식 대비 우위 ``` Magic DNS/VPN 방식: - 복잡한 클라이언트 설치 및 설정 - 네트워크 정책 충돌 가능성 - 모바일에서 사용성 제한 우리 SSL 방식: - 웹 표준 기술 활용 - 모든 플랫폼에서 동일한 경험 - 기업 방화벽과 충돌 없음 ``` FARMQ 인프라는 **Magic DNS보다 훨씬 실용적이고 사용자 친화적**인 구조로, **VPN의 복잡성 없이 SSL의 보안성**을 제공하는 **혁신적인 하이브리드 아키텍처**입니다. --- *Document Generated: 2025-09-22 13:28 UTC* *System Status: All Services Operational* *Generated with [Claude Code](https://claude.ai/code)*