기술 스택¶
선정 목록¶
| 계층 | 선정 | 이유 |
|---|---|---|
| 언어 | Go 1.25+ | 단일 바이너리, 크로스 컴파일, 동시성 우수, 생태계 성숙 |
| 웹 프레임워크 | Gin | 생태계 최대, 미들웨어 풍부 |
| 데이터베이스 | SQLite | 임베디드, 무운영, 단일 머신 시나리오에 적합 |
| SQLite 드라이버 | glebarez/sqlite(순수 Go) |
CGO 없음, 크로스 컴파일 용이 |
| ORM | GORM | 개발 효율 높음, 복잡한 쿼리는 네이티브 SQL로 폴백 가능 |
| 실시간 통신 | gorilla/websocket | 터미널, 로그 tail, 지표 푸시 |
| 작업 스케줄링 | robfig/cron | 패널 예약 작업 |
| 시스템 모니터링 | gopsutil | 크로스 플랫폼 CPU / 메모리 / 디스크 / 프로세스 |
| Docker | 공식 SDK | 컨테이너 / 이미지 / 볼륨 / 네트워크 |
| 인증 | JWT + refresh | 무상태 API + 선택적 세션 |
| 2FA | TOTP(RFC 6238) | 로그인 2차 인증 |
| AI | 추상화 LLM 인터페이스 | OpenAI / DeepSeek / Qwen / Ollama 통합 어댑터 |
| 프런트엔드 | Vue 3 + ECharts | 모던 SPA + 차트 |
전체 아키텍처¶
┌──────────────────────────────────────────────────────────┐
│ OpsMini(단일 머신 패널, 단일 바이너리) │
│ │
│ Vue3 SPA(빌드 산출물을 바이너리에 embed) │
│ │ HTTP / WebSocket │
│ ┌────▼───────────────────────────────────────────────┐ │
│ │ Gin Router → 미들웨어(인증/권한/감사/속도 제한/보안 진입점)│ │
│ │ Controller → Service → Repository │ │
│ └────┬──────────────────────────────────────────────┘ │
│ │ │
│ ┌────▼───────────────────────────────────────────────┐ │
│ │ SQLite(비즈니스 데이터) │ 시스템 리소스 어댑터 계층 │ │
│ │ users/cron/... │ Docker SDK / crontab / │ │
│ │ │ gopsutil / 파일 시스템 / SSH │ │
│ └─────────────────────┴──────────────────────────────┘ │
│ │
│ 대외 두 가지 REST API: │
│ · /api/v1 패널 API(JWT + RBAC) │
│ · /agent/v1 Agent API(Token + 명령 화이트리스트) │
└──────────────────────────────────────────────────────────┘