Airflow ์กฐ๊ธˆ ๋งŒ์ง€๋‹ค ๋ณด๋ฉด, ๋Œ€๋ถ€๋ถ„ ์ด๋ ‡๊ฒŒ ์„œ๋น„์Šค๊ฐ€ ๋‚˜๋‰˜์–ด ๋Œ์•„๊ฐ€๋Š” ๊ฑธ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • airflow-init
  • airflow-scheduler
  • airflow-webserver

“์ด๊ฑธ ๊ตณ์ด ์™œ ์ด๋ ‡๊ฒŒ ์ชผ๊ฐœ?” ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ์š”.
์ด๊ฒŒ ๋ฐ”๋กœ ์‹ค์ „ ์šด์˜ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

1๏ธโƒฃ airflow-init โ€” ์ค€๋น„ ๋‹ด๋‹น

๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ airflow-db-migrate ๋‚˜ airflow-bootstrap ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
๋”ฑ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.

ํ•˜๋Š” ์ผ:

  • airflow db upgrade โ†’ DB ์Šคํ‚ค๋งˆ ์ตœ์‹ ํ™” (DB ๊ตฌ์กฐ ์ตœ์‹ ์œผ๋กœ ๋งž์ถฐ์คŒ)
  • ์ตœ์ดˆ admin ์œ ์ € ์ƒ์„ฑ

์ค‘์š” ํฌ์ธํŠธ:
์ด๊ฑด ๊ณ„์† ๋„๋Š” ์„œ๋น„์Šค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•  ์ผ ๋‹ค ํ•˜๋ฉด ๋ฐ”๋กœ ์ข…๋ฃŒ (exit code 0).

์™œ ๋”ฐ๋กœ ์žˆ์–ด์•ผ ํ•˜๋ƒ๋ฉด?

  • DB ์ค€๋น„๊ฐ€ ์•ˆ ๋œ ์ƒํƒœ์—์„œ๋Š” webserver๋‚˜ scheduler๊ฐ€ ์•„์˜ˆ ๋ชป ์˜ฌ๋ผ์˜ด.
  • ๊ฒฐ๊ตญ DB ์ค€๋น„๊ฐ€ Airflow ์ „์ฒด ์‹คํ–‰์˜ ์ฒซ ๋‹จ์ถ”๋ผ์„œ.

๐Ÿ‘‰ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ:
“Airflow๊ฐ€ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋Œ๊ธฐ ์ „์— ์ค€๋น„ ์ž‘์—…๋งŒ ํ•ด์ฃผ๋Š” ์—ญํ• ”

2๏ธโƒฃ airflow-webserver โ€” ์‚ฌ๋žŒ์ด ๋ณด๋Š” ํ™”๋ฉด ๋‹ด๋‹น

Airflow Web UI๋ฅผ ๋„์šฐ๋Š” HTTP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. (gunicorn ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ์•„๊ฐ)

ํ•˜๋Š” ์ผ:

  • Web UI
  • API ์ œ๊ณต
  • ๊ถŒํ•œ ๊ด€๋ฆฌ (RBAC)
  • Trigger ๊ด€๋ฆฌ
  • Log Viewer ๋“ฑ โ†’ ์œ ์ €๊ฐ€ ํด๋ฆญํ•˜๊ณ  ๋ณด๋Š” ๊ฑด ๋‹ค ์—ฌ๊ธฐ์„œ ๋‹ด๋‹น
  • ๊ธฐ๋ณธ ํฌํŠธ: 8080

๐Ÿ‘‰ ํ•œ๋งˆ๋””๋กœ:
“์šฐ๋ฆฌ๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ์—ด๊ณ  ๋“ค์–ด๊ฐ€๋Š” ๊ทธ ํ™”๋ฉด ๋ณด์—ฌ์ฃผ๋Š” ๋‹ด๋‹น”

3๏ธโƒฃ airflow-scheduler โ€” ์—”์ง„ ๋‹ด๋‹น

์ด๊ฒŒ ์‚ฌ์‹ค Airflow์˜ ์‹ฌ์žฅ์ž…๋‹ˆ๋‹ค.
DAG๋“ค ์Šค์บ”ํ•˜๊ณ  task ์Šค์ผ€์ค„ ์žก๊ณ , ์‹คํ–‰์‹œํ‚ค๊ณ โ€ฆ ๋‹ค ์ด๋†ˆ์ด ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋Š” ์ผ:

  • DAG ์ฃผ๊ธฐ์ ์œผ๋กœ ์Šค์บ”
  • Task ์ƒํƒœ ๊ด€๋ฆฌ
  • ์˜์กด์„ฑ ํ™•์ธ
  • ์‹คํ–‰ํ•  task๋ฅผ queue์— ์˜ฌ๋ฆผ
  • Workerํ•œํ…Œ ์‹คํ–‰ ์š”์ฒญ

๐Ÿ‘‰ ํ•œ๋งˆ๋””๋กœ:
“Task๋ฅผ ์–ด๋–ป๊ฒŒ ์–ธ์ œ ์‹คํ–‰ํ• ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ์ง„์งœ ๊ด€๋ฆฌ์ž”

๐Ÿ”ฅ ํ•ต์‹ฌ ์ •๋ฆฌ

  • webserver๋ž‘ scheduler๋Š” ์„œ๋กœ ๋…๋ฆฝ์ 
  • webserver๋Š” ๊ทธ๋ƒฅ ํ™”๋ฉด๋งŒ ๋‹ด๋‹น โ†’ ์ง์ ‘ task ์•ˆ ๋Œ๋ฆผ
  • scheduler๊ฐ€ task๋ฅผ ํ์— ์˜ฌ๋ฆฌ๊ณ  โ†’ executor๊ฐ€ ์‹คํ–‰

๐Ÿ”ง ๊ทธ๋Ÿผ ์™œ ์ด๋ ‡๊ฒŒ ๊ตณ์ด ๋‚˜๋ˆŒ๊นŒ?

์ด์œ  ์„ค๋ช…
์•ˆ์ •์„ฑ ํ•œ ๋†ˆ์ด ์ฃฝ์–ด๋„ ๋‚˜๋จธ์ง€๋Š” ๊ณ„์† ๋Œ์•„๊ฐ
์Šค์ผ€์ผ๋ง ํ•„์š”ํ•  ๋•Œ scheduler๋‚˜ webserver ๋”ฐ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ
์šด์˜ํ‘œ์ค€ ์‚ฐ์—… ํ‘œ์ค€ Airflow Helm chart๋„ ์ด๋ ‡๊ฒŒ ๋ถ„๋ฆฌ

๐Ÿ“Œ ์ถ”๊ฐ€๋กœ ์•Œ์•„๋‘๋ฉด ์ข‹์€ ์ 

  • Airflow 2.x ๋ถ€ํ„ฐ๋Š” ์›๋ž˜ ์ด multi-service ๊ตฌ์กฐ๊ฐ€ ๊ธฐ๋ณธ์ž„.
  • Docker-compose๋กœ ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ ์„œ ์—ฐ์Šตํ•˜๋Š” ๊ฒŒ ์‹ค๋ฌด๋ž‘ ๊ฑฐ์˜ ๋˜‘๊ฐ™์Œ.

๐Ÿ”ฅ ํ•œ ์ค„๋กœ ์š”์•ฝํ•˜๋ฉด:

  • airflow-init โ†’ ์ค€๋น„
  • airflow-scheduler โ†’ ์‹คํ–‰
  • airflow-webserver โ†’ ํ™”๋ฉด

๋ณด๋„ˆ์Šค: Executor ์ข…๋ฅ˜

  • ์ง€๊ธˆ์€ LocalExecutor๋ผ scheduler๊ฐ€ task๋ฅผ ํ์— ์˜ฌ๋ฆฌ๋ฉด โ†’ ์ž๊ธฐ ์•ˆ์—์„œ ์ง์ ‘ ์‹คํ–‰๊นŒ์ง€ ํ•ด๋ฒ„๋ฆผ.
  • ์ฆ‰, task ์‹คํ–‰์„ ์œ„ํ•ด ๋ณ„๋„ worker ํ”„๋กœ์„ธ์Šค ๋„์šฐ์ง€ ์•Š์Œ

Airflow์—์„œ executor๋Š” ๊ฐœ๋…์ ์ธ ์ปดํฌ๋„ŒํŠธ๋‹ค.
๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ณ„๋„์˜ ์„œ๋น„์Šค๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ญ์ƒ ์žˆ๋Š” ๊ฑด ์•„๋‹ˆ๋‹ค.

  • scheduler๋Š” task๋ฅผ ๋ณด๊ณ  “์•„ ์ด์ œ ์ด๊ฑฐ ์‹คํ–‰ํ•  ์ฐจ๋ก€๋‹ค!” ๋ผ๊ณ  ๊ฒฐ์ •
  • ์‹คํ–‰ ์ž์ฒด๋Š” executor๊ฐ€ ๋‹ด๋‹น
  • ์–ด๋–ค executor๋ฅผ ์“ฐ๋А๋ƒ์— ๋”ฐ๋ผ ์‹คํ–‰ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์ง„๋‹ค:
Executor ์ข…๋ฅ˜ ์‹คํ–‰ ๋ฐฉ์‹ ๋ณ„๋„ ํ”„๋กœ์„ธ์Šค?
LocalExecutor scheduler ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ๋ฐ”๋กœ ์‹คํ–‰ โŒ (๋ณ„๋„ ํ”„๋กœ์„ธ์Šค ์—†์Œ)
SequentialExecutor ๊ฑฐ์˜ ํ…Œ์ŠคํŠธ์šฉ, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ โŒ
CeleryExecutor worker ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋”ฐ๋กœ ์žˆ์Œ โœ… (worker ํ”„๋กœ์„ธ์Šค ํ•„์š”)
KubernetesExecutor Kubernetes pod ์ƒ์„ฑํ•ด์„œ ์‹คํ–‰ โœ… (pod๋กœ ๋”ฐ๋กœ ์‹คํ–‰)