Data Architecture
한국과 일본을 한 시스템에서 운영하기 위한 구조입니다. 물건 프로파일이 규칙을 갖고, 요금은 행으로 서고, 원장 위에 분석층이 따로 섭니다.
Principle
나라별 차이는 조건문이 아니라 물건 프로파일에 담깁니다. 물건마다 아래 아홉 개를 지정하면 규칙이 따라옵니다. 그래서 한국과 일본이 한 시스템·한 원장에서 돌아갑니다.
| 프로파일 | 한국 | 일본 |
|---|---|---|
| 청구 주기 | 캘린더월 | 사이클 — 입주일 기준 익월 같은 날의 전날까지 |
| 장기/단기 판정 | 계약 개월수 | 사이클 6개 이상 = 장기. 최초 1회만 판정하고 재계약해도 재판정하지 않습니다 |
| 일할 분모 | 그 달 실일수 | 장기 = 실일수 / 단기 마지막 잔여 = 28일 고정 |
| 청구 시점 | 매월 납부기한일 | 입주달 = 당월 일할 + 익월분 동시 / 이후 전월 1일 |
| 재계약 수수료 | 없음(협의) | 신규 임대료의 10% · 장기만 (면제 협상 가능) |
| 법정 신고 | 임대차 신고 대상 | 해당 없음 — 국내 제도라 일본 계약에는 이 단계가 아예 생기지 않습니다 |
| 입주 가능 시점 | 정비 리드타임 D+n | 퇴실 +7일 |
| 신규 모집 시작 | 만기 D-60 | 퇴실 예정일 1개월 전 |
| 중도퇴거 위약금 | 없음 | 장기 = 2사이클 통지 / 이내 퇴거 시 2사이클분, 단기 = 잔여 전액 |
사이클이 가장 큰 차이입니다. 캘린더월과 다른 축이라 화면이 아니라 계산 엔진이 갈립니다. 물건 프로파일을 보지 않고 구현하면 두 나라 중 하나가 반드시 틀립니다.
Tables
마스터 · 원장 · 이벤트를 구분합니다. 원장은 사실을 쌓고, 이벤트는 그 사실이 언제 왜 바뀌었는지를 남깁니다.
v5
구간이 물건마다 다르고 개수도 다릅니다 — 국내 2구간, 일본 3구간. 컬럼으로 두면 구간이 하나 늘 때마다 컬럼을 추가해야 하고 물건별로 다른 개수를 담을 수 없습니다.
| 구간 | 기간 | 보증금 | 납부 |
|---|---|---|---|
| 초단기 | 3개월 이하 | 없음 | 일시불(전체 선납) |
| 단기 | 3개월 초과 ~ 6개월 미만 | 없음 | 3개월치 선납 후 월납 |
| 장기 | 6개월 이상 | 월세 1개월분 | 보증금 + 월세 선납 후 월납 |
일본 기준 예시입니다. 경계 규칙은 «최소 이상 ~ 최대 미만» 하나로 고정했습니다 — 포함 여부를 구간마다 정하게 두면 «6개월»이 어디 속하는지 아무도 확신하지 못합니다. 값은 물건 마스터가 원장이고, 숫자가 바뀌어도 코드는 고치지 않습니다.
호실 테이블에 요금 컬럼을 만들지 않습니다. 만들면 물건이 늘 때마다 마이그레이션이 필요합니다. 일본은 가격이 2단인데 납부 방식이 3단이라, 컬럼 방식으로는 세 번째 경계를 담을 자리가 아예 없었습니다.
Ledger
PostgreSQL 마이그레이션 29개로 서 있습니다. 운영 시스템이 쓰는 테이블과 분석이 읽는 테이블이 같은 원장을 봅니다.
Policies
스키마만으로는 장부가 되지 않습니다. 아래가 코드가 아니라 정책 문서로 잠겨 있습니다.
OBSERVED(실측)와 DERIVED_FROM_CONTRACT(계약 파생)를 구분합니다. 가동률은 계약이 아니라 실제 점유일에서 나옵니다.통화는 법인에서 따라옵니다. 물건과 거래가 각자 정하면 반드시 어긋납니다. 화면 합계도 ¥55,196,240 · 79,909만원처럼 나눠 냅니다 — 환산해서 한 줄로 만들면 그 환율이 곧 근거 없는 숫자가 됩니다.
Analytics
지표를 화면에서 계산하지 않습니다. 계보가 있고 각 단계에 데이터 테스트가 걸립니다.
데이터 테스트 8종 — 가동률 범위 검증 · 차단 객실 점유 금지 · 평균임대료 순서 · 시간대 유효성 외.
Accounting
원상회복비·위약금·재계약 수수료·카드 수수료·공과금·조정금… 항목은 계속 늘어납니다. 그때마다 개발하지 않도록 항목을 데이터로 정의합니다.
구분은 청구 · 수납 · 지출 · 조정이고, 청구 − 수납 = 미수금입니다. 임대비용을 계약에서 계산해 보여주는 파생값으로 두면 상태(예정·청구·완납·연체·면제)를 담을 수 없습니다. 그래서 청구 회차를 테이블로 승격하는 것이 온라인 결제의 선행 작업입니다.