DAG(Directed Acyclic Graph) 와 DG(Directed Graph)



  • Category : AIRFLOW
  • Tag : AI


DAG와 DG는 각각 다른 개념으로, 주로 컴퓨터 과학과 데이터 처리에서 사용됩니다. 다음은 두 용어의 차이점입니다:

1. DAG (Directed Acyclic Graph)

정의

DAG는 “Directed Acyclic Graph”의 약자로, 방향성을 가지며 순환이 없는 그래프입니다. 즉, 방향을 가진 간선들이 존재하지만, 어떤 노드로부터 시작해서 자기 자신으로 돌아오는 경로(사이클)는 존재하지 않는 구조입니다.

특징

  • 유향성 (Directed): 모든 간선이 특정한 방향을 가집니다.
  • 비순환성 (Acyclic): 그래프 내에서 사이클(순환 경로)이 존재하지 않습니다.
  • 구조: 노드와 에지(간선)로 구성됩니다. 각 에지는 방향을 가지며 한 노드에서 다른 노드로 연결됩니다.

용도

  • 작업 스케줄링: 작업 간의 의존성을 나타내고, 작업 순서를 결정하는 데 사용됩니다.
  • 버전 관리 시스템: Git과 같은 버전 관리 시스템에서 커밋의 히스토리를 나타냅니다.
  • 데이터 처리: Apache Airflow와 같은 워크플로우 관리 시스템에서 작업의 의존성을 관리하는 데 사용됩니다.

2. DG (Directed Graph)

정의

DG는 “Directed Graph”의 약자로, 방향성을 가지는 그래프입니다. DAG와 달리 DG는 순환(사이클)이 있을 수 있습니다. 즉, 방향을 가진 간선들이 존재하며, 어떤 노드로부터 시작해서 다시 자기 자신으로 돌아오는 경로가 존재할 수 있습니다.

특징

  • 유향성 (Directed): 모든 간선이 특정한 방향을 가집니다.
  • 순환 가능성: 그래프 내에서 사이클이 존재할 수 있습니다.
  • 구조: 노드와 에지로 구성되며, 각 에지는 방향을 가지며 한 노드에서 다른 노드로 연결됩니다.

용도

  • 네트워크 모델링: 네트워크에서의 데이터 흐름, 인터넷 트래픽 등을 나타내는 데 사용됩니다.
  • 상태 기계: 유한 상태 기계의 상태 전이를 나타내는 데 사용됩니다.
  • 기타: 여러 응용 분야에서 유향 그래프 구조를 사용하는 모델링과 분석.

요약

  • DAG (Directed Acyclic Graph): 유향성이 있으며, 사이클이 없는 그래프.
    • 사용 사례: 작업 스케줄링, 버전 관리 시스템, 데이터 처리 워크플로우.
  • DG (Directed Graph): 유향성이 있으며, 사이클이 있을 수 있는 그래프.
    • 사용 사례: 네트워크 모델링, 상태 기계, 일반적인 유향 그래프 모델링.

이 두 개념은 그래프 이론에서 중요한 구조로, 각기 다른 용도와 특성을 가지고 있습니다.


Apache Airflow는 워크플로우 관리 플랫폼으로, 복잡한 데이터 파이프라인을 작성하고, 예약하고, 모니터링하는 데 사용됩니다. 데이터 엔지니어링, 데이터 과학, DevOps 작업 등에서 주로 사용되며, 다양한 작업 간의 의존성을 관리하고 자동화하는 데 유용합니다. 다음은 Airflow에 대한 주요 개념과 기능입니다.

주요 개념

DAG (Directed Acyclic Graph)

  • 정의: 작업(Task)과 작업 간의 의존 관계를 나타내는 구조입니다. 순환이 없는 방향 그래프로 구성됩니다.
  • 역할: DAG는 워크플로우를 정의하며, 각 작업의 실행 순서를 나타냅니다.

Task

  • 정의: DAG 내의 개별 작업입니다.
  • 역할: 실제로 실행되는 작업 단위로, 데이터 처리, 데이터 이동, 데이터 분석 등 다양한 작업을 수행합니다.

Operator

  • 정의: 특정 작업을 수행하는 데 사용되는 템플릿입니다.
  • 종류:
    • PythonOperator: Python 함수를 실행합니다.
    • BashOperator: Bash 명령어를 실행합니다.
    • DummyOperator: 아무 작업도 수행하지 않는 placeholder입니다.
    • BranchPythonOperator: 조건에 따라 다른 경로를 선택하는 작업입니다.
    • 기타 다양한 프리빌트 Operator들이 있습니다.

Scheduler

  • 역할: DAG와 Task의 실행 일정을 관리합니다. 정의된 일정에 따라 DAG를 트리거하고, 의존 관계에 따라 Task를 실행합니다.

Executor

  • 역할: Task를 실제로 실행하는 백엔드입니다. 여러 종류의 Executor가 있으며, 예를 들어 LocalExecutor, CeleryExecutor, KubernetesExecutor 등이 있습니다.

Web UI

  • 역할: DAG와 Task의 상태를 모니터링하고, 관리할 수 있는 웹 기반의 사용자 인터페이스입니다. 실행 기록, 로그, 상태 등을 확인할 수 있습니다.

주요 기능

1. 워크플로우 작성

DAG를 Python 코드로 작성하여 작업 간의 의존 관계를 명확하게 정의할 수 있습니다. 다양한 Operator를 사용하여 데이터 처리, 데이터 이동, 외부 서비스 호출 등 다양한 작업을 수행할 수 있습니다.

2. 스케줄링

크론 표현식이나 예약 간격을 사용하여 DAG의 실행 일정을 정의할 수 있습니다. 다양한 예약 옵션을 통해 정기적이고 반복적인 작업을 자동화할 수 있습니다.

3. 모니터링 및 알림

Web UI를 통해 DAG와 Task의 실행 상태를 모니터링할 수 있습니다. Task 실패 시 이메일, Slack 등으로 알림을 설정할 수 있습니다.

4. 확장성

CeleryExecutor, KubernetesExecutor 등을 사용하여 확장 가능한 분산 환경에서 작업을 실행할 수 있습니다. 플러그인 시스템을 통해 사용자 정의 기능을 추가할 수 있습니다.

5. 다양한 통합

AWS, GCP, Azure 등 다양한 클라우드 서비스와 통합할 수 있습니다. 데이터베이스, 파일 시스템, 메시지 큐 등 다양한 외부 시스템과 쉽게 연동할 수 있습니다. 사용 예시


Share this post