Skip to main content
이 문서는 데이터 엔지니어링 섹션의 일부입니다.

왜 태스크 의존성 관리가 중요한가?

단일 노트북 실행의 한계

초기 데이터 파이프라인은 흔히 하나의 노트북에 수집 → 변환 → 적재 → 알림 로직을 모두 몰아넣는 방식으로 작성됩니다. 이 접근 방식은 다음과 같은 문제를 초래합니다.

DAG 기반 오케스트레이션의 필요성

DAG(Directed Acyclic Graph) 기반 오케스트레이션은 각 단계를 독립 태스크로 분리하고, 태스크 간 의존 관계를 방향성 있는 그래프로 정의합니다. Databricks LakeFlow Jobs는 이 DAG를 시각적으로 편집하고, 실행 상태를 실시간으로 모니터링할 수 있습니다. 핵심 이점:
  • 부분 재실행: 실패한 태스크부터 재시작 가능합니다
  • 병렬 실행: 의존성 없는 태스크는 동시에 실행됩니다
  • 세밀한 컴퓨트 제어: 태스크별로 클러스터 크기를 다르게 설정할 수 있습니다
  • 조건부 분기: 이전 태스크 결과에 따라 실행 경로를 동적으로 결정합니다
참고: Databricks Jobs 공식 문서

태스크 유형

Databricks Job은 다양한 유형의 태스크를 지원합니다. 각 태스크 유형은 특정 워크로드에 최적화되어 있습니다.

태스크 유형 요약

주요 태스크 유형 상세

Notebook 태스크 는 가장 범용적인 유형입니다. Python, SQL, Scala 노트북을 모두 지원하며, dbutils.widgets로 파라미터를 전달받을 수 있습니다. 개발 및 프로토타이핑 단계에서 가장 많이 활용됩니다. Python Script 태스크 는 Git 또는 Workspace에 저장된 .py 파일을 실행합니다. 노트북보다 버전 관리가 명확하고, CI/CD 파이프라인과 통합하기 용이합니다. 프로덕션 환경에 권장됩니다. SQL 태스크 는 SQL Warehouse에서 실행되며, Unity Catalog 테이블에 대한 DDL/DML 작업이나 데이터 품질 검사에 적합합니다. Serverless SQL Warehouse와 함께 사용하면 비용 효율이 높습니다. Pipeline (DLT) 태스크 는 Delta Live Tables 파이프라인을 Job 내에서 트리거합니다. 수집 완료 후 변환 파이프라인을 순차 실행하는 패턴에 유용합니다. dbt 태스크 는 dbt Cloud 또는 dbt Core 프로젝트와 통합됩니다. dbt run, dbt test, dbt snapshot 명령을 Job 태스크로 실행할 수 있습니다.
참고: 태스크 유형별 공식 문서

의존성 설정

태스크 간 의존성을 설정하면 DAG(Directed Acyclic Graph) 형태로 실행 순서가 결정됩니다. Databricks는 세 가지 핵심 의존성 패턴을 지원합니다.

의존성 패턴

복잡한 태스크 DAG 예제

위 DAG에서:
  • ingest_ordersingest_products병렬 로 실행됩니다
  • 두 수집 태스크가 모두 완료되면 transform_orders가 실행됩니다 (팬인)
  • validate_data 결과에 따라 조건부 분기 가 발생합니다
  • build_gold_tables 완료 후 대시보드 갱신과 알림이 병렬 로 실행됩니다 (팬아웃)

If/Else 조건부 태스크

If/Else 태스크 는 이전 태스크의 결과값 또는 Job 파라미터를 기반으로 실행 경로를 동적으로 분기합니다. 예를 들어 데이터 검증 태스크가 반환한 행 수가 임계값 이하이면 경고 경로로, 초과하면 정상 경로로 분기할 수 있습니다.
참고: 조건부 태스크 공식 문서

태스크 값 전달 (Task Values)

태스크 간 데이터를 전달하려면 dbutils.jobs.taskValues API를 사용합니다. 이 메커니즘으로 한 태스크의 출력을 후속 태스크의 입력으로 활용할 수 있습니다.
주의: 태스크 값의 최대 크기는 48KB 입니다. 대용량 데이터는 Delta 테이블 또는 외부 스토리지를 경유하십시오.

태스크 값 설정 (upstream 태스크)

태스크 값 읽기 (downstream 태스크)

Asset Bundle YAML에서 태스크 값 참조

참고: Task values 공식 문서

실패 처리

재시도 설정

각 태스크에 재시도 횟수와 대기 시간을 설정하면 일시적인 장애(네트워크 오류, 클러스터 시작 지연 등)를 자동으로 복구할 수 있습니다.

태스크 실패 시 전체 Job 동작

기본적으로 하나의 태스크가 실패하면 해당 태스크에 의존하는 후속 태스크들은 실행되지 않습니다. 그러나 의존성이 없는 병렬 태스크는 계속 실행됩니다. run_if 속성으로 후속 태스크의 실행 조건을 명시적으로 제어할 수 있습니다:

조건부 실행으로 에러 핸들링

참고: 재시도 및 타임아웃 공식 문서