What's your ETL? Personal Project · 2026

DATA MATES

구축형
데이터 플랫폼

기존 dbt 프로젝트를 연결해 데이터 수집부터 모델링, 파이프라인, 품질, 분석까지 하나의 흐름으로 관리할 수 있도록 만든 개인 데이터 플랫폼입니다.

Python 3.11FastAPIdbt CoreDuckDBAirflowDuckLakeMinIOPostgreSQLSuperset
01
BackgroundWhy I built it

Project Background

Before

작업마다 확인해야 하는 도구가 달랐습니다.

수집 설정은 애플리케이션, 모델은 dbt, 실행 상태는 Airflow, 대시보드는 Superset에서 확인해야 했습니다. 오류 원인이나 변경 영향 범위를 파악하려면 여러 화면을 오가야 했습니다.

Design Goal

기존 도구는 유지하고 관리 흐름만 하나로 연결했습니다.

dbt, Airflow, Superset을 대체하는 대신 Data Mates에서 필요한 정보와 실행 기능을 한곳에 연결했습니다. 기존 dbt 프로젝트도 그대로 사용할 수 있습니다.

02
WorkflowFrom source to dashboard

Data Workflow

01CollectHTTP API · CSV · JSONL 원천 확인 후 수동·예약 적재
02Modeldbt SQL 기반 모델 정의·변환·메타데이터 관리
03Pipeline태스크 의존성 기반 실행·상태 확인·실패 지점 재실행
04Quality테스트 결과와 실제 위반 데이터 확인
05Analytics데이터 마트에서 데이터셋·대시보드까지 연결
03
FeaturesWhat it does

Core Features

01 · COLLECT

데이터 수집

HTTP API, CSV, JSON Lines 데이터를 미리 확인한 뒤 원천 데이터로 등록합니다. 수동 실행과 예약 수집을 지원합니다.

02 · MODEL

데이터 모델

연결된 dbt 프로젝트의 모델 SQL, 설명, 컬럼, 테스트를 화면에서 조회하고 수정합니다.

03 · LINEAGE

데이터 계보

모델과 컬럼의 상·하류 관계를 확인하고, 변경 시 영향을 받는 대상도 함께 보여줍니다.

04 · PIPELINE

파이프라인

태스크 간 의존성에 따라 실행 순서를 구성하고 수동·예약·이벤트 실행을 관리합니다. 실패한 지점부터 재실행할 수 있습니다.

05 · QUALITY

데이터 품질

필수값, 중복, 허용값, 참조 무결성, 범위 규칙을 검사합니다. 실패한 테스트는 실제 위반 데이터까지 확인할 수 있습니다.

06 · ANALYTICS

데이터 분석

데이터 마트를 Superset 데이터셋·대시보드와 연결해 조회합니다. 대시보드에서 사용한 데이터의 원천까지 추적할 수 있습니다.

04. Architecture

Data Mates와 dbt, Airflow, DuckLake, Superset의 연결 구조입니다. 화살표는 실제 호출이나 작업을 시작하는 방향을 나타냅니다.

ApplicationFastAPI · Web UI · Metadata

dbt 프로젝트, 계보, 파이프라인 설정, 실행 이력을 웹 화면에서 관리합니다.

OrchestrationAirflow · dbt · DuckDB

Airflow가 작업 순서와 스케줄을 관리하고 dbt-duckdb가 모델을 실행합니다.

Data & AnalyticsDuckLake · PostgreSQL · MinIO · Superset

테이블 메타데이터는 PostgreSQL에, Parquet 파일은 MinIO에 저장합니다. DuckDB와 Superset에서 같은 데이터를 조회합니다.

다이어그램에서 노드를 선택하거나 수집·변환·조회 경로를 선택하면 관련 연결만 강조해 볼 수 있습니다.

Data Mates 런타임 아키텍처 화살표는 호출·실행 시작 방향이며, 데이터 이동 방향은 각 연결 라벨에 표시합니다. DuckLake 웨어하우스 Data Mates 서버 프로세스 Superset 프로세스 외부 데이터 소스 · CSV · JSON · XML · REST API · Architecture component 외부 데이터 소스 CSV · JSON · XML · REST API 수집기 · DuckDB · 원본 보존 · Architecture component 수집기 DuckDB · 원본 보존 Airflow · 생성 DAG datamates_* · Architecture component · :8080 Airflow 생성 DAG datamates_* :8080 dbt 프로젝트 · 모델 SSoT · manifest.json · Architecture component dbt 프로젝트 모델 SSoT · manifest.json DuckDB · dbt-duckdb · 변환 엔진 · Architecture component DuckDB dbt-duckdb · 변환 엔진 브라우저 UI · ui/ 정적 SPA · Architecture component 브라우저 UI ui/ 정적 SPA Data Mates 서버 · FastAPI · /api/* · Data Mates 서버 프로세스 · :8000 Data Mates 서버 FastAPI · /api/* :8000 DuckDB · warehouse.py · 미리보기 · Data Mates 서버 프로세스 DuckDB warehouse.py · 미리보기 DuckLake 카탈로그 · PostgreSQL 메타데이터 · DuckLake 웨어하우스 · :5432 DuckLake 카탈로그 PostgreSQL 메타데이터 :5432 플랫폼 메타DB · PostgreSQL · 운영 메타데이터 · Architecture component 플랫폼 메타DB PostgreSQL · 운영 메타데이터 Superset · 차트 · 대시보드 · Superset 프로세스 Superset 차트 · 대시보드 DuckDB · gunicorn 워커마다 1개 · Superset 프로세스 DuckDB gunicorn 워커마다 1개 MinIO · Parquet on S3 · DuckLake 웨어하우스 · :9000 MinIO Parquet on S3 :9000 HTTPS /api/* 미리보기 조회 직접 ATTACH · 읽기 전용 파이프라인 정의 저장 /superset/* 프록시 · 데이터셋 동기화 DAG 생성 · 실행 트리거 모델 SQL 쓰기 · manifest 읽기 수집 태스크 dbt build 원본 조회 (GET) dbt-duckdb raw 테이블 커밋 DuckLake 테이블 쓰기 테이블 위치 참조 차트 질의 같은 DuckLake 카탈로그 ATTACH

처리 엔진을 DuckDB로 통일

  • • 브라우저는 /api/*만 호출하고 Superset 내부 주소는 노출하지 않음
  • • dbt 변환, 원천 적재, 미리보기에 모두 DuckDB 사용
  • • 서버와 Superset이 같은 DuckLake 카탈로그를 조회

변환 로직은 dbt에서 관리

  • • 수집한 값은 가공하지 않고 raw 네임스페이스에 저장
  • • 정제와 타입 변환은 dbt 모델에서 처리
  • • 모델 의존성을 읽어 Airflow DAG 자동 생성

메타데이터는 PostgreSQL에 저장

  • • 플랫폼 메타스토어와 DuckLake 카탈로그를 PostgreSQL로 이전
  • • Airflow 메타DB도 PostgreSQL을 사용해 병렬 실행 지원
  • • 실제 테이블 데이터는 MinIO에 Parquet으로 저장
05
EngineeringDesign choices

Design Decisions

01dbt as source

변환 로직은 dbt를 기준으로 관리합니다

수집 단계에서는 원본만 저장하고 정제, 타입 변환, 테스트는 dbt 모델에서 처리합니다. 모델 SQL, 테스트, 계보의 기준을 dbt로 일원화하기 위한 선택입니다.

Trade-off · 수집 직후에는 모든 값이 문자열이며, 모델 실행 시 실제 타입으로 변환됩니다.
02DuckDB

처리 엔진을 DuckDB로 통일했습니다

모델 변환, 원천 적재, 데이터 미리보기, Superset 조회에 DuckDB를 공통으로 사용합니다. 처리 엔진을 하나로 맞춰 구축과 운영 복잡도를 낮췄습니다.

Trade-off · 대규모 분산 처리보다 개인·소규모 팀의 구축과 운영 편의성에 초점을 둔 구성입니다.
03Airflow

태스크 의존성으로 실행 순서를 관리합니다

파이프라인을 저장하면 태스크 의존성을 기반으로 Airflow DAG를 생성합니다. 서로 독립적인 작업은 병렬로 실행하고, 실패한 작업부터 다시 실행할 수 있습니다.

Trade-off · 파이프라인을 수정할 때마다 DAG와 실행 설정도 함께 갱신해야 합니다.
04PostgreSQL

SQLite 대신 PostgreSQL을 선택했습니다

플랫폼 설정, Airflow 실행 정보, DuckLake 카탈로그를 PostgreSQL에 저장합니다. SQLite에서 발생하던 동시 쓰기 충돌과 순차 실행 제약을 해소했습니다.

Trade-off · PostgreSQL 컨테이너를 추가로 운영해야 하지만 여러 작업을 동시에 실행할 수 있습니다.
06
StackTechnologies used

Tech Stack

WebPython 3.11 · FastAPI · Vanilla JS

웹 UI와 API 서버.

Modelingdbt Core · dbt-duckdb · DuckDB

SQL 모델, 테스트, 변환 실행.

PipelineApache Airflow 3.2.2

DAG 생성, 스케줄, 실행 상태 관리.

StorageDuckLake · PostgreSQL · MinIO

카탈로그 메타데이터와 Parquet 파일 저장.

AnalyticsDuckDB · Apache Superset 5.0.0

데이터 미리보기와 대시보드.

RuntimeDocker Compose · PostgreSQL 16 · Redis

Docker Compose 기반 로컬 실행 환경.

07
ScopeCurrent limits

Project Scope

현재 지원

  • 개인·소규모 팀을 위한 로컬 구축 환경
  • 기존 dbt 프로젝트 연결
  • 원천 데이터 보존 후 dbt에서 타입 변환
  • 애플리케이션·Airflow·Superset 통합 이미지 배포

현재 미지원

  • 로그인과 역할별 권한 관리
  • 조직·사용자별 데이터 분리
  • 여러 사용자의 동시 협업
  • 대규모 분산 처리