과금/플랜 설계 v1
1. 목적
이 문서는 부동산 계약/고객/매물 관리 SaaS의 1차 과금 모델을 정의한다.
과금은 실제 결제 자동화보다 먼저 계산 가능성, 설정 가능성, 이력 추적 가능성을 확보하는 것을 목표로 한다. 초기 무료 운영 기간에도 모든 사무소의 예상 과금액을 동일한 계산식으로 산출하고, 유료 전환 시 설정값만 변경하여 과금이 시작되도록 설계한다.
2. 과금 단계
| 단계 | 과금 포인트 | 설명 | 현재 무료 운영 | 유료 전환 후 |
|---|---|---|---|---|
| 1차 | 부동산 기본 과금 | 부동산 사무소 1곳당 월 기본 이용료 | 0원 | 사무소별 월 기본료 적용 |
| 2차 | 사용자 추가 과금 | 무료 인원 초과 활성 사용자 수 기준 과금 | 초과 인원 기록, 금액 0원 | 초과 1명당 월 단가 적용 |
| 3차 | 기능 추가 과금 | 기본 기능 외 유료 기능 사용 권한 기준 과금 | 권한과 예상 금액 기록 | 기능별 월정액/건별/상담 단가 적용 |
3. 기본 용어
| 용어 | 정의 |
|---|---|
| 부동산 사무소 | 과금의 최상위 고객 단위. Office에 해당 |
| 과금 정책 | 사무소별 기본료, 무료 인원, 초과 인원 단가, 과금 사용 여부 |
| 활성 사용자 | 로그인 가능하고 업무 기능을 사용할 수 있는 사용자 |
| 무료 인원 | 사용자 추가 과금 없이 포함되는 활성 사용자 수 |
| 초과 인원 | max(활성 사용자 수 - 무료 인원, 0) |
| 추가 기능 | 본사관리자가 사무소별로 켜는 선택 기능 |
| 예상 과금액 | 무료 운영 중에도 계산하는 가상의 월 이용료 |
| 확정 과금액 | 과금 사용 여부가 켜진 기간에 청구 대상으로 확정되는 금액 |
4. 과금 계산식
4.1 월 과금 총액
월 과금 총액
= 기본 과금액 + 사용자 추가 과금액 + 기능 추가 과금액
무료 운영 중에는 같은 식으로 예상 과금액을 계산하되, 실제 청구 금액은 0원으로 처리한다.
실제 청구 금액
= 과금 사용 여부가 true이면 월 과금 총액
= 과금 사용 여부가 false이면 0원
4.2 1차 과금: 부동산 기본 과금
기본 과금액 = 사무소별 기본 월 이용료
운영 원칙:
- 부동산 사무소 단위로 월 기본료를 가진다.
- 기본 월 이용료는 전체 공통값이 아니라 사무소별 설정값이다.
- 무료 사무소, 할인 사무소, 제휴 사무소는 기본 월 이용료를 0원 또는 별도 금액으로 설정한다.
- 정책 변경 시 과거 월의 계산 결과가 바뀌지 않도록 월별 스냅샷을 저장한다.
예시:
| 항목 | 무료 운영 | 유료 전환 |
|---|---|---|
| 기본 월 이용료 | 0원 | 10,000원 |
| 기본 과금액 | 0원 | 10,000원 |
4.3 2차 과금: 무료 인원 초과/사용자 추가
과금 대상 활성 사용자 수
= 활성 상태이고 billable=true인 사무소 소속 사용자 수
초과 인원 수
= max(과금 대상 활성 사용자 수 - 무료 인원, 0)
사용자 추가 과금액
= 초과 인원 수 × 초과 사용자 1명당 월 단가
과금 포함 대상:
| 역할 | 포함 여부 | 비고 |
|---|---|---|
| 부동산 오너 관리자 | 포함 | 사무소 운영 사용자 |
| 중개인 | 포함 | 계약/고객/매물 업무 사용자 |
| 중개보조인 | 포함 | 업무 기능 사용 사용자 |
과금 제외 가능 대상:
| 대상 | 제외 조건 |
|---|---|
| 비활성 사용자 | status=inactive |
| 초대 후 미가입 사용자 | status=invited 등 실제 사용 전 상태 |
| 본사관리자 | 사무소 소속 과금 사용자가 아님 |
| 특별 면제 사용자 | billable=false로 본사관리자가 지정 |
예시:
| 항목 | 값 |
|---|---|
| 무료 인원 | 2명 |
| 과금 대상 활성 사용자 수 | 4명 |
| 초과 인원 수 | 2명 |
| 초과 사용자 월 단가 | 5,000원 |
| 사용자 추가 과금액 | 10,000원 |
4.4 3차 과금: 기능 추가
기능 추가 과금은 본사관리자가 사무소별로 기능 권한과 금액을 설정한다.
월정액 기능 추가 과금액
= enabled=true인 사무소 기능의 monthlyFee 합계
건별 기능 추가 과금액
= 기능별 월 사용량 × 기능별 건당 단가
기능 추가 과금액
= 월정액 기능 추가 과금액 + 건별 기능 추가 과금액
1차 범위에서는 월정액 기능 과금을 우선 지원하고, 건별 과금은 사용량 테이블을 추가할 수 있도록 구조만 열어둔다.
기능 과금 예시:
| 기능 코드 | 기능명 | 과금 방식 | 기본 예시 단가 | 비고 |
|---|---|---|---|---|
kakao_contract_reminder |
카카오 만료 알림 | 월정액 또는 건별 | 월 5,000원 | 실제 발송 비용은 추후 분리 가능 |
customer_popup |
고객 예약 팝업 | 월정액 | 월 5,000원 | 사무소 단위 권한 |
listing_exchange |
매물 교환/공동중개 | 월정액 | 월 5,000원 이상 | 정책 확정 후 세분화 |
advanced_pdf |
PDF 고급 출력 | 월정액 | 월 5,000원 | 템플릿/워터마크 등 |
bulk_excel_upload |
엑셀 대량 업로드 | 월정액 | 월 5,000원 | 대량 처리 제한 필요 |
external_document_link |
외부 문서 연동 | 상담 | 별도 협의 | 사무소별 개별 단가 |
5. 테이블 설계
5.1 핵심 테이블
| 테이블 | 목적 |
|---|---|
Office |
부동산 사무소 기본 정보 |
OfficeBillingPolicy |
사무소별 현재 과금 정책 |
OfficeBillingPolicyHistory |
과금 정책 변경 이력 |
User |
사무소 소속 사용자 및 과금 포함 여부 |
Feature |
추가 기능 마스터 |
OfficeFeature |
사무소별 기능 권한 및 기능 과금 설정 |
FeatureUsage |
건별 과금이 필요한 기능 사용량 |
BillingUsage |
월별 과금 계산 스냅샷 |
BillingAdjustment |
할인, 면제, 수동 보정 |
5.2 OfficeBillingPolicy
| 필드 | 타입 예시 | 설명 |
|---|---|---|
id |
uuid | 정책 ID |
officeId |
uuid | 부동산 사무소 ID |
baseMonthlyFee |
integer | 기본 월 이용료 |
includedUserLimit |
integer | 무료 인원 |
extraUserMonthlyFee |
integer | 초과 사용자 1명당 월 단가 |
billingEnabled |
boolean | 실제 과금 여부 |
effectiveFrom |
date | 정책 적용 시작일 |
effectiveTo |
date nullable | 정책 적용 종료일 |
memo |
text nullable | 특별 단가/할인 사유 |
createdBy |
uuid | 설정한 본사관리자 |
createdAt |
datetime | 생성일 |
updatedAt |
datetime | 수정일 |
제약:
- 사무소별로 같은 기간에 활성 정책은 1개만 존재해야 한다.
baseMonthlyFee,includedUserLimit,extraUserMonthlyFee는 0 이상이어야 한다.- 정책 변경 시 기존 행을 덮어쓰기보다 이력 테이블 또는 새 정책 기간으로 남긴다.
5.3 OfficeFeature
| 필드 | 타입 예시 | 설명 |
|---|---|---|
id |
uuid | 사무소 기능 ID |
officeId |
uuid | 부동산 사무소 ID |
featureId |
uuid | 기능 마스터 ID |
enabled |
boolean | 사용 가능 여부 |
chargeType |
enum | monthly, usage, consulting, free |
monthlyFee |
integer | 월정액 금액 |
unitFee |
integer nullable | 건당 단가 |
freeTrialUntil |
date nullable | 기능 무료 체험 종료일 |
effectiveFrom |
date | 기능 적용 시작일 |
effectiveTo |
date nullable | 기능 적용 종료일 |
memo |
text nullable | 상담 내용/예외 정책 |
createdBy |
uuid | 설정한 본사관리자 |
createdAt |
datetime | 생성일 |
updatedAt |
datetime | 수정일 |
5.4 BillingUsage
BillingUsage는 월별 계산 결과를 고정하는 스냅샷이다.
| 필드 | 타입 예시 | 설명 |
|---|---|---|
id |
uuid | 월별 과금 ID |
officeId |
uuid | 부동산 사무소 ID |
billingMonth |
char(7) | YYYY-MM |
billingEnabled |
boolean | 해당 월 실제 과금 여부 |
baseFee |
integer | 기본 과금액 |
activeUserCount |
integer | 과금 대상 활성 사용자 수 |
includedUserLimit |
integer | 무료 인원 |
extraUserCount |
integer | 초과 인원 수 |
extraUserUnitFee |
integer | 초과 사용자 월 단가 |
extraUserAmount |
integer | 사용자 추가 과금액 |
monthlyFeatureAmount |
integer | 월정액 기능 과금액 |
usageFeatureAmount |
integer | 건별 기능 과금액 |
adjustmentAmount |
integer | 할인/보정 금액. 할인은 음수 |
estimatedAmount |
integer | 계산상 월 과금 총액 |
chargeAmount |
integer | 실제 청구 금액 |
calculatedAt |
datetime | 계산 시각 |
finalizedAt |
datetime nullable | 확정 시각 |
계산 규칙:
extraUserCount = max(activeUserCount - includedUserLimit, 0)
extraUserAmount = extraUserCount × extraUserUnitFee
estimatedAmount = baseFee + extraUserAmount + monthlyFeatureAmount + usageFeatureAmount + adjustmentAmount
chargeAmount = billingEnabled ? max(estimatedAmount, 0) : 0
6. 관리자 설정 흐름
6.1 부동산 등록 시 1차 과금 설정
본사관리자 로그인
→ 부동산 등록
→ 오너 관리자 계정 생성
→ 기본 월 이용료 입력
→ 무료 인원 입력
→ 초과 사용자 월 단가 입력
→ 과금 사용 여부 선택
→ 적용 시작일 입력
→ 저장
→ OfficeBillingPolicy 생성
관리 화면 필수 입력값:
| 항목 | 기본값 | 설명 |
|---|---|---|
| 기본 월 이용료 | 0원 | 무료 운영 기간에는 0원 |
| 무료 인원 | 2명 | 사무소별 조정 가능 |
| 초과 사용자 월 단가 | 0원 | 무료 운영 기간에는 0원 |
| 과금 사용 여부 | false | 유료 전환 전까지 false |
| 적용 시작일 | 등록일 | 정책 시작일 |
6.2 사용자 추가 시 2차 과금 확인
부동산 오너 관리자 로그인
→ 사용자관리
→ 중개인/중개보조인 추가
→ 활성 사용자 수 재계산
→ 무료 인원 초과 여부 표시
→ 예상 사용자 추가 과금액 표시
→ 저장
→ 본사관리자 화면의 예상 과금액 갱신
사용자 추가 화면에는 다음 정보를 보여준다.
| 표시 항목 | 예시 |
|---|---|
| 현재 활성 사용자 | 2명 |
| 무료 인원 | 2명 |
| 추가 후 활성 사용자 | 3명 |
| 초과 인원 | 1명 |
| 초과 사용자 월 단가 | 5,000원 |
| 추가 예상 금액 | 월 5,000원 |
무료 운영 중에도 같은 정보를 보여주되 현재 무료 운영 중으로 실제 청구는 0원 상태를 함께 표시한다.
6.3 기능 추가 시 3차 과금 설정
부동산 오너 관리자 또는 사용자 요청
→ 본사관리자 상담
→ 기능 마스터 확인
→ 사무소별 기능 권한 켜기
→ 과금 방식 선택
→ 월정액/건당 단가/무료 체험 종료일 입력
→ 적용 시작일 입력
→ 저장
→ OfficeFeature 생성 또는 갱신
→ 사용자 메뉴/버튼 활성화
본사관리자 기능 설정 화면:
| 항목 | 설명 |
|---|---|
| 기능명 | 추가할 기능 선택 |
| 사용 여부 | 메뉴/버튼 노출 여부 |
| 과금 방식 | 무료, 월정액, 건별, 상담 |
| 월정액 | 월 단위 기능 요금 |
| 건당 단가 | 사용량 기반 기능 요금 |
| 무료 체험 종료일 | 특정 기간 무료 제공 |
| 적용 시작일 | 기능 권한과 과금 적용 시작일 |
| 메모 | 상담 내용, 예외 승인 사유 |
7. 무료 운영 후 유료 전환 시나리오
7.1 무료 운영 단계
초기 운영 상태:
| 항목 | 값 |
|---|---|
billingEnabled |
false |
| 기본 월 이용료 | 0원 |
| 초과 사용자 월 단가 | 0원 |
| 기능 월정액 | 0원 또는 기록용 금액 |
| 실제 청구 금액 | 0원 |
무료 운영 중에도 해야 할 일:
- 사무소별 활성 사용자 수를 매월 기록한다.
- 무료 인원 초과 여부를 관리자 화면에 표시한다.
- 기능 권한 부여 이력을 저장한다.
- 유료 전환 시 적용할 예상 단가를 미리 입력할 수 있게 한다.
- 월별
BillingUsage를 생성해 과금 계산 검증 데이터를 쌓는다.
예시:
기본료 0원
활성 사용자 4명
무료 인원 2명
초과 인원 2명
초과 단가 0원
추가 기능 없음
예상 과금액 0원
실제 청구 금액 0원
7.2 유료 전환 준비
전환 전 본사관리자가 수행한다.
사무소별 현재 사용자 수 확인
→ 무료 인원 초과 사무소 확인
→ 기능 사용 사무소 확인
→ 유료 전환 적용일 결정
→ 사무소별 기본료/초과 단가/기능 단가 확정
→ 오너 관리자에게 예상 청구액 안내
→ 적용 시작일 기준 새 정책 생성
유료 전환 안내에 포함할 항목:
| 항목 | 설명 |
|---|---|
| 유료 전환일 | 실제 청구가 시작되는 날짜 |
| 기본 월 이용료 | 사무소 단위 월 기본료 |
| 무료 인원 | 추가 과금 없이 포함되는 인원 |
| 초과 사용자 단가 | 무료 인원 초과 1명당 월 요금 |
| 현재 활성 사용자 수 | 전환 시점 기준 사용자 수 |
| 추가 기능 목록 | 유료 기능 사용 권한 |
| 예상 월 청구액 | 전환 후 월 예상 금액 |
7.3 유료 전환 적용
유료 전환일에 정책을 다음처럼 변경한다.
| 항목 | 무료 운영 | 유료 전환 |
|---|---|---|
billingEnabled |
false | true |
| 기본 월 이용료 | 0원 | 10,000원 |
| 무료 인원 | 2명 | 2명 |
| 초과 사용자 월 단가 | 0원 | 5,000원 |
| 고객 예약 팝업 | 0원 | 5,000원 |
계산 예시:
부동산: 제주수공인중개사사무소
기본 월 이용료: 10,000원
무료 인원: 2명
활성 사용자: 4명
초과 인원: max(4 - 2, 0) = 2명
초과 사용자 월 단가: 5,000원
사용자 추가 과금액: 2명 × 5,000원 = 10,000원
추가 기능: 고객 예약 팝업 5,000원
월 과금 총액:
10,000원 + 10,000원 + 5,000원 = 25,000원
billingEnabled=true 이므로 실제 청구 금액:
25,000원
7.4 전환 월 일할 계산 정책
1차 설계에서는 운영 단순화를 위해 월 단위 과금을 기본으로 한다.
권장 정책:
| 상황 | v1 정책 |
|---|---|
| 월 중 유료 전환 | 다음 달 1일부터 청구 |
| 월 중 사용자 추가 | 다음 달 청구분부터 반영 |
| 월 중 사용자 비활성화 | 다음 달 청구분부터 반영 |
| 월 중 기능 추가 | 다음 달 청구분부터 반영 |
| 월 중 기능 해지 | 다음 달 청구분부터 제외 |
예외적으로 즉시 과금이 필요하면 BillingAdjustment로 수동 보정한다.
8. 월별 과금 배치 흐름
매월 말 또는 매월 1일
→ 사무소 목록 조회
→ 사무소별 적용 정책 조회
→ 과금 대상 활성 사용자 수 계산
→ 초과 인원 계산
→ 활성 추가 기능 금액 계산
→ 사용량 기반 기능 금액 계산
→ 할인/수동 보정 반영
→ BillingUsage 생성
→ 본사관리자 검토
→ 필요 시 보정
→ 월 과금 확정
월별 계산은 재실행 가능해야 한다. 단, finalizedAt이 있는 월은 자동 덮어쓰기를 막고 본사관리자 승인 후 재계산한다.
9. 운영 화면 요약
9.1 본사관리자 과금 설정 화면
필수 영역:
| 영역 | 내용 |
|---|---|
| 기본 정책 | 기본료, 무료 인원, 초과 사용자 단가, 과금 사용 여부 |
| 사용자 현황 | 활성 사용자 수, 비활성 사용자 수, 초과 인원 |
| 기능 권한 | 기능별 사용 여부, 과금 방식, 금액, 적용일 |
| 예상 과금 | 기본 과금, 사용자 추가 과금, 기능 추가 과금, 합계 |
| 이력 | 정책 변경, 기능 권한 변경, 수동 보정 |
9.2 부동산 오너 관리자 화면
노출 권장 정보:
| 영역 | 내용 |
|---|---|
| 현재 플랜 | 무료 운영/유료 운영 여부 |
| 사용자 사용량 | 활성 사용자 수, 무료 인원, 초과 인원 |
| 추가 기능 | 사용 중인 기능 목록 |
| 예상 이용료 | 다음 달 예상 금액 |
| 사용자 추가 안내 | 추가 시 초과 과금 여부 |
부동산 오너 관리자는 단가를 임의 수정할 수 없고 조회만 가능하다. 단가 변경과 면제 처리는 본사관리자만 수행한다.
10. v1 범위와 제외 범위
v1 포함:
- 사무소별 기본 과금 정책 설정
- 무료 인원과 초과 사용자 단가 설정
- 활성 사용자 기준 초과 인원 계산
- 사무소별 추가 기능 권한과 월정액 설정
- 무료 운영 중 예상 과금액 계산
- 월별 과금 스냅샷 저장
- 유료 전환 시 설정값 기반 청구 금액 계산
v1 제외:
- 카드 결제 자동 승인
- 세금계산서 자동 발행
- PG 연동
- 복잡한 일할 계산
- 기능별 상세 사용량 과금 확정
- 미납/정지 자동 처리
11. 핵심 원칙
- 과금 정책은 코드에 고정하지 않고 DB 설정값으로 관리한다.
- 무료 운영 중에도 유료 운영과 같은 계산식을 사용한다.
- 정책 변경과 기능 권한 변경은 이력으로 남긴다.
- 월별 과금 결과는 스냅샷으로 저장해 과거 청구액이 바뀌지 않게 한다.
- 실제 청구 여부는
billingEnabled로 통제한다. - 부동산 오너 관리자는 사용자 추가 시 예상 과금 영향을 알 수 있어야 한다.
- 본사관리자는 사무소별 예외 단가, 무료 제공, 할인, 수동 보정을 처리할 수 있어야 한다.