본문 바로가기
대외활동/DateEngineering Zoom Camp

[DE-Zoomcamp] 2. Kestra로 워크플로 오케스트레이션 실습하기

by 드인 2026. 1. 31.

이 글은 Data Engineering Zoomcamp의 Module 2: Workflow Orchestration 를 바탕으로
워크플로 오케스트레이션 개념과 Kestra 실습 내용을 정리한 글입니다.


목차

  1. Workflow Orchestration 개요
  2. ETL vs ELT 개념 비교
  3. Kestra 소개
  4. Kestra 로컬 환경 구성
  5. Workflow 실행
  6. ETL 파이프라인 구성
  7. 스케줄링과 Backfill
  8. 참고 자료 / 출처

1. Workflow Orchestration 개요

데이터 엔지니어링에서 워크플로 오케스트레이션
여러 데이터 작업을 순서·의존성·시간 기준으로 관리하는 역할을 합니다.

일반적인 데이터 파이프라인은 다음과 같은 단계로 구성됩니다.

  • 데이터 수집 (Extract)
  • 데이터 변환 (Transform)
  • 데이터 적재 (Load)

이 작업들을 단순히 스크립트로 실행할 경우 다음과 같은 문제가 발생합니다.

  • 중간 단계 실패 시 어디서 멈췄는지 알기 어렵다
  • 재실행, 재처리(backfill)가 번거롭다
  • 스케줄 관리와 모니터링이 힘들다

이 문제를 해결하기 위해 워크플로 오케스트레이션 도구가 필요합니다.


2. ETL vs ELT 개념 비교

ETL (Extract → Transform → Load)

  • 데이터를 먼저 추출
  • 중간 처리 서버에서 변환
  • 변환된 데이터를 최종 저장소에 적재

특징

  • 전통적인 데이터 웨어하우스 방식
  • 변환 로직이 파이프라인에 강하게 결합
  • 처리 서버 부하가 큼

ELT (Extract → Load → Transform)

  • 데이터를 먼저 그대로 적재
  • 데이터 웨어하우스 내부에서 변환

특징

  • 클라우드 DW(BigQuery, Snowflake)에 적합
  • 원본 데이터 보존
  • 변환 로직 분리(dbt 등)

ETL vs ELT 비교 정리

구분 ETL ELT
변환 위치 외부 처리 서버 데이터 웨어하우스 내부
원본 데이터 변환 후 저장 그대로 저장
확장성 제한적 높음
클라우드 친화성 낮음 높음

해당 학습 자료에서는 ETL 구조로 먼저 실습한 후, ELT 구조를 전제로 워크플로 오케스트레이션 + 데이터 웨어하우스 설계를 진행합니다.


3. Kestra 소개

Zoomcamp Module 2에서는 오케스트레이션 도구로 Kestra를 사용합니다.

Kestra의 특징은 다음과 같습니다.

  • YAML 기반 워크플로 정의
  • UI 제공 (실행 상태, 로그 확인 가능)
  • Cron 기반 스케줄링
  • Docker 환경에서 쉽게 실행 가능

4. Kestra 로컬 환경 구성

1) 레포지토리 클론

git clone https://github.com/DE-zoomcamp-kr/de-zoomcamp-yhs.git
cd de-zoomcamp-yhs/02-workflow-orchestration

2) Docker Compose 실행

docker compose up -d

컨테이너가 정상적으로 올라가면 Kestra UI에 접속할 수 있습니다.

  • 기본 주소: http://localhost:8080

UI에서는 워크플로 목록, 실행 이력, 로그를 확인할 수 있습니다.


5. Workflow 실행

Kestra에서 워크플로는 YAML 파일로 정의됩니다.

기본적인 워크플로 구조는 다음과 같습니다.

  • workflow id
  • namespace
  • task 목록

예시 구조

id: hello_world
namespace: zoomcamp

tasks:
  - id: print_message
    type: io.kestra.core.tasks.log.Log
    message: "Hello, Kestra!"

 

해당 워크플로를 실행하면 Kestra가 task를 순서대로 실행하고, 결과 로그를 UI에 기록합니다.


6. ETL 파이프라인 구성

이제 본격적으로 ETL 파이프라인을 워크플로로 구성합니다.

ETL 흐름

  1. 데이터 다운로드 (Extract)
  2. 데이터 전처리 (Transform)
  3. 데이터베이스 또는 스토리지 적재 (Load)

Kestra에서는 각 단계를 task 단위로 정의합니다.

ETL Workflow 예시

id: etl_pipeline
namespace: zoomcamp

tasks:
  - id: extract
    type: io.kestra.core.tasks.scripts.Bash
    command: |
      python extract_data.py

  - id: transform
    type: io.kestra.core.tasks.scripts.Bash
    command: |
      python transform_data.py

  - id: load
    type: io.kestra.core.tasks.scripts.Bash
    command: |
      python load_data.py

각 task는 앞 task가 성공해야 다음 task가 실행됩니다.
중간에 실패하면 워크플로는 중단되고 실패 상태로 기록됩니다.


7. 스케줄링과 Backfill

스케줄링

Kestra는 Cron 기반 스케줄을 지원합니다.

triggers:
  - id: daily_schedule
    type: schedule
    cron: "0 2 * * *"
    timezone: "UTC"

위 설정은 매일 새벽 2시(UTC) 에 워크플로를 자동 실행합니다.

Backfill 개념

Backfill은 과거 데이터에 대해 워크플로를 다시 실행하는 것을 의미합니다.

  • 하루치 데이터 적재 실패
  • 특정 기간 데이터 재처리 필요

와 같은 상황에서 

Kestra UI에서는 특정 실행 날짜를 지정해 과거 워크플로를 다시 실행할 수 있습니다.


8. 참고자료 / 출처