전체 흐름

DroneSimulator (1초마다 좌표 생성)
        ↓
TargetProducer
        ↓
Kafka Topic: target-tracking
        ↓
TargetConsumer
        ├→ WebSocket → 브라우저 대시보드 (실시간)
        ├→ PostgreSQL (이력 저장)
        └→ [AI 위협 분석 - 비동기]
                 ↓
         pgvector 유사 패턴 검색
                 ↓
         Google Gemini → SITREP 생성

AI 위협 분석 레이어 (RAG + pgvector)

POST /api/v1/threat-analysis/analyze
        ↓
① 표적 자연어 설명 구성
        ↓
② pgvector(HNSW 인덱스) 코사인 유사도 검색 → 유사 위협 패턴 Top-3
        ↓
③ Gemini → 상황 요약/위협 평가/권고 조치 생성
        ↓
④ ThreatAnalysisDto.Response 반환

서버 구성

<table header-row="true"><tr><td>서버</td><td>IP</td><td>역할</td><td>실행 서비스</td></tr><tr><td>server1</td><td>192.168.0.102</td><td>K3s 마스터</td><td>Redis, Grafana</td></tr><tr><td>server2</td><td>192.168.0.103</td><td>K3s 워커</td><td>Spring Boot, PostgreSQL</td></tr><tr><td>server3</td><td>192.168.0.104</td><td>K3s 워커</td><td>Kafka(KRaft), API Gateway</td></tr></table>

Kafka 구성

<table header-row="true"><tr><td>항목</td><td>값</td></tr><tr><td>모드</td><td>KRaft (Zookeeper 없음)</td></tr><tr><td>토픽</td><td>target-tracking</td></tr><tr><td>파티션</td><td>3</td></tr><tr><td>브로커</td><td>server3:9092</td></tr></table>

데이터 흐름 상세

1. 드론 시뮬레이터

2. Kafka 메시지 구조

{"targetId": "DRONE-001", "targetType": "DRONE", "latitude": 35.49, "longitude": 127.83, "altitude": 423.6, "speed": 226.6, "status": "DETECTED"}

자세한 내용 → ai-analysis.md