PODO 일본어 수업 풀부킹의 근본 원인은 튜터 공급 부족 + UNLIMIT 무제한 수요 + flat pricing 의 구조적 매커니즘 (고빈도 35% 가 슬롯 86% 소비). 본 솔루션은 두 트랙 — 튜터 공급 확대 + 단계별 요금제 — 인데 일본어 bilingual 튜터 단기 확보 불가 + 요금제 출시 전. 그 사이 브릿지 솔루션 으로 변경 트래픽 폭주 매커니즘 (가짜 풀부킹) 을 분석·차단. ClickHouse 4 옵션 109,167건 시뮬 후 주 5회 변경 제한 채택. UI 변화 최소화 + 86% 우회 감지 + 6 롤백 기준 사전 정의. 일본어 코호트 6일 측정 결과 풀부킹 알림 -90%, 예약 변경 -61% (신규 예약 -4% trade-off 정직 명시).
01.배경 / 문제
PODO 의 일본어 수업이 풀부킹으로 인해 예약을 못 잡는 학생이 많았고, 이로 인해 환불 33% + 낮은 리텐션 이 발생하고 있었습니다. 이 문제의 근본 원인은 ClickHouse 세그먼트 분석에서 드러난 구조적 매커니즘 이었습니다:
- 공급 = 고정 (일본어 튜터 ~520명, 일 ~1,053 슬롯, 감소 추세)
- 수요 = UNLIMIT 무제한 수강권 유저에게 사실상 무제한
- 가격 = 수요를 조절하지 못하는 flat pricing
- 결과 = 고빈도 35% (1,920명) 가 전체 예약의 86% 를 소비, 나머지 65% 가 풀부킹 피해
근본 해결책은 명확했습니다 — 튜터 공급 확대 + 단계별 요금제로 수요 자연 분산. 두 트랙 모두 별도 프로젝트로 분담 (튜터 인센티브 정책 + 단계별 요금제).
다만 둘 다 단기에 풀 수 없는 영역이었습니다. 일본어 bilingual 튜터는 하늘의 별따기 — 하루 아침에 공급 채울 수 없음. 단계별 요금제도 가격 정책 변경이라 출시까지 별도 타임라인 필요. 그 시간을 버는 브릿지 솔루션이 필요했습니다.
그 브릿지를 설계하기 위해 변경 동선을 추가 분석하면서 "가짜 풀부킹" 매커니즘 을 발견:
- 예약 변경 131,553회 > 신규 예약 119,208회 (변경이 신규보다 1.1배 많음)
- 변경/슬롯 비율 1.4배 — 일평균 변경 ~1,450건이 전체 슬롯 ~1,053개보다 많음
- 변경 밀도 vs 풀부킹 알림 25배 용량-반응 관계 — 10분 구간 변경 11건+ 인 시점이 전체 풀부킹 알림의 76.5% 점유. 이 구간의 실제 풀부킹은 ~4% 에 불과, 나머지 ~96% 가 변경 트래픽이 만들어낸 체감 풀부킹
- 5,729명 중 355명 (6%) 가 변경 80,734건 (61%) 점유, 평균 227.4회 / 인 — 슈퍼 체인저의 89% 가 UNLIMIT 수강권 (구조적 매커니즘과 동일 결합)
- 슈퍼 체인저 296명의 누적 결제 3.17억원 (전체의 4.4%) — 이탈시 비즈 임팩트가 크기 때문에 정책 design 에서 trade-off 어디서 잡을지 미리 결정해야 했음
슈퍼 체인저 1명이 하루 4번 시간을 바꾸면 슬롯 4개가 "열렸다 닫혔다" 반복 — 다른 학생이 빈 자리를 보고 클릭하면 이미 점유. 이 현상을 "가짜 풀부킹" 으로 명명 하고, 브릿지 솔루션의 정확한 범위를 박았습니다.
이 정책의 범위 (브릿지 솔루션)
- 해결: 고빈도 유저의 반복 변경이 만드는 "가짜 풀부킹" 현상
- 분담: 실제 슬롯 공급 확대는 튜터 인센티브 정책 (별도 프로젝트), 가격 기반 수요 분산은 단계별 요금제
- 포지셔닝: 단계별 요금제 출시 전까지 체감 풀부킹을 완화하는 브릿지
KPI 설계 — 1순위: 풀부킹 알림 일 770회 → 400회 이하. 부수: 저빈도 유저 취소율 8.6% → 5% 이하. 제약: 슈퍼 체인저 이탈 X.
PRD 핵심 수치 (2026.01-03) — 3개월 총 예약 변경 131,553회 > 신규 예약 119,208회 (변경/신규 1.1배). 일평균 변경 ~1,450건이 일 전체 슬롯 ~1,053개를 초과 (변경/슬롯 1.4배) — 변경 트래픽이 슬롯 공급량 자체를 넘어선 비대칭 발견
02.Action — 어떻게 풀었나
1. 브릿지 scope 명확화 — "공급 확대까지의 시간" 동안 무엇을 차단할 것인가
근본 솔루션은 다른 트랙 (튜터 공급 / 단계별 요금제) 이 담당하기로 정리된 상태. 이 브릿지 정책은 그 시간 동안 풀부킹 피해를 최대한 완화하는 것 이 단일 목표였습니다. "풀부킹의 96% 가 변경 트래픽이 만든 가짜 풀부킹" 이라는 발견이 브릿지의 scope 를 정확히 그려줬습니다 — 변경 트래픽의 안정성만 회복하면 풀부킹 피해의 대부분을 잡을 수 있음.
슈퍼 체인저 1명의 하루를 따라가 보면:
09:00 21시 슬롯 예약 (21시 점유)
10:00 21시→20시 변경 (21시 해제 → 20시 점유)
12:00 20시→22시 변경 (20시 해제 → 22시 점유)
14:00 22시→21시 변경 (22시 해제 → 21시 점유)
→ 실제 수업은 1개, 하지만 슬롯 4개가 영향받음. 이걸 355명이 반복하면 일 1,450건 변경 트래픽. 변경 안정성 회복만으로 풀부킹 알림의 96% 를 차지하는 "가짜" 부분을 차단할 수 있다 는 비선형 leverage 가 브릿지의 정량적 정당화. (실제 슬롯 공급 부족이 만드는 본질 풀부킹은 본 솔루션 — 튜터 공급 — 의 영역으로 남음.)2. 세그먼트 결합 결함 + 비즈 임팩트 trade-off 사전 결정
슈퍼 체인저의 89% 가 UNLIMIT 수강권이라는 점은 Section 1 의 구조적 매커니즘 (UNLIMIT 무제한 수요) 과 동일한 결합 결함. 즉 브릿지 정책의 적용 범위 = JP UNLIMIT 만으로 자연스럽게 좁혀짐. COUNT/TRIAL 수강권은 손대지 않음.
동시에 슈퍼 체인저 296명의 누적 결제 3.17억원 (전체의 4.4%) 비즈 임팩트를 고려해, 정책을 "슈퍼 체인저 차단" 결이 아니라 "슈퍼 체인저의 행동 패턴만 부드럽게 제한" 결로 design 해야 한다는 trade-off 가이드라인을 사전 도출.
3. 정량 시뮬레이션 — 4 옵션 ClickHouse 109,167건 비교
팀 내부에서 "주 5회 제한" 단일안 외에 다른 의견이 제기되자, 직관 토론 대신 ClickHouse 시뮬레이션으로 정량 비교 결로 전환:
- A. 주 5회 — 차단율 59.3% / 영향받는 유저-주 20% / 우회방어 상 (동일 주 내 감지 86%)
- B. 당일 불가 — 차단율 47.3% / 전일 변경 자유 / 우회방어 하 (전일 우회 가능, 전일 변경이 45.1% 점유)
- C-1. 수업당 1회 — 차단율 70% (최대) / 그러나 46.1% 수업 영향, 이탈 risk 높음
- C-2. 수업당 2회 — 차단율 56.2% / 26.5% 수업 영향
Judgment call: "70% 차단이지만 46% 수업이 영향받는 C-1" vs "59% 차단이지만 80% 유저-주는 영향 없는 A". KPI 1순위 (풀부킹 -- ) 만 보면 C-1 이지만, 제약 조건 (슈퍼 체인저 이탈 X) 까지 함께 보면 A 가 최적 — 효과·우회방어 균형이 가장 우수. 옵션 A 채택.
4. 디자인 의사결정 — multi-objective 3축 + UI 변화 최소화 + 9 엣지케이스 사전 처리(1) Multi-objective 3축: (a) 풀부킹 알림 감소 [Primary] + (b) 저빈도 유저 이탈 방지 + (c) 고빈도 충성 유저 만족도 유지 — 세 축을 단일 정책 안에 동시에 녹임. "5회 제한" 숫자가 우연이 아니라, 80% 유저-주 영향 없음 + 슈퍼 체인저 행동 패턴 부드럽게 제한 두 조건을 동시에 만족하는 지점.
(2) UI 변화 최소화 (의도된 제약): 기존 예약 화면 레이아웃·디자인은 그대로 유지. 변화는 4 팝업만 추가 — 공지 팝업 (티켓당 1회), 변경 횟수 안내 (남은 N회), 변경 소진 안내, 취소→재예약 시 카운트 안내. "새로운 정책이지만 유저 체감 변화는 최소" — 디자인 변경 자체가 추가 이탈 risk 를 만들지 않도록 하는 design choice.
(3) 우회 방어 — 동일 주 내 취소→재예약 감지 86%: "5회 다 쓰고 취소 후 재예약하면 우회?" 라는 빈 구멍을 사전에 막음. "동일 주(월~일) 내" 룰로 86% 감지율 달성 (24h 룰 대비 +22%p 향상). 우회 시도 자체를 정책 작동 안에 흡수.
(4) 9 엣지케이스 사전 처리: 일본어+영어 동시 수강 / 수강권 만료 후 재구매 / UNLIMIT 해지 후 재구매 / 수강권 홀드 해제 / 시스템 자동 튜터 재매칭 / 동시 변경 race condition / 변경 실패 (서버 에러) 시 카운터 롤백 / 정책 시행 첫 주 / 도입 시점 (월요일) — 각 case 처리 룰을 PRD 에 미리 박음.
5. 출시 / 계측 / 롤백 — 9 KPI · 6 롤백 기준 pre-define
정책 출시 전, 이 정책이 실패할 수 있는 모든 경로 를 미리 매핑하고 측정·롤백 기준을 박았습니다.
9 KPI 트래킹: 일 변경 횟수 / 일 풀부킹 알림 / 일 풀부킹 영향 유저 / 저빈도 유저 취소율 / 고빈도 유저 이탈률 / 우회 시도 / 수업 취소율 변화 / 수업 이수율 / 영향받는 유저-주 비율
6 롤백 기준 (Kill Criteria) — 아래 중 하나라도 충족 시 피처 플래그 즉시 off:
- UNLIMIT 해지율 +20% 이상
- CS 문의 예약 변경 관련 일 50건 이상
- 풀부킹 알림 오히려 증가
- 수업 이수율 -10% 이상 하락
- 수업 취소율 +30% 이상 증가
- 고빈도 유저 NPS 급락
운영 셋업: 피처 플래그 단계적 롤아웃, 슈퍼 체인저 296명 별도 리스트 관리, CS 응대 매뉴얼 + 카카오 알림톡 셋업, 도입 후 2주간 집중 모니터링 대시보드.
이 craft 의 진짜 가치는 출시 자체가 아니라, 출시 전에 "무엇이 잘못될 수 있는가" 를 미리 매핑하고 측정·롤백 기준까지 박아둔 risk-managed 정책 design 의 결.
ClickHouse 4 옵션 정량 시뮬레이션 (109,167건 단위) — A 주 5회 (차단 59.3% / 영향 안 받는 유저-주 80%) / B 당일 불가 (47.3% / 전일 우회 가능) / C-1 수업당 1회 (70% / 46.1% 수업 영향) / C-2 수업당 2회 (56.2%). 차단율·영향받는 단위·우회방어 4축 비교 후 A 옵션 채택
UI 변화 최소화 (의도된 design choice) — 기존 일정 선택 화면 레이아웃 유지. 변경 확인 팝업과 완료 토스트만 추가 (피그마)
PODO 캐릭터 활용 + 일정 변경 안내 팝업 — "이번 주 5회까지 가능 / 매주 월요일 초기화" 두 핵심 룰을 사용자 흐름 안에 자연스럽게 배치. 메인 화면의 카운터 표시는 빼고, 변경 시도 시점에만 등장하는 결로 체감 변화 최소화
User Journey 3 트랙 사전 정의 — Journey 1 정상 변경 (Happy Path, 변경 횟수 남음) / Journey 2 변경 소진 (5/5, 팝업으로만 안내) / Journey 3 취소→재예약 우회 시도 (옵션 A 동일 주 내 감지 86% — 옵션 B 당일 불가는 우회 가능, 옵션 C 는 새 class_id 카운터 리셋되어 추가 감지 로직 필요)
리스크 매트릭스 + 6 롤백 기준 (Kill Criteria) — 슈퍼 체인저 296명 누적 결제 3.17억원 (전체 4.4%) 이탈 risk 를 가장 큰 변수로 두고, UNLIMIT 해지 +20% / CS 일 50건+ / 풀부킹 알림 증가 / 이수율 -10% / 취소율 +30% / NPS 급락 — 6 기준 중 하나라도 발동 시 피처 플래그 즉시 off. 출시 전 fail path 매핑의 핵심 산출물
03.임팩트 / 결과
결과 — 일본어 코호트 6일 측정 (정직 명시)
- 풀부킹 알림 -90% (일 770회 → ~77회)
- 예약 변경 -61% (일 ~1,450건 → ~566건)
- 신규 예약 -4% (소폭 감소 — 의도된 trade-off, 정직 명시)
왜 실제 효과가 사전 시뮬레이션을 초과했는가
사전 시뮬레이션의 변경 차단율은 59.3% 였는데, 실제 출시 후에는 변경이 -61% 감소 + 풀부킹 알림이 -90% 감소. 알림 감소가 변경 감소보다 큰 폭이었던 이유는 변경 밀도 → 풀부킹 알림 25배 용량-반응 관계가 비선형 이기 때문 — 변경이 60% 줄어들면, 11건+ 폭주 구간 자체가 사라지므로 알림은 그보다 더 큰 폭으로 감소. 사전 분석에서 잡은 비선형 관계가 출시 후에도 그대로 발현된 결과.이탈 risk 통제 — 80% 유저-주 영향 없음 검증
6 롤백 기준 중 하나도 발동되지 않았습니다. UNLIMIT 해지율, CS 문의, 수업 이수율, 취소율 — 모두 사전 정의된 임계 안. 슈퍼 체인저 296명 (3.17억원 결제) 의 이탈 risk 가 정책 design 의 가장 큰 변수였는데, multi-objective 3축 + minimal UI + 우회 방어 86% 의 조합이 risk 를 통제.
다운스트림 효과
풀부킹으로 인한 환불 33% + 낮은 리텐션의 base 가 축소됨. 이 정책은 단계별 요금제 출시 전 브릿지 솔루션 으로 의도된 결로 완성 — 가격으로 수요를 자연 분산하는 본 정책 출시 전까지 체감 풀부킹을 통제하는 역할.
이 정책의 한계 (정직 명시)
실제 슬롯 공급은 동일하기 때문에, 본질적인 풀부킹 — 즉 슬롯 절대 부족이 만드는 진짜 풀부킹 — 은 이 정책으로 완벽히 해결되지 않습니다. 본 정책이 잡은 건 풀부킹 알림의 96% 를 차지하던 "가짜" 부분 (변경 트래픽이 만든 슬롯 불안정성) 이고, 나머지 진짜 풀부킹은 튜터 공급 확대 (별도 프로젝트) 가 풀어야 할 영역으로 남았습니다. 이 한계를 정직하게 박은 위에서 — 가격·공급의 본 솔루션이 시간 걸려도 추진되는 동안 학생 체감 풀부킹과 환불·이탈 base 를 축소하는 결로 브릿지의 역할 완성.