What Exactly is a DAG?

데이터 엔지니어링에서 친숙한 두가지 용어가 있는데 다음과 같다:

  • Data Pipeline: 애널리스트/마케터/비즈니스 중심의 경우
  • DAG: 엔지니어

두 용어는 모두 기본적으로 동일한 메커니즘을 반영한다.

용어만 볼 때 Data Pipeline 은 매우 간단하다. 일반적 (예: 배관공사) 인 의미 외 볼 수 없는 프로세스는 무엇인지 알아보면 다음과 같다. 데이터는 말 그대로 한쪽에서 시작하여 다른쪽으로 나오는 단일 튜브 모양이 아니라 시간동안 다른 데이터와 분리되어 있으며 고속 데이터는 실행되는 서버에 많은 스트레스를 줄 수 있다.

1. So what exactly is a DAG and what does it tell us that the term “pipeline” cannot?

DAG 의 문자만 해석하면 다음과 같다:

Directed Acyclic Graph

Graph 란 데이터 엔지니어링의 그래프는 노드를 연결하는 노드(점)와 꼭지점(선)의 유한 집합을 의미한다. DAG 의 경우 노드는 각각의 데이터 처리 작업을 나타낸다.

  • ‘Node A’ 는 API 에서 데이터를 가지고 올 수 있는 코드일 수 있다.
  • ‘Node B’ 는 데이터를 익명화하고 모든 IP 주소를 삭제하는 코드일 수 있다.
  • ‘Node D’ 는 중복 레코드 ID 가 없음을 확인하는 코드일 수 있다.
  • ‘Node E’ 는 해당 데이터를 데이터베이스에 넣을 수 있다.
  • ‘Node F’ 는 새로운 테이블에서 SQL 쿼리를 실행하여 대시보드를 업데이트 할 수 있다.

           +-------------------+
           |                   |
           |                   V
+-+       +-+       +-+       +-+       +-+
|A| ----> |B| ----> |C| ----> |E| ----> |F|
+-+       +-+       +-+       +-+       +-+
           |                   Λ
           V                   |
+-+       +-+                  |
|G| ----> |D| -----------------+
+-+       +-+

Pipeline 처럼 보인다. Task 는 분기하여 새로운 input 과 함께 다시 연결된다. 그럼 왜 “Data Pipeline” 이라는 말이 적용되는가? 그것은 Directed, Acyclic 이 들어오는 것이다.

위 그래프에서 각 꼭지점 (선) 은 다른 노드를 연결하는 특정 방향 (화살표로 표시) 을 가진다. 데이터는 꼭지점의 방향을 따라서 이동한다. 즉, 데이터가 A 에서 B 로 갈 수 있지만 B 에서 A 로 이동할 수 없음을 의미한다. 그래프가 아무리 복잡해도 이 원리는 적용된다. 이전 노드 다음에 오는 노드는 “upstream” 노드 및 “downstream” 노드라고 한다.

데이터가 한 방향으로 이동하는 것 외에도 노드는 절대로 자기 참조가 되지 않는다. 즉, 무한루프를 만들 수 없다. 따라서 데이터는 A 에서 B 에서, C/D/E 로 갈 수 있지만 일단 데이터가 그래프 아래로 이동하면 후속 프로세스로 A/B/C/D/E 로 돌아갈 수 없다. 새로운 소스 G 에서 오는 데이터는 노드 중 하나로 이어질 수 있지만 후속 프로세스 노드로 전달될 수 없다.


+----+              +----+
|    | -----------> |    |
+----+              +----+
   Λ                   |
   |      +----+       |
   +----- |    | <-----+
          +----+

  1. Directed: 여러 task 가 있는 경우 각 task 에 하나 이상의 upstream (이전단계) 또는 downstream (다음단계) 이 있어야 한다.
  2. Acyclic: 어떤 task 도 자신을 참조하는 데이터를 작성할 수 없다. 즉, 무한루프는 존재하지 않는다.
  3. Graph: 모든 task 는 명확한 구조로 배치되어 있으며 개별 프로세스와 task 에 대한 명확한 관계가 있다.