chore: main → develop back-merge (2026-04-09 릴리즈 + PR #21/#22 동기화) #25

병합
htlee main 에서 develop 로 6 commits 를 머지했습니다 2026-04-09 09:59:43 +09:00
12개의 변경된 파일1292개의 추가작업 그리고 0개의 파일을 삭제

파일 보기

@ -5,6 +5,8 @@ import lombok.*;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.math.BigDecimal;
import java.time.OffsetDateTime;
import java.util.Map;
@ -44,6 +46,7 @@ public class PredictionAlert {
@Column(columnDefinition = "jsonb")
private Map<String, Object> metadata;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "event_id", insertable = false, updatable = false)
private PredictionEvent event;

파일 보기

@ -4,6 +4,8 @@
## [Unreleased]
## [2026-04-09]
### 추가
- **Dark Vessel 의심 점수화** — 기존 "gap≥30분→dark" 이분법에서 8가지 패턴 기반 0~100점 점수 산출 + CRITICAL/HIGH/WATCH/NONE 등급 분류
- P1 이동 중 OFF / P2 민감 수역 / P3 반복 이력(7일) / P4 거리 비정상 / P5 주간 조업 OFF / P6 직전 이상행동 / P7 무허가 / P8 장기 gap

파일 보기

@ -21,6 +21,7 @@ import { LoginPage } from '@features/auth';
/* SFR-17 */ import { AIAlert } from '@features/field-ops';
/* SFR-18+19 */ import { MLOpsPage } from '@features/ai-operations';
/* SFR-20 */ import { AIAssistant } from '@features/ai-operations';
/* SFR-20 LLM운영 */ import { LLMOpsPage } from '@features/ai-operations';
/* 기존 */ import { Dashboard } from '@features/dashboard';
import { LiveMapView, MapControl } from '@features/surveillance';
import { EventList } from '@features/enforcement';
@ -104,6 +105,7 @@ export default function App() {
<Route path="ai-model" element={<ProtectedRoute resource="ai-operations:ai-model"><AIModelManagement /></ProtectedRoute>} />
{/* SFR-18~20 AI 운영 */}
<Route path="mlops" element={<ProtectedRoute resource="ai-operations:mlops"><MLOpsPage /></ProtectedRoute>} />
<Route path="llm-ops" element={<ProtectedRoute resource="ai-operations:llm-ops"><LLMOpsPage /></ProtectedRoute>} />
<Route path="ai-assistant" element={<ProtectedRoute resource="ai-operations:ai-assistant"><AIAssistant /></ProtectedRoute>} />
{/* SFR-03 데이터허브 */}
<Route path="data-hub" element={<ProtectedRoute resource="admin:system-config"><DataHub /></ProtectedRoute>} />

파일 보기

@ -55,6 +55,7 @@ const PATH_TO_RESOURCE: Record<string, string> = {
'/ai-assistant': 'ai-operations:ai-assistant',
'/ai-model': 'ai-operations:ai-model',
'/mlops': 'ai-operations:mlops',
'/llm-ops': 'ai-operations:llm-ops',
'/statistics': 'statistics:statistics',
'/external-service': 'statistics:external-service',
'/admin/audit-logs': 'admin:audit-logs',

파일 보기

@ -84,6 +84,7 @@ const NAV_ENTRIES: NavEntry[] = [
items: [
{ to: '/ai-model', icon: Brain, labelKey: 'nav.aiModel' },
{ to: '/mlops', icon: Cpu, labelKey: 'nav.mlops' },
{ to: '/llm-ops', icon: Brain, labelKey: 'nav.llmOps' },
{ to: '/ai-assistant', icon: MessageSquare, labelKey: 'nav.aiAssistant' },
{ to: '/external-service', icon: Globe, labelKey: 'nav.externalService' },
{ to: '/data-hub', icon: Wifi, labelKey: 'nav.dataHub' },

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다. Load Diff

파일 보기

@ -1,3 +1,4 @@
export { AIModelManagement } from './AIModelManagement';
export { MLOpsPage } from './MLOpsPage';
export { AIAssistant } from './AIAssistant';
export { LLMOpsPage } from './LLMOpsPage';

파일 보기

@ -7,6 +7,10 @@
"title": "MLOps / LLMOps",
"desc": "SFR-18/19 | ML & LLM experiment, deployment, monitoring"
},
"llmOps": {
"title": "LLM Operations",
"desc": "SFR-20 | Qwen3-8B model management, prompts, inference, RAG, evaluation, security & monitoring"
},
"assistant": {
"title": "AI Decision Support (Q&A)",
"desc": "SFR-20 | Natural language query with RAG-based law, case & prediction answers"

파일 보기

@ -20,6 +20,7 @@
"reports": "Reports",
"aiModel": "AI Model",
"mlops": "MLOps",
"llmOps": "LLM Ops",
"aiAssistant": "AI Q&A",
"dataHub": "Data Hub",
"systemConfig": "Settings",

파일 보기

@ -7,6 +7,10 @@
"title": "MLOps/LLMOps",
"desc": "SFR-18/19 | 기계학습·대규모 언어모델 실험·배포·모니터링 통합"
},
"llmOps": {
"title": "LLM 운영 관리",
"desc": "SFR-20 | Qwen3-8B 모델 관리·프롬프트·추론·RAG·평가·보안·모니터링 통합 운영"
},
"assistant": {
"title": "AI 의사결정 지원 (Q&A)",
"desc": "SFR-20 | 자연어 질의 → 법령·지침·유사사례·예측결과 통합 답변 · RAG 기반"

파일 보기

@ -20,6 +20,7 @@
"reports": "보고서 관리",
"aiModel": "AI 모델관리",
"mlops": "MLOps",
"llmOps": "LLM 운영",
"aiAssistant": "AI 의사결정 지원",
"dataHub": "데이터 허브",
"systemConfig": "환경설정",

파일 보기

@ -25,6 +25,9 @@ export default defineConfig({
target: process.env.VITE_API_PROXY ?? 'https://kcg-ai-monitoring.gc-si.dev',
changeOrigin: true,
secure: false,
headers: {
Origin: process.env.VITE_API_PROXY ?? 'https://kcg-ai-monitoring.gc-si.dev',
},
},
},
},