- **ETL(Extract, Transform, Load)**๋ ๋ฐ์ดํฐ๋ฅผ ์์ค์์ ์ถ์ถ โ ๊ฐ๊ณต โ ๋ชฉ์ ์ง์ ์ ์ฌํ๋ 3๋จ๊ณ ์ฒ๋ฆฌ ๊ณผ์
- ํฉ์ด์ง ์๋ณธ์ ๋ถ์ ๊ฐ๋ฅํ ํํ๋ก ์ ์ ํด ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค/๋งํธ์ ์ฑ์ ๋ฃ๋ ์์
- Airflow๋ ์ด ETL ๊ณผ์ ์ ์ฝ๋(Python)๋ก ์ ์ํ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ ์คํํ๋ ์ค์ผ์คํธ๋ ์ด์
๋๊ตฌ
ํด๋น ๊ฐ๋
์ด ํ์ํ ์ด์
- ์ด์ DB ์๋ณธ์ ๋ถ์์ ๋ฐ๋ก ์ฐ๊ธฐ ์ด๋ ต๋ค(์ค์ฒฉ ๊ตฌ์กฐ, ์ ๊ทํ, ์ฝ๋๊ฐ ๋ฑ) โ ๊ฐ๊ณต ๋จ๊ณ๊ฐ ํ์
- ๋ถ์ ์ซ์๋ฅผ ๋งค๋ฒ ์์ผ๋ก ๋ง๋ค๋ฉด ์ ์๊ฐ ํ๋ค๋ฆฐ๋ค โ ETL๋ก ๊ณ ์ ยท์๋ํํ๋ฉด ๊ฐ์ ๋ก์ง์ด ๋งค์ผ ๋ฐ๋ณต๋๋ค
- ๋ฐ์ดํฐ ๋งํธ์ โ1๊ฐ์ ์ ์ ๋ ํ
์ด๋ธโ์ ๊ฒฐ๊ตญ ETL ์ก์ ์ฐ์ถ๋ฌผ์ด๋ค
3๋จ๊ณ๊ฐ ํ๋ ์ผ
- Extract(์ถ์ถ): ๊ด๊ณํ DBยทMongoDBยทํ์ผยทAPIยท์น ๋ฑ ํ๋ ์ด์์ ์์ค์์ ๋ฐ์ดํฐ ์์ง, ๊ธฐ๋ํ ๋๋ฉ์ธ ๊ฐ์ธ์ง ๊ฒ์ฆ
- Transform(๊ฐ๊ณต): ์ปฌ๋ผ ์ ํ/ํํฐ, ์ฝ๋๊ฐ ๋ณํ(
1โM), ํ์ ์ปฌ๋ผ ๊ณ์ฐ, ์ฌ๋ฌ ์์ค ์กฐ์ธ, ์ค๋ณต ์ ๊ฑฐ, ์ง๊ณ(roll-up/summary)
- Load(์ ์ฌ): ์ต์ข
๋ชฉ์ ์ง(์จ์ดํ์ฐ์ค/๋งํธ)์ ์ ์ฅ. ๊ธฐ์กด์ ๋ฎ์ด์ฐ๊ฑฐ๋(overwrite) ์ด๋ ฅ์ ๋์ (append)
ETL vs ELT
- ETL: ์ธ๋ถ์์ ๊ฐ๊ณตํ ๋ค ์ ์ฌ (์ ํต์ ๋ฐฉ์)
- ELT: ์ผ๋จ ์ ์ฌํ๊ณ DW ์์์ SQL๋ก ๊ฐ๊ณต โ RedshiftยทSnowflakeยทBigQuery ๊ฐ์ ํด๋ผ์ฐ๋ DW์์ ์ ํธ
- ํต์ฌ ์ฐจ์ด๋ โ๊ฐ๊ณต์ ์ด๋์ ํ๋๋โ์ด๊ณ , ๊ฐ๋ ฅํ ๋ถ์ DW๊ฐ ์์ผ๋ฉด ELT๊ฐ ์ ๋ฆฌํ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค
Airflow๋ก ETL ๊ตฌํํ๊ธฐ
- DAG(Directed Acyclic Graph): ์ํฌํ๋ก ์ ์ฒด๋ฅผ ๋
ธ๋(task)์ ์์กด์ฑ(edge)์ผ๋ก ๊ทธ๋ฆฐ ํ๋ฆ๋. โ๋ฌด์์, ์ด๋ค ์์๋กโ๋ฅผ ์ ์
- Task: DAG ์์ ๊ฐ๋ณ ์์
๋จ์
- Operator: ๊ทธ ์์
์ ์ด๋ป๊ฒ ํ ์ง (Python ์คํ, SQL ์ฟผ๋ฆฌ, ์ธ๋ถ ํธ๋ฆฌ๊ฑฐ ๋ฑ)
- Scheduler: ์ ํด์ง ์ฃผ๊ธฐ(๋งค์๊ฐ/๋งค์ผ)๋ ์ด๋ฒคํธ๋ก ์คํ์ ๊ด๋ฆฌ
- ์ค์ ์ XML์ด ์๋ โ์ฝ๋๋ก(configuration as code)โ ์์ฑ โ ์ํฌํ๋ก ํ๋๊ฐ Python ํ์ผ ํ๋์ ๋ด๊ธด๋ค
# ๋งค์ผ 1๋ฒ, ์๋ณธ ์ด๋ฒคํธ๋ฅผ ์ง๊ณํด ๋งํธ ํ
์ด๋ธ์ ๊ฐฑ์ ํ๋ DAG (๊ฐ๋
์์)
with DAG("daily_conversion_mart", schedule="@daily") as dag:
extract = PythonOperator(task_id="extract", python_callable=pull_raw_events)
transform = PythonOperator(task_id="transform", python_callable=aggregate_by_day)
load = PostgresOperator(task_id="load", sql="INSERT INTO mart_daily_conversion ...")
extract >> transform >> load # ์์กด์ฑ: ์ถ์ถ โ ๊ฐ๊ณต โ ์ ์ฌ
๋ฐ์ดํฐ ๋งํธ ๋งฅ๋ฝ์์์ ์ญํ
- ๊ณต๊ณต๋ฐ์ดํฐยท์ด์ DB(์์ค) โ Airflow๊ฐ ETL์ ์ค์ผ์ค๋ง โ Redshift์ ๋งํธ ํ
์ด๋ธ โ Redash ๋์๋ณด๋
- ์ฆ Airflow๋ ๋ฐ์ดํฐ ๋งํธ๋ฅผ โํญ์ ์ต์ ์ํ๋ก ์ ์งํด ์ฃผ๋ ์์งโ ์ญํ ์ด๋ค
์ฐธ๊ณ ๋ฌธ์