9주차 월요일, 41일차 Today I Learned
데이터 파이프라인 (1)
: 데이터 파이프라인 (ETL), Airflow 소개
✏️ 학습 내용
1. 데이터 파이프라인 (ETL)
- 데이터 파이프라인
- ETL (Extract, Transform, Load)
- Data Workflow
- DAG;Directed Acyclic Graph (in Airflow)
데이터 파이프라인이라고 불리는 ETL이란, 데이터를 데이터 웨어하우스 외부에서 내부로 가져오는 프로세스를 뜻한다. Airflow에서는 DAG라고 불리고 있다. 즉, 데이터 파이프라인이란 데이터를 소스로부터 목적지로 복사하는 작업이다. 이 작업은 보통 파이썬 혹은 스칼라와 같은 코딩, 또는 SQL을 통해 이루어지고, 대부분 목적지는 데이터 웨어하우스가 된다.
- Raw data ETL Jobs : 외부와 내부 데이터 소스에서 데이터를 읽어서 적장한 데이터 포맷으로 변환하여 데이터 웨어하우스에 로드한다.
- Summary/Report Jobs : DW (혹은 DL)로부터 데이터를 읽어 다시 DW에 쓰는 ETL로
- Production Data Jobs : DW로부터 데이터를 읽어 스토리지로 쓰는 ETL
보통 데이터 파이프라인을 만들 때, 문제 없이 동작하고 관리가 쉬울 것이라고 생각하지만, 버그나 데이터 소스상의 이슈, 데이터 파이프라인들간의 의존도의 이해도 부족과 같은 이유로 실패하게 된다. 또한 데이터 파이프라인의 수가 늘어나면 비용이 기하급수적으로 늘어나서 관리도 어렵다.
데이터 파이프라인을 만들 때 고려할 점은 다음과 같다.
- Incremental update 보다는 Full Refresh (가능하면 데이터가 작을 경우 매번 통채로 복사해서 테이블 만들기)
- 멱등성 (Idempotency) 보장하기 : 데이터 파이프라인이 다수 실행되어도 데이터 소스의 정보와 데이터 웨어하우스의 정보가 동일해야 한다는 것
- Backill (과거 데이터를 다시 채우는 과정)이 쉬워야 함
- 데이터 파이프라인의 입/출력을 명확히 하고 문서화
- 주기적으로 쓸모없는 데이터들 삭제
- 사고 시 마다 사고 리포트 (post-mortem) 작성
- 중요한 데이터 파이프라인의 입/출력 체크 : 데이터 대상 유닛 테스트
번외로 ELT란, 데이터 웨어하우스 내부 데이터를 조작해서 새로운 데이터를 만드는 프로세스로, 보통 데이터 분석가들이 많이 수행한다. 이 경우 데이터 레이크 위에서 이러한 작업들이 벌어지며, 해당 프로세스 전용 기술로 dbt가 가장 유명하다. DBT (Data Build Tool)은 Analytics Engineering에 속한다고 할 수 있다.
데이터 레이크 & 데이터 웨어하우스
데이터 레이크 Data Lake는 구조화 데이터와 비구조화 데이터를 모두 담는다. 보존 기한이 없는 모든 데이터를 원래 형태로 보존하는 스토리지에 가까우며, 보통 데이터 웨어하우스보다 몇 배는 더 큰 스토리지를 뜻한다. raw data가 담긴다.
데이터 웨어하우스 Data Warehouse는 보존 기한이 있는 구조화된 데이터를 저장하고 처리하는 스토리지이다. 보통 BI 툴들은 데이터 웨어하우스를 백엔드로 사용한다.
데이터 소스에서 데이터를 S3와 같은 데이터 레이크에 적재한 다음, 스파크나 아테나를 통해서 데이터 변환을 하여, 데이터 웨어하우스 (데이터 마트)에 적재를 한다. 이 때 다양한 데이터 파이프라인의 스케줄러와 관리 툴이 필요한데, 이 때 사용하는 것이 Airflow이다.
2. Airflow 소개
Airflow는 파이썬으로 작성된 데이터 파이프라인 (ETL) 프레임웍이다. 에어비앤비에서 시작한 아파치 오픈소스 프로젝트이며, 데이터 파이프라인 스케줄링 (정해진 시간에 ETL을 실행하거나, 한 ETL 실행 후 다음 ETL을 실행하는 것)과 웹 UI를 제공하기도 한다. 즉, 데이터 파이프라인 (ETL)을 쉽게 만들 수 있도록 해준다. 다양한 데이터 소스와 데이터 웨어하우스를 쉽게 통합해주는 모듈을 제공하고, 데이터 파이프라인 관리 관련 다양한 기능을 제공해준다.
- Airflow에서는 데이터 파이프라인을 DAG라고 부르며, 하나의 DAG는 하나 이상의 Task로 구성된다. 태스크는 Airflow의 오퍼레이터로 만들어진다.
- 2020년 12월에 Airflow 2.0이 릴리스되었다.
Airflow는 총 5개의 컴포넌트로 구성된다.
- 웹 서버 (스케줄러와 DAG의 실행 상황을 시각화)
- 스케줄러 (DAG들을 워커들에게 배정하는 역할 수행)
- 워커 (Task에 해당하는 코드를 실행해주는 역할)
- 메타 데이터 데이터베이스 (기록 용도)
- 큐 (다수 서버 구성인 경우에만 사용됨)
Airflow 스케일링 방법은 2가지이다. 더 좋은 사양의 서버를 사용하는 스케일 업, 서버 추가를 하는 스케일 아웃이 존재한다.
Airflow 구조는 다수의 서버로 이루어져 있다.
Airflow는 데이터 파이프라인을 세밀하게 제어 할 수 있고, 백필이 쉬우며, 다양한 데이터 소스와 데이터 웨어하우스를 지원한다는 장점이 있다. 반면 배우기가 쉽지 않고, 상대적으로 개발환경을 구성하기 쉽지 않으며, 직접 운영하는 것이 쉽지 않다. 클라우드 버전 사용이 선호된다.
☁️ 소감
데이터 파이프라인, ETL에 대해서 그리고 그 때 필요한 Airflow에 대해서 배웠다. 아직 Airflow에서 사용하는 용어가 생소하지만 좀 더 공부하다 보면 익숙해질 것이다. 다만 개인 컴퓨터 사양이 좋지 않아서 걱정된다.