static/index.html에 AI 위협분석 모달과 챗봇 패널을 연결한 뒤, "그래서 이 화면에서 실제로 얻을 수 있는 정보가 뭐인가"를 처음부터 끝까지 추적한 감사 기록. 개선 우선순위까지 정리한다.

1. 데이터가 어디서 생기나 — 지금은 전부 가상 데이터

// DroneSimulator.simulate()
targetId: DRONE-001/002/003 중 하나 (고정된 3개뿐)
latitude/longitude: 한반도 범위 내 완전 랜덤
altitude: 100~1000m 랜덤
speed: 50~250km/h 랜덤
status: 항상 "DETECTED"

실제 센서 데이터가 아니라 순수 난수다. 매 라운드마다 좌표가 그냥 랜덤으로 다시 뿑히는 거라, 화면에서 드론이 "이동"하는 것처럼 보여도 실제로는 물리적으로 이어지는 굤적이 아니라 매번 새로 첍히는 점들이다.

2. 데이터가 어떻게 가공되나 — 두 갈래로 갈라짐

DroneSimulator → Kafka(target-tracking 토픽)
                    │
        ┌─────────┴─────────┐
        ▼                       ▼
target-tracking-service    threat-intel-ai-service
(Java, 같은 서비스)          (Python, 별도 서비스)
        │                       │
   WebSocket 브로드캐스트      Qdrant에 "이력"으로 영구 저장
   → 지도/사이드바 실시간 표시   (챗봇이 나중에 검색할 데이터)
        │
   PostgreSQL에도 저장 (지금 대시보드는 안 쓀)

같은 Kafka 이벤트 하나가 서로 다른 두 소비자에게 각자 다른 목적으로 쓰인다.

3. AI가 정확히 뭐를 해주나 — 서로 다른 두 종류

<table header-row="true"><tr><td></td><td>AI 위협분석 버튼</td><td>AI 챗봇 패널</td></tr><tr><td>비교 대상</td><td>고정된 10개 패턴</td><td>실제 탐지 이력(Qdrant) + 문서</td></tr><tr><td>입력</td><td>현재 표적 1개 현재값</td><td>자유 텍스트 질문</td></tr><tr><td>출력</td><td>등급 백지 + SITREP + 유사패턴 3개</td><td>자연어 답변 + 근거 출처 + 도구호출 결과</td></tr><tr><td>언제 유용한가</td><td>"이 표적 지금 위험한가?"</td><td>"과거에 이런 적 있었나?"</td></tr></table>

문제는 화면상으로는 둘이 완전히 분리돼 있어서, 사용자가 이 차이를 알 방법이 없다는 것이다.

4. 최종 결과물

지도 위 드론 아이콘 + 사이드바 카드(원시 수치) + (버튼을 누르면) 위협등급 모달 또는 챗봇 답변. 사용자가 아무 버튼도 안 누르면 원시 좌표/고도/속도 숫자 나열 이상의 정보는 얻을 수 없다.

5. 개선 포인트 (우선순위 순)

  1. 데이터가 가짜라는 걸 아무도 모른다 — 화면에 "SIMULATED DATA" 배지를 박아두는 게 안전하다.
  2. 한눈에 보이는 위협 요약이 없다 — 사이드바 상단에 집계 배너 필요.
  3. 지도 위에서 위협도가 안 보인다 — 등급별 마커 색상 필요.
  4. 챗봇의 존재 이유를 사용자가 못 알아채다 — 예시 질문 칩 필요.
  5. 굤적이 물리적으로 말이 안 된다 — 랜덤워크로 전환 필요(DroneSimulator 수정).
  6. 이력 기반 정보가 시각화 안 된다 — 표적 카드에 "과거 N회 탐지됨" 한 줄만 붙여도 도움.

1~4번은 프론트엔드만으로 가능하고, 5~6번은 각각 Java 시뮬레이터 로직과 Python 조회 API가 추가로 필요하다.