-
IFITV 프로젝트 기록 🧠- 추천 시스템 성능 개선부터 시청 기록 기반 추천까지Why Not SW CAMP 5기/IFITV프로젝트 2025. 6. 11. 16:15
🔧 사이드 네브바 & 찜 기능 추가 (0605~0609)
처음에는 사용자 편의를 위해 사이드 네브바에서 VOD 필터링 기능을 구현했습니다. 이후 사용자 맞춤 경험 강화를 위해 "My List" 기능(찜 기능)을 추가했어요. 유저가 콘텐츠에 ‘좋아요’를 누르면, My List에 저장되고, 이후 추천에도 반영됩니다.
🧠 추천 API 리팩터링의 시작 (0610~)
추천 API가 많아지면서 구조가 복잡해졌고, 성능 이슈도 점점 도드라졌습니다. 특히 liked_based_recommend API는 실행 시간만 10.19초가 걸릴 정도였어요. 문제는 다음과 같았습니다:
항목 기존 방식 문제점
유사도 계산 TF-IDF + KoBERT 결합 콘텐츠 1개마다 수동 반복 Boosting 방식 장르 겹침 개수로 수동 보정 set 연산 반복 결과 구성 .iloc[i] 반복 접근 성능 병목 결과 캐싱 ❌ 없음 같은 요청 매번 새로 계산
⚡ 성능 개선 전략
hybrid_recommend_with_reason() 함수를 아래처럼 리팩터링했습니다:
✅ fast_hybrid_recommend()로 리팩터링
- 벡터화 적용: numpy 기반 연산으로 TF-IDF & KoBERT 유사도 계산 최적화
- .at[] 사용: .iloc[] 대신 .at[]로 빠르게 DataFrame 접근
- 루프 제거: enumerate 없이 단일 연산으로 상위 콘텐츠 추출
- 중복 계산 제거: 유사도 배열 캐싱으로 반복 계산 방지
⏱️ 결과: liked_based_recommend 호출 속도
→ 10.19초 → 6.71초 → 1.23초로 90% 이상 단축!✅ multi_title_fast_hybrid_recommend() 도입
여러 콘텐츠 제목을 한 번에 처리하도록 확장하여 반복 호출을 줄였습니다. 더 많은 개인화가 더 빠르게 가능해졌죠.
📺 시청 기록 기반 추천 준비 (0611~)
찜 기능은 사용자의 "관심"만 반영합니다. 이제 실제로 시청한 콘텐츠 기반으로 더 똑똑한 추천을 하려 합니다.
- 시청 기록 테이블 생성
watch_history 테이블을 도입해, 어떤 프로필이 어떤 콘텐츠를 시청했는지 저장합니다. - 프론트 연동
콘텐츠 모달에서 재생 버튼 클릭 시 백엔드에 시청 기록을 저장합니다. - 백엔드 API 개발
- /save_watch_history: 시청한 콘텐츠를 저장
- /watch_history_by_profile: 특정 프로필의 시청 이력을 조회
🛠️ 기능 안정화 및 오류 수정
찜 기능, 시청 기능 등은 실제 유저 테스트에서 일부 오류가 발견되어, 이를 0611부터 디버깅 및 수정했습니다.
✅ 마무리하며
이번 리팩터링과 기능 확장은 단순한 성능 개선 그 이상이었습니다.
사용자의 실제 시청 행동까지 반영한 진짜 개인화 추천 시스템에 한 발 더 다가간 셈이죠.'Why Not SW CAMP 5기 > IFITV프로젝트' 카테고리의 다른 글
EC2 + Docker Compose 배포 중 겪은 문제와 해결 방법 (feat. React, Django, MySQL) (0) 2025.08.19 IFITV 프로젝트 기록-손 제스처 인식부터 프로필 자동 진입까지 (6/16~6/20) (1) 2025.06.25 [5월 2주차-5/12~5/16]📅 IFITV 프로젝트 개발 일지 (2025.05.12 ~ 2025.05.16) (3) 2025.05.16 [3월 4주차-3/24]OpenCV, Mediapipe, KNN을 활용한 손동작 인식 (0) 2025.03.24