📄 2025.11.18 (Day 17) [Project: Streamlit 시각화 대시보드 구현 완료]

1. 핵심 개념 정리 (Concepts & Theory)

#핵심 개념간결한 설명적용 내용
1Streamlit Multi-Page하나의 app.py를 중심으로 여러 Python 파일을 독립된 페이지로 분리하는 구조.app.py가 메인, 나머지 파일이 개별 페이지 역할.
2@st.cache_data데이터 로드 함수에 적용하여 데이터가 변경되지 않는 한 재실행 없이 캐시된 결과를 재사용.load_data() 함수에 적용하여 대시보드 로딩 속도 최적화.
3RAG 기반 추천 UI사용자의 자연어 쿼리 또는 영화 제목으로 Vector DB를 검색하고, LLM이 추천 사유를 생성하도록 UI 구성.movie_recommendation.py에서 st.radio로 검색 모드 선택 기능 구현.
4재사용 가능한 유틸리티데이터 로드, Vector DB 로드, LLM 호출 등 핵심 기능을 별도 모듈로 분리하여 코드의 모듈화 및 재사용성 극대화.data_loader.py, vector_db.py, llm_utils.py로 분리.

2. 모듈 및 역할 분담 (Module Breakdown & Suggested Roles)

역할 (Suggested Role)파일 명주요 기능/담당 업무
데이터/인프라 엔지니어data_loader.py, vector_db.py데이터 로드 및 전처리 데이터 제공, TMDB 포스터 URL 생성, ChromaDB 로드 및 검색 유틸리티 구현.
분석/시각화 개발자eda_dashboard.py, box_office_analysis.py장르별 분석, 시계열 트렌드 분석 (Plotly), 흥행 지표(ROI, 수익) 시각화 및 흥행 영화 Top 10% 기준 분석.
AI/LLM 시스템 개발자llm_utils.py, movie_recommendation.pyLLM 클라이언트 설정, Vector 검색 기반 추천 UI 구성, LLM 추천 설명 및 흥행 요인 분석 API 연결.
프로젝트 통합 담당app.pyStreamlit 멀티페이지 구조 정의 및 통합, 메인 페이지 구현, 전체 데이터 통계 요약 및 페이지 라우팅 관리.

3. 핵심 코드 (Streamlit UI 구성)

(A) 메인 앱 구조 (app.py)

import streamlit as st

# 페이지 설정
st.set_page_config(
    page_title="Movie Analysis & Recommendation",
    page_icon="🎬",
    layout="wide",
    initial_sidebar_state="expanded"
)

st.title("🎬 Movie Analysis & Recommendation System")
st.markdown("""
## Welcome to the Movie Analysis Platform!
... (주요 기능 목록)
왼쪽 사이드바에서 원하는 페이지를 선택하세요!
""")

# 데이터 통계 요약 (data_loader.py 사용)
# ... (생략)

(B) 추천 시스템 UI (movie_recommendation.py)

# 검색 방식 선택
search_mode = st.radio(
    "검색 방식 선택:",
    ["자연어로 검색", "영화 제목으로 검색"],
    horizontal=True
)

# 검색 입력 창
query = st.text_input("검색어를 입력하세요:", value="")
n_results = st.slider("추천 개수", 1, 10, 5)

if st.button("검색 시작"):
    # vector_db.py의 search_similar_movies 호출
    # ... (검색 결과 출력 및 LLM 설명 호출)

4. 요약 및 다음 단계 (Summary & Next Steps)

  • 팀 프로젝트의 핵심인 Streamlit 기반 대시보드 구현을 완료했습니다.
  • 데이터 로드, 벡터 DB, LLM 호출 등 기능을 모듈화하여 구조적 안정성을 확보했습니다.