본문 바로가기
1. 개발/1.4. 데이터 분석

데이터 리니지(Data Lineage) - 에러 추적

by 엉짱 2026. 2. 7.
반응형

데이터 공장의 모든 배관을 완벽하게 설계하고 감시 체계까지 갖추셨지만, 역시 실무에서 가장 식은땀 나는 순간은 "분명 어제까지 잘 나오던 데이터가 오늘 왜 이 모양이지?"라는 의문이 들 때입니다.

이때 우리에게 필요한 것이 바로 데이터의 '족보'이자 '이동 경로'를 기록한 데이터 리니지(Data Lineage)입니다. 리니지가 있으면 수천 개의 테이블 중 범인을 찾는 데 며칠이 걸릴 일을 단 몇 분 만에 끝낼 수 있죠.


🧬 데이터 리니지: "데이터의 출생부터 현재까지의 기록"

데이터 리니지는 단순히 "A에서 B로 갔다"는 수준을 넘어, [소스 시스템 -> 원천 데이터 -> 가공 로직 -> 파생 테이블 -> 최종 리포트]로 이어지는 전 과정을 시각화하고 메타데이터로 관리하는 기술입니다.

1. 리니지 관리의 3가지 방식

에러를 추적하기 위해 리니지를 수집하는 방법은 크게 세 가지로 나뉩니다.

① 코드 파싱 (Parsing-based)

  • 원리: SQL 쿼리문이나 Spark 코드를 분석해서 리니지를 추출합니다. "SELECT FROM A JOIN B"라는 쿼리를 보고 'A와 B가 합쳐져서 C가 됐구나'라고 이해하는 방식입니다.
  • 장점: 실제 코드를 기반으로 하므로 매우 정확한 설계도를 그려줍니다.
  • 단점: 코드가 복잡하거나 동적 SQL을 쓰면 분석이 어렵습니다.

② 런타임 수집 (Runtime-based)

  • 원리: Spark 잡(Job)이나 Airflow 태스크가 실제로 실행될 때, 실행 엔진 내부에서 발생하는 이벤트를 가로채서 기록합니다.
  • 장점: 실제 실행된 '사실'을 기록하므로, 에러가 난 시점의 정확한 상태를 알 수 있습니다.
  • 단점: 시스템에 약간의 부하를 줄 수 있습니다.

③ 태깅 방식 (Tagging-based)

  • 원리: 데이터 자체에 '이 데이터는 1번 공정에서 만들어짐'이라는 꼬리표(Tag)를 붙여서 보냅니다.
  • 장점: 데이터와 리니지가 함께 움직이므로 추적이 확실합니다.

🔍 에러 발생 시 리니지를 활용한 '역추적' 5단계

사용자의 데이터 웨어하우스(DW)에 저장된 "상폐 임박 종목 리스트"의 수치가 이상하다고 가정해 봅시다.

1단계: 영향도 분석 (Impact Analysis)

가장 먼저 리니지 맵을 켭니다. 문제가 된 테이블을 클릭하면, 이 테이블로부터 파생된 다른 대시보드나 알람 봇이 무엇인지 한눈에 보입니다.

  • "아, 이 에러 때문에 슬랙 알람도 잘못 나갔겠구나!" 하고 피해 범위를 즉시 파악합니다.

2단계: 상류(Upstream) 추적 (Root Cause Analysis)

문제가 된 테이블의 '조상'들을 거슬러 올라갑니다.

  • DW 테이블 <- 가공 Spark Job <- 카프카 토픽 <- 원천 API
  • 리니지 맵에서 각 단계를 클릭해 보면, 특정 단계에서 데이터 건수가 갑자기 줄었거나(Volume), 스키마가 변했는지(Schema) 표시됩니다.

3단계: 버전 비교 (Version Diff)

"어제는 맞았는데 오늘은 왜 틀릴까?"를 해결하기 위해, 리니지 시스템에 저장된 '어제의 쿼리 코드''오늘의 쿼리 코드'를 비교합니다.

  • 만약 누군가 몰래 Spark 가공 로직을 수정했다면 리니지 이력에 기록이 남으므로 바로 범인(?)을 잡을 수 있습니다.

4단계: 데이터 품질 지표 결합 (Quality Overlay)

현대적인 리니지 도구(예: Monte Carlo, DataHub)는 리니지 맵 위에 '데이터 품질 점수'를 덧씌워 보여줍니다.

  • 맵 상의 '카프카 토픽' 노드가 빨간색으로 깜빡인다면, "아, 원천 데이터부터 이미 오염되어 들어왔구나!"라고 1초 만에 판단할 수 있습니다.

5단계: 자동 복구 및 알람

리니지가 잘 관리되면 에러를 고치는 것도 자동화됩니다.

  • "3번 공정에서 에러 났으니, 리니지 상 연결된 하류(Downstream) 작업들은 모두 중지하고 보고해!"라는 워크플로우를 Airflow와 연동해 짤 수 있습니다.

🛠️ 리니지 관리를 위한 '치트키' 도구들

사용자의 시스템에 바로 도입할 수 있는 정예 도구들입니다.

  1. OpenLineage: 리니지 데이터의 '표준 규격'입니다. Spark나 Airflow에 플러그인처럼 심어두면 알아서 리니지 데이터를 뱉어냅니다.
  2. Marquez: OpenLineage가 뱉은 데이터를 받아서 예쁜 그래프로 그려주고 데이터의 버전을 관리해주는 저장소입니다.
  3. DataHub (LinkedIn 개발): 단순 리니지를 넘어 데이터 카탈로그 역할까지 합니다. "이 데이터의 담당자가 누구지?"까지 알려주는 강력한 도구입니다.
  4. Great Expectations: 리니지 중간중간에 "데이터가 0보다 커야 함" 같은 검문소를 세워 품질을 보증합니다.

💡 실전 비유: "밀키트 추적 시스템"

  • 데이터: 사용자가 받은 '밀키트(완성된 데이터)'입니다.
  • 데이터 리니지: 이 밀키트에 들어간 고기는 어느 목장 출신인지, 야채는 누가 씻었는지, 소스는 어떤 레시피로 만들었는지 적힌 '생산 이력 추적 시스템'입니다.

사 먹은 밀키트에서 배탈이 났다면(에러), 사용자는 이 이력 시스템을 보고 "아, 어제 소스 공장의 배합 비율이 바뀌었네!" 혹은 "야채 씻는 단계에서 물이 오염됐네!"라고 정확히 짚어낼 수 있는 것이죠.


📊 요약: 리니지 관리 핵심 체크리스트

단계 체크 포인트 비고
수집 모든 파이프라인(Airflow, Spark)에 OpenLineage 심기 자동 수집 환경 구축
시각화 DataHub나 Marquez 연동 한눈에 보이는 족보 생성
모니터링 리니지 맵에 품질(Quality) 지표 결합 에러 지점 즉시 파악
운영 코드 변경 시 리니지 업데이트 확인 휴먼 에러 추적의 핵심

반응형