Mova 리뷰 감정분석 통합 · 유용성 투표
Echo 감정분석 → 리뷰 시스템 깊은 통합
EXAONE-3.5-2.4B LoRA 파인튜닝(NSMC 긍정/부정)으로 학습한 Echo 감정분석 모델을 리뷰 전체 파이프라인에 통합했다.
| 기능 | 설명 |
|---|---|
| 에디터 리뷰 자동 별점 | rating=NULL인 AI 에디터 리뷰에 감정 신뢰도 기반 0.5~5.0 자동 부여 |
| 취향 벡터 개선 | effective_rating = 별점 × (1 + 0.3 × 감정 alignment) — 감정과 별점이 일치하면 강화, 불일치면 감쇄 |
| 감정 요약 | 영화 상세 페이지에 긍정/부정 비율 바 + 한 줄 요약 텍스트 |
| 신뢰도 태그 | 에디터 리뷰에 뉴스 소스 수 기반 “AI 에디터 ·높음/보통/낮음” 배지 |
| 자동 스케줄러 | 24시간 주기 배치 — GPU 없는 환경에서는 자동 종료 |
별점 변환 공식
긍정: 2.5 + score × 2.5 → score=0.9일 때 ★4.5
부정: 2.5 - score × 2.0 → score=0.9일 때 ★1.0
0.5단위 반올림, 0.5~5.0 클램핑. 리뷰 작성 시 BackgroundTask로 자동 분석되고, 미처리 분은 24시간 배치 스케줄러가 안전망으로 잡는다.
리뷰 유용성 투표 (도움돼요)
리뷰 카드의 ThumbsUp 버튼을 실제 투표 기능으로 구현했다.
review_votes테이블: user_id + review_id UNIQUE(토글 방식)POST /mova/reviews/{id}/vote: 로그인 필수, 이미 투표했으면 취소- 리뷰 목록 조회 시 vote_count를 서브쿼리로 함께 반환
- 프론트에서 클릭 즉시 카운트 반영
아키텍처
기존 헥사고날 레이어를 그대로 따랐다:
Router → UseCase(ABC) → Interactor → Repository(ABC) → PgRepository
↓ toggle_vote ↓ ↓
ReviewVoteResultDto toggle_vote INSERT/DELETE + COUNT
DB 마이그레이션
| 리비전 | 내용 |
|---|---|
20260831_0001 | reviews에 sentiment_label, sentiment_score 컬럼 추가 |
20260831_0002 | reviews에 news_source_count 컬럼 추가 |
20260831_0003 | review_votes 테이블 생성 |