!theme mono skinparam classAttributeIconSize 0 skinparam classFontSize 12 skinparam classAttributeFontSize 11 title HealthSync 역설계 - Intelligence Service 데이터 설계서 package "Intelligence Service Database Schema" as intelligence_db #lightseagreen { entity "chat_sessions" as chat_session { * session_id : VARCHAR(50) <> -- * user_id : VARCHAR(50) * status : VARCHAR(20) * created_at : TIMESTAMP * last_activity_at : TIMESTAMP * message_count : INTEGER * context : TEXT * session_type : VARCHAR(30) * expires_at : TIMESTAMP -- + 인덱스: idx_user_id_status + 인덱스: idx_last_activity + 인덱스: idx_expires_at } entity "chat_messages" as chat_message { * message_id : VARCHAR(50) <> -- * session_id : VARCHAR(50) <> * role : VARCHAR(20) * content : TEXT * timestamp : TIMESTAMP * message_order : INTEGER * is_sensitive : BOOLEAN * token_count : INTEGER * response_time_ms : INTEGER -- + 인덱스: idx_session_order + 인덱스: idx_timestamp + 인덱스: idx_role } entity "analysis_results" as analysis_result { * id : BIGINT <> -- * user_id : VARCHAR(50) * analysis_type : VARCHAR(50) * result : TEXT * confidence : DECIMAL(5,4) * created_at : TIMESTAMP * metadata : JSON * source_data_hash : VARCHAR(64) * claude_model_version : VARCHAR(20) * processing_time_ms : INTEGER -- + 인덱스: idx_user_analysis_type + 인덱스: idx_created_at + 인덱스: idx_confidence + 인덱스: idx_source_hash } entity "notification_logs" as notification_log { * id : BIGINT <> -- * user_id : VARCHAR(50) * mission_id : VARCHAR(50) * notification_type : VARCHAR(30) * message : TEXT * sent_at : TIMESTAMP * delivery_status : VARCHAR(20) * response_generated_by : VARCHAR(20) * processing_time_ms : INTEGER * user_reaction : VARCHAR(20) * effectiveness_score : DECIMAL(3,2) -- + 인덱스: idx_user_id_type + 인덱스: idx_sent_at + 인덱스: idx_delivery_status + 인덱스: idx_effectiveness } entity "claude_api_usage" as claude_api_usage { * id : BIGINT <> -- * request_id : VARCHAR(50) * user_id : VARCHAR(50) * api_endpoint : VARCHAR(100) * request_type : VARCHAR(50) * input_tokens : INTEGER * output_tokens : INTEGER * cost_usd : DECIMAL(10,6) * response_time_ms : INTEGER * success : BOOLEAN * error_message : TEXT * created_at : TIMESTAMP -- + 인덱스: idx_user_id_date + 인덱스: idx_request_type + 인덱스: idx_success + 인덱스: idx_cost } note right of chat_session **AI 채팅 세션 관리** • 사용자별 대화 컨텍스트 유지 • 세션별 상태 관리 (활성/비활성/만료) • 컨텍스트 정보로 개인화 대화 • 자동 만료 기능 (24시간) end note note right of chat_message **채팅 메시지 저장** • 사용자와 AI 간 모든 대화 기록 • 메시지 순서 보장 • 민감정보 플래그 관리 • Claude API 토큰 사용량 추적 end note note right of analysis_result **AI 분석 결과 저장** • 건강 진단, 미션 추천 등 분석 결과 • 신뢰도 점수로 품질 관리 • 소스 데이터 해시로 중복 방지 • Claude 모델 버전별 성능 추적 end note note right of notification_log **알림 발송 이력** • 축하, 독려 메시지 발송 기록 • 사용자 반응 및 효과성 측정 • 개인화 알림 성능 분석 • A/B 테스트 결과 수집 end note note right of claude_api_usage **Claude API 사용량 추적** • API 호출별 비용 및 성능 모니터링 • 토큰 사용량 기반 과금 관리 • 에러 발생 패턴 분석 • 사용자별 API 사용 통계 end note } package "관계 정의" as relationships { chat_session ||--o{ chat_message : session_id chat_session }o--|| analysis_result : 분석_요청 notification_log }o--|| analysis_result : 알림_생성 claude_api_usage }o--|| analysis_result : API_호출 claude_api_usage }o--|| chat_message : API_호출 note as n1 **외래키 관계** chat_messages.session_id → chat_sessions.session_id **논리적 관계** • User Service users ↔ chat_sessions (사용자별 채팅) • Goal Service missions ↔ notification_logs (미션별 알림) • Health Service checkups ↔ analysis_results (건강 분석) **참조 무결성** • CASCADE 삭제 (세션 삭제 시 메시지도 삭제) • 사용자 ID는 User Service와 일관성 유지 • 미션 ID는 Goal Service와 연동 **데이터 일관성** • 세션별 메시지 순서 보장 • API 사용량과 실제 호출 일치 • 알림 발송 성공/실패 상태 추적 end note } package "데이터 타입 및 제약조건" as constraints { note as n2 **chat_sessions 제약조건** • session_id: UUID 형태, PRIMARY KEY • user_id: User Service와 일치, NOT NULL • status: 'ACTIVE', 'INACTIVE', 'EXPIRED', 'TERMINATED' • session_type: 'HEALTH_CONSULTATION', 'GENERAL_CHAT', 'MISSION_GUIDANCE' • message_count: 0 이상, 최대 100개 메시지 • expires_at: created_at + 24시간 **chat_messages 제약조건** • message_id: UUID 형태, PRIMARY KEY • role: 'USER', 'ASSISTANT', 'SYSTEM' • content: 최대 10,000자 • message_order: 세션 내 순차 증가 • token_count: 0 이상 • response_time_ms: 0 이상 **analysis_results 제약조건** • analysis_type: 'HEALTH_DIAGNOSIS', 'MISSION_RECOMMENDATION', 'RISK_ASSESSMENT' • confidence: 0.0000~1.0000 범위 • result: 최대 50,000자 • source_data_hash: SHA-256 해시값 • claude_model_version: 'claude-3-sonnet', 'claude-3-opus' 등 **notification_logs 제약조건** • notification_type: 'CELEBRATION', 'ENCOURAGEMENT', 'REMINDER', 'ACHIEVEMENT' • delivery_status: 'SENT', 'DELIVERED', 'FAILED', 'PENDING' • response_generated_by: 'CLAUDE_AI', 'TEMPLATE', 'FALLBACK' • user_reaction: 'POSITIVE', 'NEGATIVE', 'NEUTRAL', 'NO_RESPONSE' • effectiveness_score: 0.00~5.00 범위 **claude_api_usage 제약조건** • request_type: 'CHAT', 'ANALYSIS', 'RECOMMENDATION', 'NOTIFICATION' • input_tokens: 0 이상 • output_tokens: 0 이상 • cost_usd: 0.000001 이상 (최소 과금 단위) • success: 성공/실패 여부 end note } package "AI 모델 및 프롬프트 관리" as ai_models { note as n3 **Claude AI 모델별 특성** **claude-3-sonnet (기본 모델)** • 건강 상담 및 일반 채팅 • 비용 효율적, 응답 속도 빠름 • 토큰당 비용: $0.003 (input), $0.015 (output) **claude-3-opus (고급 모델)** • 복잡한 건강 분석 및 진단 • 높은 정확도, 상세한 분석 • 토큰당 비용: $0.015 (input), $0.075 (output) **프롬프트 최적화** • 건강 상담: 의료진 톤앤매너 적용 • 미션 추천: 개인화 요소 강조 • 독려 메시지: 동기부여 심리학 적용 • 축하 메시지: 긍정적 감정 표현 **컨텍스트 관리** • 최근 10개 메시지 유지 • 사용자 프로필 정보 포함 • 건강 상태 요약 정보 제공 • 이전 분석 결과 참조 end note } package "성능 및 운영 고려사항" as performance { note as n4 **인덱스 전략** • chat_sessions: (user_id, status) 복합 인덱스 • chat_messages: (session_id, message_order) 복합 인덱스 • analysis_results: (user_id, analysis_type, created_at) 복합 인덱스 • notification_logs: (user_id, sent_at) 복합 인덱스 • claude_api_usage: (user_id, DATE(created_at)) 복합 인덱스 **파티셔닝** • chat_messages: created_at 기준 월별 파티셔닝 • claude_api_usage: created_at 기준 월별 파티셔닝 • notification_logs: sent_at 기준 월별 파티셔닝 **캐싱 전략** • 활성 채팅 세션: Redis 캐싱 (30분) • 최근 분석 결과: Redis 캐싱 (1시간) • Claude API 응답: Redis 캐싱 (10분) • 자주 사용되는 프롬프트: Redis 캐싱 (24시간) **비용 최적화** • 중복 분석 요청 캐싱으로 API 호출 최소화 • 토큰 사용량 모니터링 및 알림 • 모델별 비용 효율성 분석 • 배치 처리로 API 호출 효율화 **모니터링 지표** • 일일 Claude API 비용 • 평균 응답 시간 • API 성공률 • 사용자별 토큰 사용량 • 분석 결과 신뢰도 분포 end note } package "데이터 보안 및 개인정보 보호" as security { note as n5 **개인정보 보호** • 채팅 내용 중 민감정보 자동 마스킹 • 의료 정보 포함 메시지 암호화 저장 • 사용자 식별 정보와 채팅 내용 분리 • 90일 경과 채팅 기록 자동 삭제 **AI 윤리 및 안전** • 의료 조언 범위 제한 명시 • 응급 상황 감지 시 안내 메시지 • 편향성 방지를 위한 프롬프트 검증 • 부적절한 응답 필터링 **API 보안** • Claude API 키 암호화 저장 • API 호출 시 Rate Limiting 적용 • 요청/응답 내용 로깅 (개인정보 제외) • 이상 사용 패턴 모니터링 **감사 및 추적** • 모든 AI 분석 결과 이력 보관 • 의료 관련 분석 시 추가 검증 • 사용자 신고 시 조치 이력 관리 • 정기적인 AI 응답 품질 검토 **규정 준수** • 의료기기법 비대상 확인 • 개인정보보호법 준수 • AI 윤리 가이드라인 적용 • 의료 광고 규제 준수 end note }