[데이터 엔지니어링 데브코스] TIL 36일차 - 데이터 파이프라인과 Airflow(1)

박단이·2023년 12월 12일
0

데브코스 TIL

목록 보기
36/56

오늘 배운 것🤓

데이터 파이프라인

데이터 파이프라인이란?

  • 데이터를 소스로부터 목적지로 복사하는 작업
  • Data Worflow 혹은 DAG(Airflow에서) 혹은 ETL이라고 한다.
  • 보통 코딩(Python)과 SQL로 이루어진다.

ETL vs ELT

  • ETL
    • Extract, Transform, Load
    • 데이터를 외부에서 내부로 가져오는 프로세스
    • 보통 타부서에서 요구하면 엔지니어들이 수행한다.
  • ELT
    • 내부의 데이터를 조작해서 조금 더 추상화하거나 요약 및 정리한 새로운 데이터를 만드는 프로세스
    • 보통 데이터 분석가들이 수행한다.

데이터 파이프라인 종류

  1. Raw Data ETL Jobs
    • E : 외부와 내부 데이터 소스에서 데이터를 읽고
    • T : 적당한 데이터 포맷 변환 후(필요없다면 X)
    • L : DW에 적재
    • 보통 엔지니어가 진행한다.
  2. Summary/Report Jobs(ELT)
    • DW/DL에서 데이터를 읽어 변환 후 다시 DW/DL에 저장
    • Raw Data를 읽어서 일정의 리포트 형태아 summary 형태의 테이블을 다시 만듬
    • 보통 분석가가 진행하고 Analytics Engineering이라고도 한다.
    • 특수한 경우 A/B 테스트 결과를 분석하는데 데이터 파이프라인으로 구성하기도 함(이때는 엔지니어가)
    • 데이터 엔지니어 관점에서는 데이터 분석가들이 편하게 할 수 있도록 환경을 만들어 주는 것이 관건
  3. Production Data Jobs
    • 파이프라인의 목적지가 바깥으로 가는 경우
    • DW로부터 데이터를 요약하여 Production DB에 사용하는 경우
      • summary정보가 production 환경에서 성능 이유로 필요한 경우(실시간 집계가 부하를 일으키는 경우)
      • ML 모델에서 필요한 feature들을 미리 계산하는 경우
    • Target Storage
      • NoSQL
      • OLTP
      • Cache
      • 검색 엔진

데이터 파이프라인을 만들 때 고려해야할 점

  • 현실을 직시할 것
    • 버그를 무서워하지 말자!
    • 데이터 소스 상의 이유(포맷 등)
    • 파이프라인 사이의 의존도에 대한 이해도가 부족한 경우
  • 데이터 파이프라인의 수가 늘어나면 유지보수 비용이 급격히 늘어난다.
    • 데이터 소스 간의 의존도가 생기면 더 복잡

데이터 파이프라인 Best Practices

  1. Full Refresh
    • 데이터 소스에서 DW로 복사할 때 가능하면 통째로 복사
  2. 멱등성(Idempotency) 보장
    • 동일한 입력 데이터로 데이터 파이프라인을 다수 실행해도 최종 테이블의 내용이 동일해야 한다.
  3. Backfill이 쉬어야 한다.
    • 실패한 데이터 파이프라인의 재실행이 쉬워야 한다.
  4. 입력과 출력 문서화
    • 데이터 리니지(데이터 사이의 의존성) 문제 최소화
  5. 주기적으로 필요없는 데이터 삭제
  6. 사고마다 사고 리포트(post-mortem) 쓰기
    • 동일/비슷한 사고가 또 발생하는 것을 방지
  7. 중요 데이터 파이프라인의 input/output 체크
    • 데이터 대상 unit test 필요

Airflow

Airflow 란?

  • Python으로 작성된 데이터 파이프라인 관리/작성 framework
    • Airbnb에서 시작된 Apache 오픈소스 프로젝트
  • 데이터 파이프라인 스케줄링 지원
    • 정해진 시간에 실행
    • 하나의 ETL 실행 후 다음 ETL 실행
  • 웹 UI 제공
    • 실행 상황, log를 통함 디버깅, backfill등 다양한 기능 제공
  • 데이터 파이프라인을 쉽게 작성하도록 함
    • 데이터 소스와 DW를 쉽게 통합해주는 모듈 제공
  • Airflow에서 데이터 파이프라인을 DAG라고 부름

DAG

  • Directed Acyclic Graph의 줄임말
  • 하나의 DAG는 하나 이상의 Task로 구성된다.
  • task는 Airflow의 Operator로 만들어진다.
    • Airflow에서 다양한 종유릐 오퍼레이터를 제공한다.
    • 이미 만들어진 오퍼레이터를 선택하거나 직접 작성할 수 있다.

Airflow 구성

  1. 웹 서버(Webserver)
    • python flask로 구성
    • 스케줄러와 DAG의 실행 상황을 시각화
  2. 스케줄러(Scheduler)
    • DAG들을 워커들에게 배정하는 역할
  3. 워커(Worker)
    • 실제로 DAG를 실행하는 역할을 수행
    • 서버의 CPU 수 만큼 워커가 돌 수 있다.
  4. 메타데이터베이스
    • sqlite가 기본이나 성능상의 문제로 MySQL, PostgreSQL을 별도로 설치하여 사용한다.
    • 스케줄러와 각 DAG의 실행결과를 저장한다.
  5. 큐(Queue)
    • 다수 서버 구성인 경우 사용한다.(단일일 때도 사용함)
    • executor의 종류에 따라서 사용 여부가 결정된다.

Airflow 장점 vs 단점

장점단점
- 데이터 파이프라인을 세밀하게 제어- 배우기가 쉽지 않다.
- 다양한 데이터 소스와 DW 지원- 상대적으로 개발 환경을 구성하기 쉽지 않다.
- Backfill이 쉽다.- 직접 운영이 쉽지 않으므로 다수의 서버를 구성할 경우 cloud 사용을 추천

느낀 점😊

이번 수업에서는 데이터 파이프라인과 airflow의 기본적인 이론과 함께 python으로 간단한 파이프라인을 만들어봤다.
가장 기대하는 수업 중 하나였기 때문에 다른 수업에 비해 조금더 집중이 잘되는 느낌?!ㅎㅎ

profile
데이터 엔지니어를 꿈꾸는 주니어 입니다!

0개의 댓글