[AI]3단계_서비스_아키텍처_모듈화_유저행동기반_성향분석 - 100-hours-a-week/12-marong-Wiki GitHub Wiki
1. 서비스 아키텍처 다이어그램

2. 각 모듈의 책임(domain) 및 기능 설명
모듈 |
역할 |
핵심 기능 |
Input Scheduler |
전체 파이프라인을 주기적으로 트리거 |
일정 시간마다 MBTI 업데이트 시작 |
Existing User Checker |
초기유저/기존유저 분리 |
기존유저일 경우 main DB 접근 |
Data Loader |
기존유저의 정보 로드 |
유저의 이정 MBTI 점수 로드 |
Pre-Embedding Pipeline |
QnA 데이터셋을 미리 임베딩하여 vectorDB에 적재 |
Korean-MBTI-Dataset/qna_cleaned.tsv (answer, a_mbti) 페어를 VectorDB 저장 |
Vector DB (local) |
임베딩된 레퍼런스 문서 및 실시간 쿼리 임베딩 검색 |
유사도 기반 검색 지원(Chroma) |
RAG |
전체 흐름 제어 |
Document Loading -> Splitting -> Embedding -> Retriever -> Top-k 처리 순서 관리 |
> Document Loader |
RAG에 사용할 원본 문서 로드 |
Vector DB 로드 및 문서 취합 |
> Document Splitter |
긴 문서를 쿼리에 맞춰 한 문장 단위로 분할 |
문장 단위 검색을 위한 분할 |
> Embedding |
사용자 쿼리 및 분할된 문서 청크 임베딩 |
sentence-transformers/all-MiniLM-L6-v2 모델 호출 |
> Retriever |
임베딩 벡터를 기반으로 유사도가 높은 문서 청크를 검색 |
코사인 유사도를 통해 계산 |
PromplTemplate |
선정된 문서 청크와 사용자 피드를 LLM 입력 포맷으로 변환 |
프롬프트 정의(질문, top-k 답변예시, 현재 mbti 등) |
LLMChain |
PromptTemplate 결과를 LLM에 전달하여 MBTI 보정값 생성 |
LLM 호출 및 생성 |
Score Parser |
LLM이 응답한 텍스트를 스코어 포맷으로 파싱 |
JSON 파싱 |
DB Updater |
파싱된 MBTI 보정값을 메인 DB에 반영 |
직접 DB 커넥션 |
3. 모듈 간 인터페이스 설계 (API 명세, 데이터 포맷, 통신 방식 등)
API 명세
[POST] /mbti/update
Request Body:
{
"id": "user123",
"eiScore": 50,
"snScore": 50,
"tfScore": 50,
"jpScore": 50,
"hobbies": ["게임", "운동"],
"content": "마니또에게 인사하는 미션 완료!"
}
Response Body:
{
"user_id" : "user123",
"message" : "update_success",
"data" : {
"mbti_scores": {"e": 80, "s": 60, "t": 45, "j": 70},
"hobby": "운동",
"user_feed": "마니또에게 인사하는 미션 완료!"
}
}
모듈 간 통신 포맷
A -> B |
데이터 형식 |
내용 |
Input Scheduler -> Existing User Checker |
JSON |
id, eiScore, snScore, tfScore, jpScore, hobbies, content |
Existing User Checker ->...-> Embedding |
JSON |
id, eiScore, snScore, tfScore, jpScore, hobbies, content |
Embedding -> Retriever |
numpy array |
임베딩된 벡터 전달 |
Chroma Vector DB -> Retriever |
numpy array |
임베딩된 벡터 전달 |
Retriever -> PromptTemplate |
JSON |
검색된 문장 및 MBTI 레이블 전달 |
PromptTemplate -> LLM Model |
String |
LLM 입력용 프롬프트 전달 |
LLM Model -> Score Parser |
String |
LLM 출력 결과 전달 |
Score Parser -> main DB |
JSON |
최종 MBTI 점수 업데이트 |
4. 모듈화로 기대되는 효과 및 장점 정리
구분 |
기대 효과 |
재사용성 |
각 모듈을 독립적으로 재사용 가능 |
개인화 정확도 향상 |
프롬프트 구성으로 LLM 맞춤 응답 가능 |
유지보수성 용이 |
모듈 단위 디버깅 및 테스트 용이 |
5. 모듈화된 설계의 서비스 시나리오 적합성 근거 제시
시나리오 |
적합한 이유 |
실시간 성향 분석 |
사용자 피드 입력 후 빠르게 점수 추론 가능(End-to-End flow 구성) |
축별 성향 판단 |
LLM 프롬프트 구조를 통해 E/I, S/N 등 축별 추론 가능 |
MBTI 점수 업데이트 관리 |
Score Parser 결과 기반 DB에 정량적 기록 가능 (변동 이력 추적) |
사용자별 성향 트래킹 |
우저 ID 기반으로 결과 누적 가능 |