์์๋ณผ ๋ด์ฉ
- Airflow๋?
- Workflow Orchestration?
- ๊ธฐ์กด cron ๋ฐฉ์์ ํ๊ณ?
- UI, ๋ชจ๋ํฐ๋ง, ๋ณ๋ ฌ์ฒ๋ฆฌ ๋ฑ Airflow์ ํต์ฌ ์ฅ์
1. Data Engineering์ด๋ ๋ฌด์์ด๋ฉฐ, ์ ์ค์ํ๊ฐ?
ํ๋ ๊ธฐ์
์ด๋ ๊ธฐ๊ด์ ๋งค์ผ ๋ฐฉ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค.
์ด ๋ฐ์ดํฐ๋ฅผ ์ ์กฐ์งํํ์ง ์์ผ๋ฉด ๋จ์ํ ์ ์ฅ๋ง ๋๋ โ์ฃฝ์ ๋ฐ์ดํฐโ์ ๋ถ๊ณผํ๋ค. ย
์๋ฅผ ๋ค์ด ์คํธ๋ฆฌ๋ฐ ์๋น์ค๋ฅผ ๋ ์ฌ๋ ค ๋ณด์. ย
- ์ฌ์ฉ์๊ฐ ์์์ ์์ฒญํ๊ฑฐ๋ ์์ ์ ์ฌ์ํ ๋๋ง๋ค ๋ก๊ทธ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ ย
- ์ถ์ฒ ์์คํ ์ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ์ฌ์ฉ์ ๋ง์ถคํ ์ฝํ ์ธ ์ถ์ฒ์ ์์ฑ ย
- ๋์์ ๊ฒฐ์ ๋ฐ์ดํฐ์ ์ฐ๊ฒฐํด ๋งค์ถยท๊ตฌ๋ ํต๊ณ๋ฅผ ์ง๊ณ ย
- ์ด๋ฐ ๊ฒฐ๊ณผ๋ ๋์๋ณด๋๋ก ์๊ฐํ๋์ด ๊ฒฝ์์ง๊ณผ ์ด์ํ์ ์ค์๊ฐ ์์ฌ๊ฒฐ์ ์ ํ์ฉ๋๋ค ย
์ด ํ๋ฆ์ ๋จ์ผ ์์ ์ผ๋ก ๋๋์ง ์๊ณ , โ๋ก๊ทธ ์์ง โ ์ ์ โ ์ง๊ณ โ ์ถ์ฒ ๋ชจ๋ธ ์ ๋ฐ์ดํธ โ ์๊ฐํโ ์ฒ๋ผ ์ฌ๋ฌ ๋จ๊ณ๊ฐ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ย
์ด์ฒ๋ผ ๋ฐ์ดํฐ ์์ง๋์ด๋ง์ ๊ธฐ์
๋ด์ธ๋ถ์์ ๋ฐ์ํ๋ ๋๋์ ์์ฒ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๊ฐ๊ณตยท์ ์ ํ์ฌ ๋ถ์ ๊ฐ๋ฅํ ํํ๋ก ๋ณํํ๋ ๊ธฐ์ ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋งํ๋ค
์ค๋๋ ๋ค์ํ ๋ถ์ผ์์ ๋ฐ์ดํฐ๊ฐ ํต์ฌ ์์ฐ์ผ๋ก ํ์ฉ๋๋ฉด์ ๋ฐ์ดํฐ ์์ง๋์ด๋ง์ ์ค์์ฑ์ด ์ ์ฐจ ์ปค์ง๊ณ ์๋ค
๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋์ด, ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์๋ํ, ์ฌ๋ฌ ์์ค ๊ฐ์ ๋ฐ์ดํฐ ์ฐ๋ ๋ฑ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ขฐ์ฑ ์๊ฒ ํ์ฉํ ๊ธฐ๋ฐ์ ๊ตฌ์ถํ๋ ๊ฒ์ด ๋ฐ์ดํฐ ์์ง๋์ด๋ง์ ํต์ฌ ์ญํ ์ด๋ค
๋ฐ์ดํฐ ์์ง๋์ด๋ง์ ์ฃผ์ ์์
์๋ ETL ํ์ดํ๋ผ์ธ์ ์ค๊ณยท๊ตฌ์ถยท์๋ํยท์ ์ง๋ณด์๊ฐ ํฌํจ๋๋ค
์๋ฅผ ๋ค์ด, ๋ค์ํ ์ด์ ์์คํ
๊ณผ ๋ก๊ทธ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ , ์ ์ ๋ฐ ๋ณํ ๊ณผ์ ์ ๊ฑฐ์ณ ์ผ๊ด์ฑ ์๋ ํํ๋ก ์ ์ฌํ๋ ๊ณผ์ ์ ์ฒด๊ณํํ๋ค
์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค๋ ๋ฐ์ดํฐ ๋ ์ดํฌ๋ฅผ ๊ตฌ์ถํ๊ณ , ์กฐ์ง ์ ๋ฐ์ ๋ฐ์ดํฐ ๋ถ์๊ณผ ์๊ฐํ, ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ๋ง์ ํ์ฉํ ์ ์๋๋ก ๋ฐ์ดํฐ์ ํ์ง๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ค
์ด๋ฌํ ์ธํ๋ผ๋ ๋ฐ์ดํฐ ์ฌ์ด์ธํฐ์คํธ์ ๋ถ์๊ฐ๋ค์ด ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํํ ๋ถ์๊ณผ ์์ธก์ ์ํํ ์ ์๊ฒ ํจ์ผ๋ก์จ, ๊ถ๊ทน์ ์ผ๋ก ๋น์ฆ๋์ค ์์ฌ๊ฒฐ์ ์ ๊ธฐ์ฌํ๋ ์ญํ ์ ํ๊ฒ ๋๋ค
์์ฝํ๋ฉด, ๋ฐ์ดํฐ ์์ง๋์ด๋ง์ ๋ฐฉ๋ํ ์์ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์๋ฏธํ ์ ๋ณด๋ก ๋ฐ๊พธ๋ ๋ชจ๋ ๊ณผ์ ์ ํฌ๊ดํ๋ฉฐ, ๋ณต์กํ ๋ฐ์ดํฐ ํ๊ฒฝ์์ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ค๊ณ์ ์๋ํ๋ฅผ ํตํด ๋ฐ์ดํฐ ํ์ง ๊ด๋ฆฌ, ์ค์๊ฐ ์ฒ๋ฆฌ, ์์คํ ๊ฐ ํตํฉ ๋ฑ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ถ์ผ์ด๋ค
2. Airflow๋?
Airflow์ ํ์์ฑ
์ด์ฐฝ๊ธฐ์๋ ํ์ดํ๋ผ์ธ์ ๋จ์ํ cron ์ค์ผ์ค๋ฌ + ์คํฌ๋ฆฝํธ๋ก ์ฒ๋ฆฌํ์ง๋ง ๋ฐ์ดํฐ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ๋ณต์กํด์ง๋ฉด์ ํ๊ณ๊ฐ ๋๋ฌ๋ฌ๋ค
- ์์กด์ฑ ๊ด๋ฆฌ ๋ถ์ฌ: ์ด๋ค ์์ ์ด ๋๋์ผ ๋ค์์ด ์คํ๋๋์ง ํํ ์ด๋ ค์ ย
- ์ฅ์ ์ฒ๋ฆฌ ๋ถ์กฑ: ํ ๋ฒ ์คํจํ๋ฉด ์ ์ฒด ํ์ดํ๋ผ์ธ์ด ์ค๋จ ย
- ๋ชจ๋ํฐ๋ง ํ๊ณ: ์คํ ์ฌ๋ถ ์ธ์๋ ์ํ ์ถ์ ์ด ์ด๋ ค์ ย
- ํ์ฅ์ฑ ์ ์ฝ: ์ฌ๋ฌ ์๋ฒ์์ ์๋ฐฑ~์์ฒ ๊ฐ ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์ ย
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด Workflow Orchestration ๋๊ตฌ์ด๊ณ ๊ทธ์ค ๋ํ์ ์ธ ๊ฒ์ด ๋ฐ๋ก Apache Airflow๋ค. ย
Airflow๋?
Apache Airflow๋ ์ํฌํ๋ก์ฐ(์์ ํ๋ฆ)๋ฅผ ์ฝ๋๋ก ์์ฑํ์ฌ ๊ด๋ฆฌํ๊ณ ์ค์ผ์ค๋งํ ์ ์๋ ์คํ ์์ค ํ๋ซํผ์ผ๋ก ์ผ๋ จ์ ์์ ๋ค์ DAG(Directed Acyclic Graph, ๋ฐฉํฅ์ฑ ๋น์ํ ๊ทธ๋ํ) ํํ๋ก ์ ์ํ๊ณ , ์ ์๋ ์ํฌํ๋ก์ฐ๋ฅผ ์ ํด์ง ์ผ์ ์ ๋ฐ๋ผ ์๋์ผ๋ก ์คํํ๋ฉฐ, ์คํ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํด์ฃผ๋ ๋๊ตฌ์ด๋ค Airflow์์๋ ๋ชจ๋ ์ํฌํ๋ก์ฐ๋ฅผ ํ์ด์ฌ์ผ๋ก ์ฝ๋๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์, ๋ณต์กํ ์์ ํ๋ฆ๋ ํ๋ก๊ทธ๋จ ์ฝ๋๋ก ์ ์ฐํ๊ฒ ์ ์ํ๊ณ ์ ์ดํ ์ ์๋ค๋ ์ ์ด ํน์ง์ด๋ค
Airflow๋ ๋ฐ์ดํฐ ์์ง๋์ด๋ง ๋ถ์ผ์์ ํนํ ๊ฐ๊ด๋ฐ๋ ๋๊ตฌ๋ก, ๋ค์ํ ์์คํ ์ ๊ฑธ์น ์์ ๋ค์ orchestrationํ๋ ์ญํ ์ ํ๋ค
Airflow ์์ฒด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ ์ฅํ์ง๋ ์์ง๋ง, ์ฌ์ฉ์๊ฐ ์ ์ํ ์ผ์ ๊ณผ ์์กด ๊ด๊ณ์ ๋ฐ๋ผ ์ธ๋ถ ์์คํ
์์ ์คํ๋๋ ์์
๋ค์ ์ฐ๊ฒฐํ๊ณ ์ ์ด ํ๋ค
์๋ฅผ ๋ค์ด Spark๋ Hadoop์์ ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฌํ๋ ์ผ๋ จ์ ๊ณผ์ ์ Airflow๋ฅผ ์ฌ์ฉํด์ ๊ฐ ๋จ๊ณ๋ฅผ ํ์คํฌ๋ก ์ ์ํ๊ณ DAG๋ก ์ฎ์ด ํ๊บผ๋ฒ์ ๊ด๋ฆฌํ ์ ์๋ค
Airflow์ ์ค์ผ์ค๋ฌ๋ ์ง์ ๋ ์๊ฐ์ด๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ํ์คํฌ๋ค์ ์๋์ผ๋ก ์คํํ๊ณ , ์ฌ์ ์ ์๋ ์์กด์ฑ์ ๊ณ ๋ คํ์ฌ ์ฌ๋ฐ๋ฅธ ์์๋ก ์์ ์ด ์ด๋ฃจ์ด์ง๋๋ก ๋ณด์ฅํ๋ค ๋ํ Airflow๋ metadata DB, Scheduler, Executor, ์น ์๋ฒ(UI) ๋ฑ์ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋์ด ์๋ํ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ค์์ ์์ ์ ์์ ์ ์ผ๋ก ์ค์ผ์ค๋งํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๋ถ์ฐ ์ํคํ ์ฒ๋ฅผ ์ ๊ณตํ๋ค
Airflow์ ์ฅ์
- ์ง๊ด์ DAG ๊ด๋ฆฌ: ์์กด์ฑ์ ์ฝ๋์ ๊ทธ๋ํ๋ก ๋์์ ํํ ย
- ์น UI ์ ๊ณต: ์คํ ์ํ, ๋ก๊ทธ, ๊ทธ๋ํ๋ฅผ ํ๋์ ํ์ธ ๊ฐ๋ฅ ย
- ์๋ฌ ํธ๋ค๋ง: ์คํจ ์ ์๋ ์ฌ์๋ ๋ฐ ์๋ฆผ ์ฐ๋ (Slack, Email ๋ฑ) ย
- ํ์ฅ์ฑ: Celery, KubernetesExecutor ๋ฑ์ผ๋ก ๋๊ท๋ชจ ๋ถ์ฐ ์คํ ์ง์ ย
- ์ฝ๋ ๊ธฐ๋ฐ ๊ด๋ฆฌ: ๋ชจ๋ ํ์ดํ๋ผ์ธ์ Python์ผ๋ก ์์ฑ โ ๋ฒ์ ๊ด๋ฆฌ ์ฉ์ด