POST /api/users/login
GET /api/app/users/{code}/summary
GET /api/app/medication-schedules/{code}
POST /api/app/medication-logs
POST /api/app/self-diagnoses
GET /api/app/risk-summary/{code}
📱
앱 화면 캡처
assets/app-home.png 교체
04 앱-시뮬레이션 분리 원칙
사용자 입력과 실험 데이터는 저장 모델부터 분리했습니다
구분
앱 데이터
시뮬레이션 데이터
복약 기록
AppMedicationLog
MedicationRecord
자가진단
AppSelfDiagnosis
SelfDiagnosis
복약 일정
AppMedicationSchedule
Prescription 기반
목적
사용자 앱 흐름
실험 · ML 학습
앱은 SimulationRun · simulationKey 같은 내부 개념을 직접 소비하지 않음
앱 판단 로직은 서버에 위치하며 앱 코드에 섞이지 않음
나중에 ML 예측 연결 시 앱 화면 구조 변경 없이 서버 내부만 교체 가능
05 SimulationRun & PolicyVersion
ML 학습 데이터는 실행 상태와 정책 버전 기준으로 엄격하게 분리합니다
SimulationRun 상태
RUNNING — 진행 중
COMPLETED — 학습 대상 ✓
FAILED — 학습 제외
정책 버전 분리
RULE_V1_SIMPLE
RULE_V2_WEIGHTED_VECTOR
두 정책 데이터는 하나의 학습셋에 혼합 금지
데이터 흐름
SimulationRun (COMPLETED)
↓
PolicySnapshot
↓
RiskScore PolicyVersion 필터
↓
학습 데이터셋
06 Feature 25 — Java ML 파이프라인
학습 · 평가 · 저장 · 조회 — 끊기지 않는 ML 기능 완성
COMPLETED SimulationRun 조회
↓
RiskScoreTrainingRow 생성
↓
Tribuo Dataset 변환
↓
LinearSGD 모델 학습
↓
MAE / RMSE 평가
↓
ModelVersion 저장
↓
MLPrediction 저장
구현 요소
Java ML 라이브러리: Tribuo 4.3.1
기본 모델: LinearSGD 회귀
학습 row: RiskScoreTrainingRow
모델 메타: ModelVersion
예측 결과: MLPrediction
Shadow Mode
기존 Rule-Based riskScore는 그대로 유지.
ML 예측 결과는 MLPrediction에 별도 저장.