Data Modeling
비즈니스 도메인을 테이블·관계로 구조화하는 설계 — 중앙 일관성과 도메인 유연성의 균형
핵심 개념
Data Modeling은 비즈니스 개념을 분석 가능한 테이블·차원·메트릭으로 구조화하는 설계 활동이다. dimensional modeling(fact/dimension), 정규화 수준, separate vs monolithic 같은 선택이 쿼리 용이성·일관성·확장성을 좌우한다. LLM 시대에도 핵심: AI 에이전트가 데이터를 신뢰성 있게 추론하려면 AI Self-Serve Analytics에서 보듯 잘 모델링된 canonical dataset이 전제다.
Separate vs Monolithic (Airbnb 다제품 사례)
제품 라인이 늘어날 때 핵심 딜레마:
| 접근 | 장점 | 단점 |
|---|---|---|
| Separate 모델 | 제품별 깔끔·맞춤형, 고유 속성 포착 | 로직 중복 |
| Monolithic 모델 | 재사용성·일관성, 코드 한 곳 | unwieldy, 제품 고유성에 부적합 |
어느 쪽도 보편 우월하지 않고 도메인에 따라 다르다. Airbnb의 해법은 중앙 원칙 + 분권 가이드라인:
3대 중앙 원칙
- No hybrid: 도메인은 완전 separate 또는 완전 monolithic(혼란스러운 중간 금지)
- 일관된 식별자 명명: separate는 제품별 ID(
id_experience), monolithic은 generic ID(id_product_listing) +dim_product_type - 명확한 namespace: 제품별/global/team별
결정 가이드라인
shared vs unique 속성, 미래 진화, upstream 정렬, downstream 소비자, 코드 유지보수성, 데이터 볼륨, 호환성, 비즈니스 연속성. 가장 결정적 요인: 제품 라인이 공통 속성을 공유하나, 고유 속성이 많나.
- 제품 고유 로직 → separate (Listings의 Service offering many-to-one, business hours, Service area)
- cross-cutting 개념 → monolithic (Messaging, Payments, Customer support)
오프라인 웨어하우스 = Translation Layer
온라인 production DB는 transactional 속도·안정성에 최적화 → 분석에 이상적이지 않은 구조. 오프라인 웨어하우스의 핵심 기능은 raw production 데이터를 표준화·신뢰 source of truth로 변환하는 것. 이것이 다운스트림이 빠르고 정확하게 인사이트를 얻는 기반.
Logical vs Physical 분리 (Uber DAL)
Semantic Layer·Query Proxy와 인접한 또 다른 모델링 추상화: logical table(무엇을 — 데이터 인터페이스)과 physical table(어떻게 — 실제 저장)을 분리. table resolution이 schema eligibility → availability → column continuity로 적절한 physical 테이블을 선택하고 시간 기반으로 source를 조합(Uber DAL이 advertiser 리포트 구축을 수 주→2일로 단축).
데이터 debt 관리
새 표준은 레거시 테이블의 비준수를 드러낸다. 마이그레이션·deprecation은 수백 다운스트림 소비자 때문에 dual pipeline 검증 + 느린 deprecation 사이클이 필요 — 과거를 신중히 다루는 규율.
연관 개념
- Semantic Layer — 비즈니스 의미 부여 계층
- Medallion Architecture — Bronze/Silver/Gold 정제 계층
- Data Mesh and Federation — 도메인별 데이터 소유권
- AI Self-Serve Analytics — canonical 모델이 AI 분석의 전제
- Analytics Engineering — dbt 기반 모델 구현·거버넌스
Source: Scaling Airbnb Data Architecture for a Multi-Product World, Simplifying Integrations with a Data Abstraction Layer at Uber