본문으로 건너뛰기
피드

dbt를 10년 늦게 시작한 후기 (DuckDB 에디션)

backend 약 4분
vote
0
댓글
북마크

dbt를 10년 늦게 발견한 저자가 DuckDB와 조합해 UK 홍수 모니터링 API 데이터 파이프라인을 구축한 경험기. source 분리, staging 모델, Jinja 매크로, 테스트, 자동 문서화, Dagster 오케스트레이션까지 전체 과정을 다룸.

  • 1

    dbt source로 추출/변환 분리하여 체계적 데이터 관리 가능

  • 2

    DuckDB read_json으로 API 데이터 직접 수집

  • 3

    freshness, not_null, unique 등 선언적 테스트와 커스텀 singular 테스트 지원

  • 4

    dbt docs로 리니지 그래프 포함 문서 자동 생성

  • 5

    Dagster로 dbt 모델을 asset 기반 오케스트레이션

Sources: 추출과 변환의 분리

  • dbt의 source 개념으로 데이터 추출(Extract)과 변환(Transform)을 깔끔하게 분리할 수 있음
  • DuckDB의 read_json으로 API 데이터를 직접 읽어올 수 있지만, dbt에서는 이를 source로 정의해서 관리함
  • source 정의에 Markdown 설명을 넣으면 나중에 자동 문서화에 그대로 활용됨
  • 비행기 안처럼 API 접근이 안 되는 환경에서는 정적 데이터셋으로 source만 교체하면 됨

Staging 모델과 매크로

  • staging 모델에서 원본 데이터를 정리하고, 이후 mart 모델에서 비즈니스 로직을 적용하는 계층 구조를 사용함
  • Jinja 템플릿으로 반복 로직을 매크로화할 수 있어서 SQL의 boilerplate를 크게 줄임
  • {{ source() }}{{ ref() }}로 모델 간 의존성을 선언적으로 관리함

테스트: freshness부터 커스텀 테스트까지

  • not_null, unique 같은 기본 테스트를 YAML 한 줄로 설정 가능함
  • source freshness 테스트로 데이터가 얼마나 오래됐는지 자동 체크함
  • singular test로 비즈니스 로직에 맞는 커스텀 검증도 SQL 파일 하나로 추가할 수 있음

문서화: 자동 생성 리니지 그래프

  • dbt docs generate로 전체 파이프라인의 리니지 그래프가 자동 생성됨
  • 모델 간 의존 관계가 시각적으로 표현되어 데이터 흐름을 한눈에 파악 가능함
  • YAML에 작성한 description이 문서에 자동 반영되므로 별도 문서 관리가 필요 없음

Dagster로 오케스트레이션

  • Dagster가 dbt와 네이티브로 통합되어 dbt 모델을 asset으로 인식함
  • 실행 이력 추적, 스케줄링, 모니터링을 Dagster UI에서 한 번에 관리할 수 있음
  • Dagster 설정 코드는 Claude가 작성해줬다고 저자가 직접 밝힘

핵심 인사이트

  • dbt는 대규모 프로젝트만을 위한 도구가 아님 — 소규모 개인 프로젝트에서도 변환 로직에 구조와 엄격함을 부여해줌
  • UK Environment Agency 홍수 모니터링 API 데이터를 DuckDB + dbt + Dagster로 엮은 전체 파이프라인 예제가 포함됨
  • 10년 늦게 시작했지만 dbt가 가져다주는 체계적인 데이터 변환 관리의 가치를 실감했다는 후기임

dbt는 대규모 프로젝트 전용이 아니라 소규모 개인 프로젝트에서도 데이터 변환에 구조와 엄격함을 부여하는 도구임

댓글

댓글

댓글을 불러오는 중...

backend

잘못된 추상화보다 중복이 낫다는 샌디 메츠의 고전 조언

샌디 메츠는 중복을 없애려다 잘못된 추상화를 만들면 코드가 조건문과 파라미터로 부풀어 더 위험해진다고 말한다. 이미 틀어진 추상화는 억지로 보존하지 말고, 다시 호출부에 인라인해서 중복을 되살린 뒤 현재 요구사항에 맞는 새 구조를 찾는 편이 빠르다는 주장이다.

backend

리눅스 커널, 6년·360개 넘는 패치 끝에 strncpy 제거

리눅스 커널이 오랫동안 버그의 원인이던 strncpy API 사용을 Linux 7.2에서 제거했어. NUL 종료 동작이 직관적이지 않고 불필요한 zero-fill로 성능 문제도 있던 API를 6년 동안 약 362개 커밋으로 걷어낸 작업임.

backend

덕디비는 왜 빠를까: 서버 없는 분석 엔진의 내부 구조 뜯어보기

DuckDB가 단일 바이너리, 인프로세스 실행, 컬럼형 저장, 최적화 패스, Parquet 푸시다운으로 빠른 분석 쿼리를 처리하는 방식을 깊게 설명한 글이다. 6GB Parquet 파일을 노트북에서 바로 SQL로 읽는 경험 뒤에 어떤 설계가 깔려 있는지 따라간다.

backend

피지독, 포스트그레스를 수평 확장시키겠다고 550만 달러 투자 유치

피지독은 포스트그레스 앞단에 프록시를 두고 샤딩과 라우팅을 처리해 수평 확장을 가능하게 하겠다는 오픈소스 프로젝트다. 이미 프로덕션에서 초당 200만 건이 넘는 쿼리를 처리하고, 확인된 규모만 20테라바이트 이상을 샤딩했다고 밝히며 550만 달러 투자를 공개했다.

backend

펜타시스템, EDB 포스트그레SQL로 국내 엔터프라이즈 DB 전환 시장 공략

펜타시스템테크놀러지가 EDB와 파트너 계약을 맺고 국내에 EDB 포스트그레SQL 기반 데이터 플랫폼을 공급한다. 기존 상용 DBMS 정책 변화로 비용 부담이 커진 기업들을 겨냥해, 오픈소스 기반 엔터프라이즈 데이터 플랫폼 전환 수요를 잡겠다는 전략이다. 금융, 공공, 제조, 유통, 클라우드, AI 데이터 분석 환경까지 적용 범위를 넓히려는 움직임이다.