Medallion 워크스루 — Bronze → Silver → Gold
GenD 의 Medallion 데이터 레이어를 한 바퀴 따라가며, 원천 데이터가 어떻게 정제되어 비즈니스 소비 단계까지 도달하는지 직접 확인합니다. 데이터 엔지니어 페르소나를 가정하지만, 마지막 단계는 분석가 시점으로 전환됩니다.
선행 조건:
- 10분 퀵스타트 완료
make seed-demo실행 완료 — layer 메타데이터 자동 부여 (Issue #551 · PR #555)- Medallion 컨셉 — 부록: Medallion 데이터 레이어
소요 시간: 15-20분.
전체 흐름
🥉 Bronze (CDC 원천) → 🥈 Silver (PII 마스킹) → 🥇 Gold (마트·분석)
iceberg.cdc.orders iceberg.<도메인>.stg_* iceberg.datax_analytics.*
각 단계마다 카탈로그 → Dagster → DataMart → SQL 도구를 차례로 사용해 layer 라는 공통 좌표축이 어떻게 일관되게 노출되는지 봅니다.
1단계: 카탈로그에서 🥉 Bronze 테이블 확인
좌측 사이드바 카탈로그 진입 → iceberg 카탈로그 → cdc 스키마 → orders 테이블 클릭 → 테이블 상세 페이지로 진입.
| 확인 위치 | 기대 값 |
|---|---|
| 테이블 상세 헤더의 layer 배지 | 🥉 Bronze (갈색) |
우측 About 영역의 Medallion 필드 | Bronze 배지 표시 |
Domain 필드 | cdc |
카탈로그 트리(좌측 노드 목록) 자체에는 배지가 노출되지 않습니다 — 트리 클릭 후 진입한 상세 페이지에서 확인하세요.
해석: 이 테이블은 외부 RDB (예: sourcedb.public.orders) 에서 Debezium CDC 로 실시간 복제된 원천 입니다. PII 가 마스킹되지 않았으므로 데이터 엔지니어 / 감사 권한만 직접 조회 가능합니다.
🔍 layer 메타데이터의 출처: 시드 시점에
scripts/seed/metadata/table_layers.py가 정의한 매핑이 PostgreSQLtable_metadata테이블에 upsert 됩니다. 자세한 내용은 Medallion 가이드 참고.
2단계: Dagster 에서 🥈 Silver 정제 파이프라인 추적
Dagster UI 에 접속합니다. URL 은 환경별로 다릅니다 — Kind 로컬은 http://localhost:30400 (NodePort 30400), AKS 는 클러스터 운영자가 안내한 Dagster 엔드포인트. 자세한 NodePort 매핑은 서비스 포트 참조.
Asset Group: preprocessing 선택. 다음 3 단계 asset 이 보여야 합니다:
raw_zone_ingest → cleaned_zone_process → parsed_zone_extract
(Bronze) (Silver) (Gold)
Dagster 의 group 명칭은
preprocessing(코드:assets/preprocessing_zones.py의group_name="preprocessing"). 파일명과 group 명을 헷갈리지 마세요.
| Asset | layer 태그 | 동작 |
|---|---|---|
raw_zone_ingest | bronze | 원본 문서를 raw zone 으로 적재 (감사용 보존) |
cleaned_zone_process | silver | PII 마스킹 + 텍스트 정제 + 스키마 통일 |
parsed_zone_extract | gold | 엔티티 추출 + auto-tag (RAG 즉시 소비 가능) |
Tag 검증: 임의 asset 클릭 → "Tags" 패널에서 layer: silver 확인.
Materialize: cleaned_zone_process 우상단 [Materialize] 클릭 → 진행 상황 모니터.
🔍 태그 일관성 가드: 신규 Dagster asset 추가 시
tags["layer"]누락은 회귀 테스트 (#553) 가 CI 단계에서 차단합니다.
3단계: DataMart 빌더로 🥇 Gold 마트 생성
좌측 사이드바 데이터 마트 → 우상단 [+ Create Data Mart] 클릭.
다음 값으로 입력:
| 필드 | 값 |
|---|---|
| Name | walkthrough_silver_to_gold |
| Description | Medallion 워크스루 — Silver 에서 Gold 마트 |
| Source SQL | SELECT customer_id, COUNT(*) AS cnt, SUM(amount) AS total FROM iceberg.card.transactions GROUP BY customer_id |
| Target Catalog | iceberg |
| Target Schema | datax_analytics |
| Target Table | walkthrough_gold_mart |
| Refresh Mode | manual (튜토리얼이므로) |
| Layer | gold ← 명시 |
[Create] 클릭 → 마트 목록에 추가됨. [Refresh Now] 로 1회 실행.
| 확인 포인트 | 기대 값 |
|---|---|
| 마트 카드 layer 칩 | 🥇 Gold (노란색) |
| Owner | 현재 로그인 사용자 |
| Refresh 상태 | success |
| Row count | > 0 |
🔍
layer="gold"미지정 시: DataMart API 가 자동으로gold기본값을 부여합니다 (Phase A-4). 여기서는 명시적으로 선택해 의도를 드러냅니다.
4단계: SQL 에디터에서 🥇 Gold 마트 조회 (분석가 시점)
좌측 사이드바 SQL 에디터 로 이동.
다음 쿼리 실행:
SELECT
customer_id,
cnt,
total
FROM iceberg.datax_analytics.walkthrough_gold_mart
ORDER BY total DESC
LIMIT 10;
확인:
- 결과 테이블에 데이터 출력
- 좌측 사이드바 카탈로그에서
walkthrough_gold_mart클릭 → 테이블 상세 페이지 헤더에 🥇 Gold 배지 노출
페르소나 전환: 분석가 계정 (analyst@gend.local) 으로 재로그인 후 위 쿼리 재실행 → 동일 결과 (조직에서 분석가 RBAC 정책이 Gold 마트 read 를 허용하는 경우). 1단계의 iceberg.cdc.orders (Bronze) 직접 조회는 RBAC/ABAC 정책으로 제한할 수 있습니다 — 자세한 내용은 데이터 거버넌스 (#473) 참고.
현재 GenD 의 ABAC 시행은
security_level· PII 태그 ·quality_rules가 기준입니다. layer 자체를 자동 차등 조건으로 사용하려면 정책에 layer 컨디션을 명시적으로 추가하세요 (권장 운영 모델은 Medallion 가이드 참고).
핵심 개념 정리
| 단계 | 도구 | layer | 페르소나 |
|---|---|---|---|
| 1 | 카탈로그 | 🥉 Bronze | 데이터 엔지니어 |
| 2 | Dagster | 🥈 Silver | 데이터 엔지니어 |
| 3 | DataMart 빌더 | 🥇 Gold | 데이터 엔지니어 |
| 4 | SQL 에디터 | 🥇 Gold | 분석가 (전환) |
왜 layer 가 중요한가:
- 거버넌스: PII 노출 / 접근 권한 / SLA 차등을 layer 기준으로 일관 적용
- 카탈로그 가독성: 4,000+ 테이블 환경에서 "어떤 데이터가 소비 준비됐는지" 한눈에 식별
- AI 컨텍스트: NL2SQL · RAG 가 Gold 우선 검색 → Hallucination 위험 감소
다음 단계
- 데이터 거버넌스 — layer 기반 PII/RBAC 시행
- 데이터 품질 — layer 별 freshness · completeness SLA
- E2E 데이터 파이프라인 — 커넥터 → 파이프라인 → 마트 전 과정
- Medallion 가이드 — 컨셉 + 3축 매핑 표
💡 확장 시나리오: 본인 도메인의 외부 RDB 를 Trino 커넥터로 연결 → CDC 파이프라인 부착 → Silver/Gold 마트 빌드 까지 동일한 4 단계로 적용 가능합니다. 자세한 절차는 데이터 소스 연결 + 파이프라인 관리 참고.