HealthSync_BE/design/데이터설계서 - Intelligence Service.txt

310 lines
10 KiB
Plaintext

!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) <<PK>>
--
* 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) <<PK>>
--
* session_id : VARCHAR(50) <<FK>>
* 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 <<PK>>
--
* 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 <<PK>>
--
* 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 <<PK>>
--
* 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
}