Dagster는 데이터 및 AI 플랫폼 구축을 위한 현대적인 데이터 오케스트레이션 도구로, 복잡한 데이터 파이프라인과 워크플로우를 Python 코드로 관리하고 조율합니다. 🎼
데이터 파이프라인은 다양한 소스에서 데이터를 가져와 변환하고, 데이터 웨어하우스와 같은 저장소에 결과를 저장하여 분석, 시각화 또는 머신러닝 모델을 위한 피처를 제공하는 일련의 작업입니다. ⚙️
DAG (Directed Acyclic Graph)는 Dagster의 이름 유래이자 핵심 개념으로, 데이터 파이프라인 내 작업들의 순서와 의존성을 방향성 비순환 그래프 형태로 시각화하여 표현합니다. 📈
Dagster는 Airflow의 작업 중심(Task-centric) 방식과 달리, 데이터베이스 테이블, 파일, 머신러닝 모델 등 영구 저장소에 존재하는 '자산(Asset)'을 중심으로 파이프라인을 정의하고 관리하는 '자산 중심(Asset-centric)' 오케스트레이션 도구입니다. 💎
@dagster.asset 데코레이터를 사용하여 Python 함수로 자산을 정의하며, 자산의 함수를 실행하고 그 결과를 영구 저장소에 저장하는 과정을 '구체화(Materialization)'라고 합니다. 🛠️
자산 간의 상류(upstream) 및 하류(downstream) 의존성을 명시적으로 정의할 수 있어, 작업 실행 순서를 정확하게 제어합니다. 🔗
Definitions 객체는 프로젝트 내 모든 자산, 작업, 스케줄 등을 포함하는 최상위 구성 요소로, 이 객체에 포함된 내용만이 Dagster UI에 배포되고 표시됩니다. 📦
Dagster UI (dagster dev 명령어로 실행)는 웹 기반 사용자 인터페이스를 통해 자산 계보(lineage)를 시각화하고, 자산을 수동으로 구체화하며, 실행 로그를 확인하여 파이프라인 상태를 모니터링하고 문제를 진단할 수 있습니다. 🖥️
실제 데이터 파이프라인 예시로 웹에서 자동차 데이터를 다운로드하고, Polars 라이브러리를 사용하여 데이터(예: normalized_losses, price 컬럼)를 변환한 후, 로컬 파일 시스템에 CSV 파일로 저장하는 과정을 시연합니다. 🚗
Polars 라이브러리를 활용하여 CSV 파일 읽기/쓰기, 데이터 타입 캐스팅, 유효하지 않은 값 처리(예: '?'를 0 또는 null로) 등 데이터 조작 및 변환을 효율적으로 수행합니다. 📊
uv를 사용하여 Python 가상 환경을 관리하고, dagster, dagster-webserver, polars 모듈을 설치하는 개발 환경 설정 과정을 보여줍니다. 🐍
dagster project scaffold 명령어를 통해 모범 사례에 따라 Dagster 프로젝트의 기본 디렉토리 구조를 생성하여 자산 및 기타 구성 요소를 체계적으로 관리할 수 있도록 합니다. 🏗️