Founding as a Developer — Validate Before You Build
Decide the Price Test and Channel Budget by Contribution Margin
한국어 원문으로 표시합니다.
목표
가격 실험을 공헌이익으로 판정하고, 구독 기록에서 이탈률·LTV·채널별 CAC·회수 기간·LTV/CAC 를 계산해 가격과 채널 예산을 미리 정한 규칙으로 결정한다.
왜 중요한가
전환율이나 매출로 가격을 정하고 CAC 만 보고 채널을 고르면, 비용과 이탈이 붙는 순간 성장할수록 현금이 빠지는 구조가 된다. 단위 경제는 고객 한 명이 남기는 돈과 그 고객을 데려오는 데 쓴 돈을 같은 기준으로 놓는 계산이다.
재료
/opt/fixtures/founder/pricing/price_test.csv—arm,price_krw,visitors,purchases,refunds(부가세 포함 월 가격)/opt/fixtures/founder/pricing/costs.json—vat_rate, payment_fee_rate, payment_fee_fixed_krw, infra_krw_per_customer_month, support_krw_per_customer_month/opt/fixtures/founder/pricing/subscriptions.csv—customer_id,channel,start_month,end_month,price_krw(end_month 는 마지막으로 결제한 달, 비면 관측 끝 2026-06 까지 결제 중)/opt/fixtures/founder/pricing/marketing.csv—month,channel,spend_krw(2026-01 ~ 2026-06)
정의
- 공급가액 = 가격 × 100/110. 결제 수수료 = 가격 × payment_fee_rate + payment_fee_fixed_krw. 월 공헌이익 = 공급가액 − 결제 수수료 − infra − support.
- 방문자당 첫 달 공헌이익 = (purchases − refunds) × 월 공헌이익(그 가격) ÷ visitors.
- 고객이 달 M 에 결제했다 ⇔ start_month ≤ M ≤ end_month(비면 2026-06). 월 이탈률 M = M−1 에 결제했고 M 에 결제하지 않은 고객 ÷ M−1 에 결제한 고객. 평균 이탈률 = 2026-01~06 여섯 달의 단순 평균.
- LTV = 월 공헌이익(14,900원) ÷ 평균 이탈률. CAC(채널) = 2026-01~06 광고비 합 ÷ start_month 가 그 기간인 그 채널 신규 고객. 회수 기간 = CAC ÷ 월 공헌이익(14,900원).
- 반올림: 비율 소수 넷째, 공헌이익·방문자당 금액 소수 둘째, LTV·CAC 정수(round), 회수 기간·LTV/CAC 소수 둘째.
단계
/root/founder/pricing/arms.json에 가격 칸(A·B·C)마다conversion·refund_rate·revenue_per_visitor(구매 × 가격 ÷ 방문자)와best_by_conversion을 쓴다./root/founder/pricing/unit.py에contribution(price, costs)를 만든다 — costs 는 costs.json 을 읽은 딕셔너리, 돌려주는 값은 월 공헌이익(실수)./root/founder/pricing/pervisitor.json에 칸마다contribution_per_visitor와best_by_contribution·best_by_revenue를 쓴다.unit.py에churn(fix, month, channel=None)를 더하고,/root/founder/pricing/churn.json에monthly(2026-01~06 각 달)와average를 쓴다./root/founder/pricing/ltv.json에contribution(14,900원의 월 공헌이익),avg_churn,ltv, 그리고 흔한 실수로 낸ltv_on_revenue(= 14900 ÷ 평균 이탈률)를 쓴다./root/founder/pricing/cac.json에by_channel(다섯 채널),blended(전체 광고비 ÷ 전체 신규),paid_only(광고비 > 0 인 채널의 광고비 ÷ 그 채널들의 신규)를 쓴다./root/founder/pricing/channels.json에 채널마다churn(그 채널 고객만의 평균 이탈률)·ltv·payback_months·ltv_cac(광고비가 0 이면 null)를 쓴다./root/founder/pricing/decision.json에price_arm(방문자당 공헌이익이 가장 큰 칸),scale(광고비 > 0 이고 LTV/CAC ≥ 3, 회수 기간 ≤ 12 인 채널, 정렬),cheapest_cac_paid(광고비 > 0 인 채널 가운데 CAC 가 가장 싼 채널),cheapest_is_scalable(그 채널이 scale 에 드는가)를 쓴다.
참고
- 달 비교는
"2026-01" <= m처럼 문자열로 해도 된다(형식이 고정 길이다). 전달: 2026-01 의 전달은 2025-12. - 흔한 실수: 부가세를 빼지 않은 가격을 매출로 쓰기, LTV 에 가격(매출)을 넣기, 혼합 CAC 로 유료 채널을 판단하기, 이탈률 분모를 이번 달 결제자로 잡기, 채널별 LTV 에 전체 이탈률을 쓰기.
전환율로만 보면
/root/founder/pricing/arms.json 에 A·B·C 의 conversion·refund_rate·revenue_per_visitor 와 best_by_conversion 을 쓴다.
conversion = 구매 ÷ 방문자, refund_rate = 환불 ÷ 구매, revenue_per_visitor = 구매 × 가격 ÷ 방문자.
고객 한 명의 월 공헌이익
/root/founder/pricing/unit.py 에 contribution(price, costs) 를 만든다.
부가세 포함 가격에서 공급가액(× 100/110)을 구하고, 수수료는 포함가에 비율을 곱해 고정액을 더합니다. 그다음 서버·상담 비용을 뺍니다.
방문자당 첫 달 공헌이익으로 다시 판정
/root/founder/pricing/pervisitor.json 에 칸마다 contribution_per_visitor 와 best_by_contribution·best_by_revenue 를 쓴다.
(구매 − 환불) × contribution(그 가격) ÷ 방문자. 매출 기준 승자와 공헌이익 기준 승자가 같은지도 보세요.
월 이탈률 — 분모는 지난달 결제자
unit.py 에 churn(fix, month, channel=None) 를 더하고 /root/founder/pricing/churn.json 에 monthly(2026-01~06)·average 를 쓴다.
'M 에 결제했다' 는 start ≤ M ≤ end(비면 2026-06). 분모는 M−1 에 결제한 고객, 분자는 그 가운데 M 에 결제하지 않은 고객입니다. 1월의 전달은 전년 12월입니다.
LTV — 분자는 매출이 아니라 공헌이익
/root/founder/pricing/ltv.json 에 contribution·avg_churn·ltv 와 비교용 ltv_on_revenue 를 쓴다.
LTV = 월 공헌이익(14,900원) ÷ 평균 이탈률. 비교용 값은 분자에 14,900 을 그대로 넣습니다. 이 모델이 이탈률 일정·할인 없음을 가정한다는 점을 기억하세요.
채널 CAC 와 혼합 CAC
/root/founder/pricing/cac.json 에 by_channel(다섯 채널)·blended·paid_only 를 쓴다.
광고비는 2026-01~06 합, 신규 고객은 같은 기간 start_month 인 고객입니다. 혼합 CAC 의 분모에는 광고비가 0 인 자연 유입 고객도 들어갑니다.
채널별 이탈·LTV·회수 기간
/root/founder/pricing/channels.json 에 채널마다 churn·ltv·payback_months·ltv_cac 를 쓴다(광고비 0 이면 ltv_cac 는 null).
채널 LTV 에는 그 채널 고객만으로 계산한 평균 이탈률을 씁니다. 회수 기간 = CAC ÷ 월 공헌이익.
미리 정한 규칙으로 결정한다
/root/founder/pricing/decision.json 에 price_arm·scale·cheapest_cac_paid·cheapest_is_scalable 을 쓴다.
규칙은 계산 전에 정한 것 그대로 — 광고비 > 0, LTV/CAC ≥ 3, 회수 기간 ≤ 12개월. CAC 가 가장 싼 유료 채널이 규칙을 통과하는지 따로 확인하세요.