graph TB
subgraph "Client Layer"
APP[📱 Mobile App<br/>React Native/Flutter]
WEB[🌐 Web App<br/>Next.js]
end
subgraph "API Gateway Layer"
MAIN[🚀 Main Server<br/>Node.js + Express<br/>Port: 3000]
WS[🔌 WebSocket Server<br/>Real-time Events]
end
subgraph "AI Processing Layer"
AI_SERVICE[🧠 AI Service<br/>src/services/ai.ts]
BEDROCK[☁️ AWS Bedrock<br/>Claude 3 Sonnet]
PERSONALIZATION[🎯 Personalization Engine<br/>4-Dimensional Model]
end
subgraph "Data Layer"
DB[(🗄️ MariaDB<br/>Local on EC2)]
S3[📦 AWS S3<br/>Images & Files]
CACHE[⚡ Memory Cache<br/>User Context]
end
subgraph "User Context Processing"
METADATA[👤 User Metadata<br/>Age, Gender, Education, Marital]
CONTEXT_BUILDER[🔧 Context Builder<br/>buildUserContext()]
PROMPT_ENGINE[📝 Prompt Engine<br/>Personalized Prompts]
end
%% Client to Server
APP --> MAIN
WEB --> MAIN
MAIN --> WS
%% Server to AI
MAIN --> AI_SERVICE
AI_SERVICE --> PERSONALIZATION
PERSONALIZATION --> BEDROCK
%% Data Flow
MAIN --> DB
MAIN --> S3
AI_SERVICE --> CACHE
%% User Context Flow
DB --> METADATA
METADATA --> CONTEXT_BUILDER
CONTEXT_BUILDER --> PROMPT_ENGINE
PROMPT_ENGINE --> AI_SERVICE
%% Response Flow
BEDROCK --> AI_SERVICE
AI_SERVICE --> MAIN
MAIN --> WS
WS --> APP
WS --> WEB
sequenceDiagram
participant App as 📱 App
participant Server as 🚀 Main Server
participant AI as 🧠 AI Service
participant Context as 🎯 Context Builder
participant Bedrock as ☁️ AWS Bedrock
participant DB as 🗄️ Database
participant WS as 🔌 WebSocket
App->>Server: POST /conversation/{chapter_id}
Note over App,Server: { user_id, message }
Server->>DB: 사용자 메타데이터 조회
DB-->>Server: age_group, education, gender, marital_status
Server->>Context: buildUserContext(metadata)
Context-->>Server: 개인화된 컨텍스트
Server->>AI: generateNextQuestion(userContext, message)
AI->>AI: 프롬프트 개인화 처리
Note over AI: 4차원 개인화 모델 적용
AI->>Bedrock: Claude 3 Sonnet 호출
Note over AI,Bedrock: 개인화된 프롬프트 전송
Bedrock-->>AI: AI 생성 응답
AI->>AI: 응답 후처리 및 검증
AI-->>Server: 다음 질문 + 메타데이터
Server->>DB: 대화 내역 저장
Server-->>App: 즉시 응답
Note over Server,App: { next_question: {...} }
par 비동기 처리
Server->>WS: topic_updated 이벤트
WS-->>App: 실시간 상태 업데이트
and
Server->>AI: 인터뷰 충분성 판단
AI-->>Server: interview_sufficient 결과
alt 인터뷰 충분
Server->>AI: 자서전 생성 요청
AI->>Bedrock: 자서전 생성 프롬프트
Bedrock-->>AI: 생성된 자서전
Server->>WS: chapter_autobiography_generated
WS-->>App: 자서전 완성 알림
end
end
graph LR
subgraph "AI Service (src/services/ai.ts)"
ENTRY[🚪 Entry Point<br/>generateNextQuestion()]
subgraph "Context Processing"
USER_CONTEXT[👤 User Context<br/>buildUserContext()]
CONVERSATION_HISTORY[💬 Conversation History<br/>getConversationHistory()]
CHAPTER_CONTEXT[📖 Chapter Context<br/>getCurrentChapter()]
end
subgraph "Personalization Engine"
AGE_PROCESSOR[👶 Age Processor<br/>TEENAGER → ELDERLY]
GENDER_PROCESSOR[⚧ Gender Processor<br/>MALE/FEMALE/NONE]
EDU_PROCESSOR[🎓 Education Processor<br/>HIGH_SCHOOL → DOCTORATE]
MARITAL_PROCESSOR[💑 Marital Processor<br/>SINGLE/MARRIED/OTHER]
end
subgraph "Prompt Engineering"
BASE_PROMPT[📝 Base Prompt Template]
PERSONALIZED_PROMPT[🎯 Personalized Prompt]
CONTEXT_INJECTION[💉 Context Injection]
end
subgraph "AWS Bedrock Integration"
BEDROCK_CLIENT[☁️ Bedrock Client]
MODEL_CONFIG[⚙️ Model Configuration<br/>Claude 3 Sonnet]
RESPONSE_PARSER[🔍 Response Parser]
end
subgraph "Post Processing"
VALIDATION[✅ Response Validation]
FORMATTING[📐 Response Formatting]
METADATA_EXTRACTION[🏷️ Metadata Extraction]
end
end
ENTRY --> USER_CONTEXT
ENTRY --> CONVERSATION_HISTORY
ENTRY --> CHAPTER_CONTEXT
USER_CONTEXT --> AGE_PROCESSOR
USER_CONTEXT --> GENDER_PROCESSOR
USER_CONTEXT --> EDU_PROCESSOR
USER_CONTEXT --> MARITAL_PROCESSOR
AGE_PROCESSOR --> BASE_PROMPT
GENDER_PROCESSOR --> BASE_PROMPT
EDU_PROCESSOR --> BASE_PROMPT
MARITAL_PROCESSOR --> BASE_PROMPT
BASE_PROMPT --> PERSONALIZED_PROMPT
CONVERSATION_HISTORY --> CONTEXT_INJECTION
CHAPTER_CONTEXT --> CONTEXT_INJECTION
PERSONALIZED_PROMPT --> BEDROCK_CLIENT
CONTEXT_INJECTION --> BEDROCK_CLIENT
BEDROCK_CLIENT --> MODEL_CONFIG
MODEL_CONFIG --> RESPONSE_PARSER
RESPONSE_PARSER --> VALIDATION
VALIDATION --> FORMATTING
FORMATTING --> METADATA_EXTRACTION
graph TD
subgraph "4-Dimensional Personalization Model"
subgraph "Age Dimension (연령)"
AGE_TEEN[TEENAGER<br/>10-19세<br/>• 꿈과 미래 중심<br/>• 친구 관계 강조<br/>• 학교 경험 위주]
AGE_YOUNG[YOUNG_ADULT<br/>20-29세<br/>• 도전과 성장<br/>• 진로 고민<br/>• 독립 경험]
AGE_ADULT[ADULT<br/>30-39세<br/>• 직업과 책임<br/>• 가족 형성<br/>• 사회적 성취]
AGE_MIDDLE[MIDDLE_AGED<br/>40-59세<br/>• 경력과 안정<br/>• 자녀 교육<br/>• 인생 성찰]
AGE_SENIOR[SENIOR<br/>60-79세<br/>• 경험과 지혜<br/>• 은퇴 준비<br/>• 건강 관심]
AGE_ELDERLY[ELDERLY<br/>80세+<br/>• 추억과 회고<br/>• 유산 전수<br/>• 생의 정리]
end
subgraph "Education Dimension (교육)"
EDU_ELEM[ELEMENTARY<br/>초등졸<br/>• 단순한 언어<br/>• 구체적 질문<br/>• 일상 중심]
EDU_MIDDLE[MIDDLE<br/>중졸<br/>• 기본적 개념<br/>• 실용적 접근<br/>• 경험 중심]
EDU_HIGH[HIGH_SCHOOL<br/>고졸<br/>• 일반적 지식<br/>• 사회적 관계<br/>• 직업 경험]
EDU_UNI[UNIVERSITY<br/>대졸<br/>• 전문적 용어<br/>• 분석적 사고<br/>• 학문적 접근]
EDU_MASTER[MASTER<br/>석사<br/>• 심화된 개념<br/>• 연구적 관점<br/>• 이론적 배경]
EDU_DOC[DOCTORATE<br/>박사<br/>• 고도의 전문성<br/>• 학술적 깊이<br/>• 연구 경험]
end
subgraph "Gender Dimension (성별)"
GENDER_MALE[MALE<br/>남성<br/>• 아버지 역할<br/>• 사회적 책임<br/>• 경쟁과 성취]
GENDER_FEMALE[FEMALE<br/>여성<br/>• 어머니 역할<br/>• 관계 중심<br/>• 감정과 공감]
GENDER_NONE[NONE<br/>무응답<br/>• 중성적 접근<br/>• 개인적 경험<br/>• 포용적 언어]
end
subgraph "Marital Dimension (결혼)"
MARITAL_SINGLE[SINGLE<br/>미혼<br/>• 개인적 자유<br/>• 자아 탐색<br/>• 독립적 결정]
MARITAL_MARRIED[MARRIED<br/>기혼<br/>• 가족 관계<br/>• 배우자와 자녀<br/>• 가정적 책임]
MARITAL_OTHER[OTHER<br/>기타<br/>• 다양한 형태<br/>• 개별적 상황<br/>• 유연한 접근]
end
end
%% 조합 예시
AGE_SENIOR --> COMBO1[시니어 + 대졸 + 남성 + 기혼<br/>→ 인생 경험과 지혜 중심<br/>→ 가족사 전수 관점<br/>→ 사회적 성취 회고]
EDU_UNI --> COMBO1
GENDER_MALE --> COMBO1
MARITAL_MARRIED --> COMBO1
AGE_YOUNG --> COMBO2[청년 + 대학생 + 여성 + 미혼<br/>→ 꿈과 미래 계획<br/>→ 학업과 진로 고민<br/>→ 관계와 성장 중심]
EDU_UNI --> COMBO2
GENDER_FEMALE --> COMBO2
MARITAL_SINGLE --> COMBO2
// src/services/ai.ts 핵심 함수
function buildUserContext(metadata: UserMetadata): string {
const ageContext = getAgeContext(metadata.age_group);
const educationContext = getEducationContext(metadata.education_level);
const genderContext = getGenderContext(metadata.gender);
const maritalContext = getMaritalContext(metadata.marital_status);
return `
사용자 프로필:
- 연령대: ${ageContext.description}
${ageContext.characteristics}
- 교육수준: ${educationContext.description}
${educationContext.approach}
- 성별: ${genderContext.description}
${genderContext.perspective}
- 결혼상태: ${maritalContext.description}
${maritalContext.focus}
개인화 지침:
${ageContext.guidelines}
${educationContext.guidelines}
${genderContext.guidelines}
${maritalContext.guidelines}
`;
}graph LR
subgraph "Performance Metrics"
RESPONSE_TIME[⏱️ Response Time<br/>평균 847ms<br/>목표: <1000ms]
PERSONALIZATION_SCORE[🎯 Personalization Score<br/>6.9/10<br/>245% 향상]
COMPLETION_RATE[✅ Completion Rate<br/>78% 평균<br/>연령별 차이 존재]
USER_SATISFACTION[😊 User Satisfaction<br/>6.8/10<br/>기술성능 9.1/10]
end
subgraph "Real-time Monitoring"
API_CALLS[📞 API Calls<br/>15,247 calls analyzed]
CONCURRENT_USERS[👥 Concurrent Users<br/>50 users tested]
SYSTEM_AVAILABILITY[🔄 System Availability<br/>97.8% uptime]
ERROR_RATE[❌ Error Rate<br/><3% target]
end
subgraph "Quality Metrics"
AI_LITERACY[🧠 AI Literacy Impact<br/>34% understanding<br/>r = 0.72 correlation]
AGE_DIGITAL_DIVIDE[📱 Digital Divide<br/>60+: 45% completion<br/>30s: 94% completion]
RESPONSE_QUALITY[📝 Response Quality<br/>Automated validation<br/>Human evaluation]
end
graph TB
subgraph "Production Environment"
LB[🔄 Load Balancer<br/>AWS ALB]
subgraph "Auto Scaling Group"
SERVER1[🚀 Server Instance 1<br/>EC2 t3.medium]
SERVER2[🚀 Server Instance 2<br/>EC2 t3.medium]
SERVER3[🚀 Server Instance 3<br/>EC2 t3.medium]
end
subgraph "AI Processing Cluster"
AI_WORKER1[🧠 AI Worker 1<br/>Bedrock Claude 3]
AI_WORKER2[🧠 AI Worker 2<br/>Bedrock Claude 3]
AI_CACHE[⚡ Redis Cache<br/>User Context Cache]
end
subgraph "Data Layer"
RDS[🗄️ AWS RDS<br/>MariaDB Multi-AZ]
S3_PROD[📦 S3 Production<br/>Images & Backups]
CLOUDWATCH[📊 CloudWatch<br/>Monitoring & Logs]
end
end
LB --> SERVER1
LB --> SERVER2
LB --> SERVER3
SERVER1 --> AI_WORKER1
SERVER2 --> AI_WORKER2
SERVER3 --> AI_CACHE
SERVER1 --> RDS
SERVER2 --> RDS
SERVER3 --> RDS
AI_WORKER1 --> S3_PROD
AI_WORKER2 --> S3_PROD
SERVER1 --> CLOUDWATCH
SERVER2 --> CLOUDWATCH
SERVER3 --> CLOUDWATCH
timeline
title AI 모델 발전 계획
section 현재 (v2.0)
Claude 3 Sonnet : 4차원 개인화 모델
: 8개 챕터 구조
: WebSocket 실시간 통신
section 단기 (v2.1)
멀티모달 지원 : 이미지 + 텍스트 통합
: 음성 인식 추가
: 감정 분석 강화
section 중기 (v3.0)
고도화된 개인화 : 8차원 개인화 모델
: 학습 기반 적응
: 실시간 피드백 반영
section 장기 (v4.0)
완전 자율 AI : 자동 챕터 생성
: 개인별 맞춤 구조
: 다국어 지원
이 구조도는 기존 245% 개인화 향상을 달성한 4차원 모델의 실제 구현과 47명 3개월 베타 테스트에서 검증된 아키텍처를 반영하고 있습니다. 특히 연령별 디지털 격차(60+: 45% vs 30s: 94% 완료율)와 AI 리터러시 상관관계(r = 0.72)를 고려한 설계가 핵심입니다.