시나리오
운영 중인 MySQL 데이터베이스의 고객(customers) 테이블 과 주문(orders) 테이블 을 Databricks 레이크하우스로 실시간 CDC 수집 합니다. 수집된 Bronze 데이터를 SDP 파이프라인으로 변환하여 Silver 계층까지 구성하는 전체 흐름을 실습합니다.| 계층 | 구성 요소 | 설명 |
|---|---|---|
| 소스 MySQL | ecommerce.customers | 고객 테이블 |
| ecommerce.orders | 주문 테이블 | |
| Lakeflow Connect | Connection: mysql_ecommerce | MySQL 연결 정보 |
| Ingestion Pipeline: ecommerce_ingestion | 수집 파이프라인 | |
| Databricks (Bronze) | analytics.bronze.customers | 수집된 고객 데이터 |
| analytics.bronze.orders | 수집된 주문 데이터 | |
| Databricks (Silver) | analytics.silver.customers | 정제된 고객 데이터 |
| analytics.silver.orders | 정제된 주문 데이터 |
사전 준비
1. 소스 MySQL 데이터베이스 설정
Lakeflow Connect의 MySQL CDC는 Binlog(Binary Log) 를 사용합니다. 소스 MySQL에서 다음 설정이 필요합니다.⚠️ AWS RDS 사용 시: RDS 파라미터 그룹에서Databricks 전용 계정 생성:binlog_format=ROW를 설정해야 합니다. Aurora MySQL은 기본적으로 Binlog가 비활성화되어 있으므로binlog_format파라미터를 활성화해야 합니다.
2. 네트워크 연결 설정
Databricks에서 소스 MySQL에 접속할 수 있어야 합니다.| 네트워크 구성 | 방법 | 보안 수준 |
|---|---|---|
| 퍼블릭 인터넷 | MySQL의 퍼블릭 IP + 보안 그룹으로 Databricks IP 허용 | 낮음 |
| VPC Peering | Databricks VPC와 소스 DB VPC 간 피어링 | 중간 |
| AWS PrivateLink | Private Endpoint를 통한 프라이빗 연결 | 높음 |
💡 프로덕션 환경에서는 PrivateLink 또는 VPC Peering 을 권장합니다. 퍼블릭 인터넷 접속은 개발/테스트 환경에서만 사용하시기 바랍니다.
3. Unity Catalog 설정
대상 카탈로그와 스키마가 미리 생성되어 있어야 합니다.Step 1: Connection 생성
Unity Catalog Connection은 소스 시스템의 접속 정보를 안전하게 관리하는 객체입니다.방법 A: SQL로 Connection 생성
💡 Secret 사용: 비밀번호를 평문으로 입력하는 대신 secret() 함수를 사용하면 Databricks Secret Scope에 저장된 값을 안전하게 참조할 수 있습니다. 프로덕션 환경에서는 반드시 Secret을 사용하시기 바랍니다.
방법 B: UI로 Connection 생성
- Catalog Explorer 열기
- 좌측 메뉴에서 External Data→ Connections 클릭
- Create Connection 클릭
- 다음 정보 입력:
| 필드 | 값 | 설명 |
|---|---|---|
| Connection name | mysql_ecommerce | 연결 이름 (영문, 밑줄 가능) |
| Connection type | MySQL | 소스 시스템 유형 |
| Host | mysql-prod.company.com | MySQL 서버 주소 |
| Port | 3306 | MySQL 포트 |
| User | databricks_cdc | 접속 계정 |
| Password | (비밀번호) | 또는 Secret 참조 |
- Test Connection 클릭하여 연결 확인
- Create 클릭
연결 테스트 및 확인
Step 2: Ingestion Pipeline 생성 및 설정
방법 A: UI로 파이프라인 생성 (권장)
- 좌측 메뉴에서 Pipelines 클릭
- Create Pipeline→ ETL pipeline 선택
- 파이프라인 설정:
| 설정 항목 | 값 | 설명 |
|---|---|---|
| Pipeline name | ecommerce_ingestion | 파이프라인 이름 |
| Pipeline type | Ingestion (Lakeflow Connect) | 수집 파이프라인 |
| Source | MySQL | 소스 유형 |
| Connection | mysql_ecommerce | 앞서 생성한 Connection |
-
테이블 선택:
- Source schema:
ecommerce - Tables:
customers,orders선택 (또는 전체 스키마 선택)
- Source schema:
-
대상 설정:
- Target catalog:
analytics - Target schema:
bronze
- Target catalog:
-
실행 모드 설정:
- Mode:
Continuous(실시간 CDC) 또는Triggered(주기적)
- Mode:
- Create 클릭
방법 B: Python API로 파이프라인 생성
Step 3: 파이프라인 실행 및 모니터링
파이프라인 시작
- Pipeline UI에서 Start 버튼 클릭
- 초기 스냅샷이 시작됩니다 (소스 테이블 크기에 따라 시간 소요)
- 스냅샷 완료 후 자동으로 CDC 모드로 전환됩니다
모니터링 대시보드 확인
Pipeline UI에서 다음 메트릭을 실시간으로 확인할 수 있습니다:| 메트릭 | 설명 | 정상 기준 |
|---|---|---|
| Ingestion Latency | 소스 변경 → 대상 반영까지 지연 시간 | 수초~수분 |
| Records Processed | 처리된 레코드 수 | 지속적으로 증가 |
| Pipeline Status | 파이프라인 상태 | RUNNING 또는 IDLE |
| Error Count | 에러 발생 건수 | 0 |
| Last Update Time | 마지막 업데이트 시간 | 최근 시간 |
SQL로 수집 결과 확인
Step 4: CDC 변경사항 확인
소스 MySQL에서 데이터를 변경하고, Databricks에서 변경 사항이 반영되는지 확인합니다.소스에서 변경 실행
Databricks에서 변경 확인
💡 CDC 이력 보존: Bronze 테이블에는 모든 변경 이력이 보존됩니다. INSERT, UPDATE, DELETE 모두 별도의 행으로 기록되므로, 특정 시점의 데이터 상태를 재현할 수 있습니다.
Step 5: 스키마 변경 시나리오
운영 DB에서 스키마가 변경되었을 때 Lakeflow Connect가 어떻게 대응하는지 확인합니다.시나리오: 소스에서 컬럼 추가
Databricks에서 스키마 변경 확인
💡 스키마 진화 자동 처리: Lakeflow Connect는 소스에서 컬럼이 추가되면 대상 Delta 테이블에도 자동으로 컬럼을 추가합니다. 기존 행의 새 컬럼 값은 NULL로 채워집니다.
Step 6: SDP 파이프라인으로 Silver 변환 연결
수집된 Bronze 데이터를 SDP 파이프라인으로 정제하여 Silver 계층 을 구축합니다.💡 SCD Type 1 vs Type 2: SCD Type 1은 변경 시 기존 데이터를 덮어씁니다(항상 최신 상태만 유지). SCD Type 2는 변경 이력을 모두 보존합니다. 자세한 내용은 SDP: CDC와 SCD 문서를 참고하시기 바랍니다.
트러블슈팅 가이드
자주 발생하는 오류와 해결 방법
| 오류 메시지 | 원인 | 해결 방법 |
|---|---|---|
Connection failed: Access denied | MySQL 계정 권한 부족 | GRANT 문으로 필요한 권한 부여 |
Connection timed out | 네트워크 연결 불가 | 보안 그룹, VPC Peering, PrivateLink 설정 확인 |
Binlog not enabled | MySQL Binlog 비활성화 | log_bin=ON, binlog_format=ROW 설정 |
Schema evolution error | 비호환 스키마 변경 | 대상 테이블 스키마 수동 조정 후 파이프라인 재시작 |
Secret not found | Secret Scope 미설정 | Databricks CLI로 Secret 생성 확인 |
Insufficient permissions on target | 대상 스키마 권한 부족 | Unity Catalog 권한 설정 확인 |
파이프라인 재시작 방법
성능 최적화 팁
| 팁 | 설명 |
|---|---|
| 테이블 필터링 | 필요한 테이블만 선택하여 불필요한 수집 방지 |
| 연속 vs 트리거 | 실시간이 필요 없으면 트리거 모드로 비용 절감 |
| 대규모 초기 스냅샷 | 테이블이 매우 크면 오프피크 시간에 시작 |
| 병렬 수집 | 여러 테이블을 하나의 파이프라인에서 동시 수집 |
클린업
실습이 끝나면 생성한 리소스를 정리합니다.
⚠️ 주의: CASCADE 옵션은 스키마/카탈로그 내의 모든 테이블을 삭제합니다. 프로덕션 환경에서는 절대 사용하지 마시기 바랍니다. 실습용 리소스만 삭제하시기 바랍니다.
정리
이 실습에서 다음을 수행하였습니다:- MySQL Connection 생성: Unity Catalog에 소스 접속 정보를 안전하게 등록
- Ingestion Pipeline 생성: 코드 없이 UI에서 CDC 수집 파이프라인 구성
- 실시간 CDC 확인: 소스 변경사항이 수초 내에 Delta 테이블에 반영됨을 검증
- 스키마 진화 확인: 소스에서 컬럼 추가 시 대상 테이블에 자동 반영됨을 검증
- SDP 연동: Bronze 데이터를 Silver로 변환하는 후처리 파이프라인 구성