Skip to main content

5. 데이터 품질 관리

5.1 SDP Expectations로 파이프라인 품질 보장

import dlt

@dlt.table(comment="품질 검증이 적용된 실버 주문 테이블")
@dlt.expect("valid_order_id", "order_id IS NOT NULL")
@dlt.expect("valid_amount", "amount > 0 AND amount < 1000000")
@dlt.expect_or_drop("valid_customer", "customer_id IS NOT NULL")
@dlt.expect_or_fail("valid_date", "order_date <= current_date()")
def silver_orders():
    return dlt.read_stream("bronze_orders")
Expectation 유형위반 시 동작사용 시나리오
@dlt.expect경고 기록, 데이터 유지데이터 품질 모니터링 (소프트 체크)
@dlt.expect_or_drop위반 행 제거잘못된 데이터 필터링 (프로덕션 권장)
@dlt.expect_or_fail파이프라인 중단치명적 오류 (날짜 미래값 등)

5.2 Lakehouse Monitoring으로 드리프트 감지

-- Lakehouse Monitor 생성 (시계열 프로파일)
CREATE OR REPLACE MONITOR prod_sales.gold.daily_revenue
USING TIME SERIES
  TIMESTAMP_COL event_date
  GRANULARITIES ("1 day", "1 week")
WITH (
  LINKED_ENTITIES = ("prod_sales.gold.daily_revenue_monitor")
);
모니터링 유형감지 대상적용 테이블
Snapshot시점 기준 통계 분포디멘션 테이블, 룩업 테이블
Time Series시간에 따른 분포 변화팩트 테이블, 이벤트 테이블
InferenceML 모델 입력/출력 드리프트ML 추론 결과 테이블
모니터링이 생성하는 핵심 지표:
지표설명활용
Null 비율컬럼별 NULL 값 비율급증 시 데이터 소스 문제 의심
고유값 수컬럼별 Distinct 값 수급변 시 데이터 스키마 변경 의심
분포 변화KL Divergence, JS Distance데이터 드리프트 감지
이상치Z-score 기반 탐지비정상 데이터 유입 감지

5.3 데이터 품질 SLA 정의

SLA 항목골드 등급실버 등급브론즈 등급
완전성 (Completeness)NULL < 0.1%NULL < 1%NULL < 5%
정확성 (Accuracy)오류율 < 0.01%오류율 < 0.1%오류율 < 1%
적시성 (Timeliness)15분 이내 갱신1시간 이내24시간 이내
일관성 (Consistency)참조 무결성 100%참조 무결성 99.9%참조 무결성 99%
고유성 (Uniqueness)중복 0%중복 < 0.01%중복 < 0.1%

6. CI/CD 및 자동화

6.1 Databricks Asset Bundles + GitHub Actions

# .github/workflows/deploy.yml
name: Deploy Databricks Assets

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: databricks/setup-cli@main

      - name: Validate bundle
        run: databricks bundle validate
        env:
          DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
          DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_SP_TOKEN }}

  deploy-staging:
    needs: validate
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: databricks/setup-cli@main

      - name: Deploy to staging
        run: databricks bundle deploy --target staging
        env:
          DATABRICKS_HOST: ${{ secrets.STAGING_HOST }}
          DATABRICKS_TOKEN: ${{ secrets.STAGING_SP_TOKEN }}

  deploy-production:
    needs: validate
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: databricks/setup-cli@main

      - name: Deploy to production
        run: databricks bundle deploy --target production
        env:
          DATABRICKS_HOST: ${{ secrets.PROD_HOST }}
          DATABRICKS_TOKEN: ${{ secrets.PROD_SP_TOKEN }}

6.2 환경별 프로모션 (Dev → Staging → Prod)

# databricks.yml (Databricks Asset Bundle 설정)
bundle:
  name: sales-data-pipeline

targets:
  dev:
    workspace:
      host: https://dev-workspace.cloud.databricks.com
    default: true
    variables:
      catalog: dev_sales
      warehouse_size: Small

  staging:
    workspace:
      host: https://staging-workspace.cloud.databricks.com
    variables:
      catalog: stg_sales
      warehouse_size: Medium

  production:
    workspace:
      host: https://prod-workspace.cloud.databricks.com
    run_as:
      service_principal_name: svc-prod-etl
    variables:
      catalog: prod_sales
      warehouse_size: Large
    permissions:
      - level: CAN_MANAGE
        group_name: platform-admins
      - level: CAN_VIEW
        group_name: data-engineers
환경배포 트리거승인 필요실행 계정
Dev로컬 databricks bundle deploy없음개발자 본인
StagingPR 생성 시 자동PR 리뷰 승인CI/CD Service Principal
Productionmain 브랜치 merge 시2명 이상 승인프로덕션 Service Principal

6.3 코드 리뷰 프로세스

리뷰 항목체크 포인트자동화 가능 여부
SQL 문법구문 오류, 성능 안티패턴✅ sqlfluff, sqlglot
데이터 품질Expectation 정의 여부✅ DLT Expectation 검사
보안하드코딩된 비밀번호, PII 노출✅ Secret 스캐너
비용 영향대용량 스캔, 비효율 조인⚠️ 부분 자동화
문서화테이블/컬럼 코멘트✅ 코멘트 존재 여부 검사
테스트단위 테스트 커버리지✅ pytest 연동

7. 거버넌스 성숙도 모델

조직의 데이터 거버넌스 수준을 5단계로 평가하여 개선 로드맵을 수립합니다.

5단계 성숙도 평가 프레임워크

단계수준접근 제어데이터 품질모니터링자동화
1. Initial임의적개인별 직접 권한수동 검증없음없음
2. Managed기본그룹 기반 권한기본 Expectation비용 추적수동 배포
3. Defined표준화Row/Column 필터SLA 정의 + 모니터링감사 로그 분석CI/CD 구축
4. Measured정량적ABAC 적용자동 드리프트 감지실시간 알림완전 자동화
5. Optimizing최적화Zero TrustAI 기반 품질 예측예측적 모니터링셀프서비스

단계별 행동 계획

1단계 → 2단계 (기초 구축, 1~2개월)
□ Unity Catalog 활성화 및 Metastore 생성
□ IdP 연동 및 SCIM 자동 프로비저닝
□ 역할 기반 그룹 설계 및 생성
□ 프로덕션 워크로드를 Service Principal으로 전환
□ 기본 비용 모니터링 대시보드 구축
2단계 → 3단계 (표준화, 2~3개월)
□ 데이터 분류 체계 수립 및 태깅
□ Row Filter / Column Mask 적용 (PII 테이블)
□ SDP Expectations으로 파이프라인 품질 검증
□ 감사 로그 모니터링 대시보드 구축
□ Databricks Asset Bundles + CI/CD 파이프라인 구축
□ 코드 리뷰 프로세스 정립
3단계 → 4단계 (자동화, 3~6개월)
□ Lakehouse Monitoring으로 자동 드리프트 감지
□ 비용 이상 감지 자동 알림 설정
□ PII 자동 태깅 파이프라인 구축
□ 데이터 품질 SLA 대시보드 운영
□ Predictive Optimization 전면 활성화
□ 규제 준수 자동 보고서 생성
4단계 → 5단계 (최적화, 6개월+)
□ 셀프서비스 데이터 플랫폼 구축
□ 데이터 메시 패턴 적용 (도메인별 소유권)
□ AI 기반 데이터 품질 이상 예측
□ 실시간 컴플라이언스 모니터링
□ 데이터 카탈로그 + Genie 기반 자연어 접근

성숙도 자가 진단 질문

다음 질문에 답하여 현재 성숙도를 평가해 보세요.
질문아니오
Unity Catalog이 활성화되어 있습니까?2단계+1단계
모든 권한이 그룹을 통해 관리됩니까?2단계+1단계
PII 데이터에 Row/Column 필터가 적용되어 있습니까?3단계+2단계
데이터 품질 SLA가 정의되어 있습니까?3단계+2단계
CI/CD로 자동 배포되고 있습니까?3단계+2단계
데이터 드리프트가 자동 감지됩니까?4단계+3단계
비용 이상이 자동 알림됩니까?4단계+3단계
셀프서비스 데이터 접근이 가능합니까?5단계4단계

참고 링크