워크시트 4: 마이그레이션 웨이브 계획
NYC Taxi 객체 열 개를 마이그레이션 웨이브로 배열하고 각각의 복잡도를 등급화한다. 모든 답에 즉시 피드백이 제공된다.
예상 소요 시간: 15–20분 참고 자료: 실행 순서는 모듈 03 — 프로비저닝과 마이그레이션 → 모듈 04 — dbt 파이프라인 재구축 → 모듈 05 — 벤치마크와 컷오버
개념
데이터베이스 객체에는 의존성이 있다. fact_trips를 쿼리하는 뷰는 fact_trips가 존재하기
전에 만들 수 없다. trips_raw에서 읽는 materialized view는 trips_raw에 데이터가 들어오기
전에 채울 수 없다. 잘못된 순서로 마이그레이션하면 테이블 생성 실패, 빈 결과, 또는 진단하기
어려운 불완전한 데이터가 생긴다.
해법: 웨이브 계획. 모든 객체를 번호가 붙은 웨이브로 정리하되, 각 웨이브에는 의존성이 앞선 웨이브에서 이미 충족된 객체만 담는다.
복잡도 등급화는 마이그레이션 노력의 우선순위를 정하는 데 도움이 된다. B와 C를 가르는 기준은 구문 자체를 재구성해야 하는지, 아니면 타입만 다시 지정하면 되는지다.
- 등급 A — 사소함: 표준 테이블이나 통과 뷰, 특별한 로직 없음, 직관적인 타입 매핑
- 등급 B — 중간: 배우고 테스트해야 할 ClickHouse 고유 구성 요소가 하나 있지만, 변환
자체는 치환이다 — ClickHouse 엔진과 증분 설정,
CREATE DICTIONARY, 갱신 가능한 MV의REFRESH EVERY, 또는VARIANT읽기를 대신하는JSONExtract*경로 - 등급 C — 복잡함: 타입만 다시 지정하는 것이 아니라 구문을 다시 만들어야 하고(
QUALIFY는 서브쿼리로 감싸고,MERGE INTO는 증분 전략으로 대체), 그 재작성이 엔진 선택과 하위 모든 곳의FINAL배치와 일관성을 유지해야 한다. 신중하게 테스트하라 - 등급 D — 재설계 필요: 직접 대응물이 없는 Snowflake 고유 기능 (Streams → 프로듀서를 ClickHouse로 컷오버, Tasks → 갱신 가능한 MV 또는 예약 dbt 실행)
아래 연습 3은 위의 네 글자 대신 압축된 3단 척도로 등급화하도록 요구한다 — Low(등급 A), Medium(등급 B), High(등급 C 또는 D). 노력 순서를 정하는 데 가장 중요한 구분은 네 갈래 분할이 아니라 사소함 / 테스트 필요 / 재설계 필요이기 때문이다. 각 답의 설명은 A–D 중 어느 것에 해당하는지 밝히므로, 글자 등급으로 되짚어 볼 수 있다.
연습 1: 의존성 DAG
아래 각 객체에 대해 무엇에 의존하는지 선택하라. 열 개 중 세 개는 의존성이 전혀 없는 정적 참조 데이터다 — 이것은 나중에 채울 공백이 아니라 실제 답이다.
연습 2: 마이그레이션 웨이브 배정
웨이브 0과 1은 맥락 제공을 위해 채워져 있다. 웨이브 2부터 4까지, 그 웨이브에 속하는 객체를 선택한 다음 그 웨이브에서 실제로 무슨 일이 일어나는지 답하라.
연습 3: 복잡도 등급화
각 객체를 등급화한 다음, 표 아래의 주요 과제 문제에 답하라.
회고 문제
마지막 두 문제는 정답 키의 리스크 레지스터에 있는 세 항목을 다룬다 — fact_trips(등급 C)와
agg_hourly_zone_trips가 올라온 뒤 검증하는 것, 그리고 TRIPS_CDC_STREAM과
CDC_CONSUME_TASK를 대체하는 프로듀서 컷오버를 검증하는 것(등급 D)이다. 이 레지스터가 단순히
등급 C/D 집합인 것은 아니다. agg_hourly_zone_trips는 Medium 등급이지만, 그 롤링 재계산
윈도우는 이 파이프라인에서 미묘하게 틀리기 가장 쉬운 부분이다.
Loading worksheet...
migration-plan.md로 옮기기
웨이브 계획과 복잡도 등급을 migration-plan.md의 Section 6에 복사하고 다음을
체크하라.
- [ ] Migration wave plan: completed