그래서 직접 벌기로 했다 — 경쟁사 분석과 유료화 전환기 (5장)
남들은 어떻게 돈을 받고 있나부터 봤다
해커톤을 접은 날(6월 30일), 같은 커밋에 docs/COMPETITIVE_ANALYSIS.md가 같이 들어갔다. 기업 법률 서비스 시장에서 이미 돈을 받고 있는 곳들을 정리했다.
| Law.ai | B2B 대기업 법무팀 | 1인 ₩20,000/월(최소 5명) | 6모듈 통합(계약·자문·송무·인감·IP·사규) |
| 로폼 비즈니스 | B2B 중대형 기업 | 문의 가격 | CLM + ERP 연동 |
| 슈퍼로이어 | 변호사 전용 | ₩99K~198K/월 | 458만 판례 데이터 |
| 법률구조서비스 | 경제적 약자 | 무료 | 정부 공식 무료 지원 |
정리하면서 확인한 건 두 가지였다. 첫째, 경쟁사들은 전부 대기업 법무팀 아니면 변호사 전용이었다 — 중소기업·1인 사업자가 들어갈 자리가 비어있었다. 둘째, ₩20,000/월 × 5명 = ₩100,000/월이라는 Law.ai의 가격 구조를 보고, 우리 Business 플랜 가격(월 5명 기준 ₩149,000)이 터무니없는 숫자는 아니라는 확신이 생겼다. 감으로 가격을 정하는 것보다, 이미 시장에서 검증된 가격대를 참고선으로 삼는 게 훨씬 덜 불안했다.

인프라부터 정식으로 바꿨다
경쟁사 분석과 같은 날, 호스팅도 갈아엎었다. Render 무료 티어에서 씨름했던 슬립 문제, SSE 연결 끊김 — 이걸 유료로 갈 서비스에서 계속 안고 갈 순 없었다.
feat: migrate deployment to Fly.io (backend) + Vercel (frontend)
Fly.io는 auto_stop_machines = 'off'로 서버가 절대 잠들지 않게 설정할 수 있었고, 영구 볼륨을 지원해서 SQLite 데이터도 안전했다. 프론트엔드는 Vercel로 분리했다. DB 경로, 업로드 경로를 환경변수로 뺐고, CORS 허용 도메인도 FRONTEND_URL 환경변수 하나로 관리하게 바꿨다 — 이 구조가 나중에 커스텀 도메인을 연결할 때도 그대로 도움이 됐다.
이틀 사이 30개 커밋
7월 1일과 2일, 이틀 동안 정확히 30개 커밋이 올라갔다(1일 14개, 2일 16개). 카카오 OAuth 로그인, 전자서명(쌍방 서명 + PII 분리), 소송 관리 모듈, 노무 계산기, 산재 카테고리 신설, 법령 커버리지 15개 카테고리로 확대. 그리고 토스페이먼츠 결제 연동.
feat: 토스페이먼츠 결제 연동 (구독제 MVP)
POST /api/payments/confirm → 토스 서버 승인 → subscriptions DB 저장
GET /api/payments/subscription → 현재 세션 구독 상태
"영구무료"라는 문구를 걷어냈다
그런데 유료화 전환 커밋을 다시 열어보면, 단순히 "기업 플랜에 결제를 붙인" 수준이 아니었다.
feat: Pricing 페이지 유료화 전환 — 체험/구독 모델로 개편
- 일반 무료→체험 플랜(분야당 3회·계약서 1건 한도)으로 교체
- 영구무료·베타무료 문구 전면 제거
- 취약계층 무료 지원 배너(Amber) 추가
일반 사용자에게도 걸려있던 "영구무료" 약속 자체를 손봤다. 체험 3회로 한도를 걸고, "진짜 취약계층"만 별도 배너로 무료를 보장하는 구조로 바꿨다. 처음 이 프로젝트를 시작할 때 세운 원칙("취약계층은 영구 무료")은 지켰지만, 그 "취약계층"의 범위를 더 명확하게 좁힌 셈이다. 비용 압박이 기업 유료화뿐 아니라, 애초의 무료 약속 범위 자체를 다시 긋게 만들었다.

이 장에서 남는 것
두 번의 그랜트 실패 뒤에 나온 건 "포기"가 아니라 "원래 계획의 실행"이었다. 다만 그 실행 과정에서, 처음엔 무 자르듯 단순했던 "취약계층 무료"라는 약속이 실제 비용 구조 앞에서 좀 더 정교하게(그리고 좀 더 인색하게) 다듬어졌다. 이상을 지키기 위해 이상의 범위를 줄인 셈이다.
다음 장 예고
완성 그 이후 — 운영이라는 두 번째 산.
이 글은 개인 개발 프로젝트의 기록이며, 언급된 경쟁 서비스의 가격·정보는 작성 시점 기준입니다. 실제 가격 정책은 변경될 수 있습니다.