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

1. 서비스 아키텍처 다이어그램

아키텍처-final drawio (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 기반으로 결과 누적 가능