영화 "호프" 손익분기점(BEP) 계산 로직

1. 도입부 공감대
최근 영화 '호프'의 손익분기점이 선판매 및 OTT 수익 반영에 따라 1,200만 명에서 600만 명으로 조율되는 과정을 보면서, 국가별 극장 정산 구조와 BEP 계산 방식을 데이터로 시각화해 보고 싶었습니다.
현업에서 웹 Dashboard를 구성할 때 외부 통신이나 로깅 스레드가 메인 UI 렌더링을 멈추게 하지 않도록 예외 처리 구문을 감싸고, 파이썬 기반으로 간단한 정산 대시보드를 제작했습니다.
2. 핵심 코드 전체상
가독성을 위해 핵심 흐름만 요약했으며, 전체 예외 처리 및 상세 코드는 깃허브를 참고해 주세요.
Python
import streamlit as st
import plotly.graph_objects as go
# 외부 트래커 통신 시 메인 UI 스레드 블로킹 방지
try:
from tracker_hub import log_app_usage
log_app_usage("movie_bep_calculator", "okky_community_view")
except Exception:
pass # 네트워크 실패 시에도 메인 분석 기능이 중단 없이 구동되도록 예외 처리
def calculate_korea_bep(net_cost, pa_cost, pre_sales, ticket_price=11000):
# 순제작비와 P&A비 합산 후 선판매액 상계
total_cost = net_cost + pa_cost
net_required = total_cost - pre_sales
if net_required <= 0:
return 0.0
# 한국 극장 정산율 (세금/기금 13% 공제 후 극장:배급사 5:5 분배)
effective_ticket = ticket_price * 0.87 * 0.5
required_audience = (net_required * 100000000) / effective_ticket
return round(required_audience / 10000, 1)
# Streamlit 파라미터 입력 및 UI 구성
st.title("🎬 영화 BEP 글로벌 정산 시각화")
net_cost = st.number_input("순제작비 (억원)", value=500, step=10)
pa_cost = st.number_input("P&A/마케팅비 (억원)", value=100, step=5)
pre_sales = st.number_input("선판매 수익 (억원)", value=300, step=10)
bep = calculate_korea_bep(net_cost, pa_cost, pre_sales)
st.metric("선판매 반영 후 필요 관객수", f"{bep} 만명")
3. 명령어 친절한 해부
number_input: 사용자가 정산 변수를 입력할 때마다 실시간으로 연산을 재수행하는 Streamlit 입력 객체입니다.
metric: 결과 수치나 핵심 KPI를 크게 강조하여 시각적으로 정돈된 UI를 제공해 주는 디스플레이 위젯입니다.
go.Figure: Plotly 차트 객체로, 웹 환경에서도 인터랙티브한 반응형 범례와 툴팁을 제공합니다.
4. 우와, 이렇게도 쓰이네? (토이 프로젝트 적용 팁)
메인 스레드 블로킹 방지: 사용자 행동 로그 수집이나 외부 DB 연동 시, 통신 지연으로 인해 Streamlit UI가 멈추는 일이 없도록 try-except 블록으로 격리하는 것이 웹 서비스 구동 시 중요한 예외 처리 노하우입니다.
Plotly 범례 다크모드 충돌 방지: Streamlit 다크모드 테마 적용 시 범례 배경과 글자색이 겹치는 현상은 legend 레이아웃 속성에 명시적 불투명 배경색과 글자색을 고정 지정하여 깔끔하게 해결할 수 있습니다.
5. 마무리 소통 및 영상 안내
코드를 작성하시면서 더 좋은 예외 처리 방식이나 의견이 있으시다면 댓글로 편하게 나누어 주세요!
실제 시연 및 정산 로직 구동 모습은 유튜브 '잡학다식 개발자' 영상에서 더 자세히 다루고 있습니다.
💻 소스코드 및 실행 링크
유튜브 영상 : https://youtu.be/02iZ8k61PYI
워드프레스(뉴스): https://gohard.pe.kr/
GitHub 소스코드: https://github.com/gohard-lab/movie_bep_calculator
실행 URL: https://moviebepcalculator-77dp957j9snypavp86bgsb.streamlit.app/