Batch Schedular
Last updated
Last updated
history ๊ด๋ฆฌ ๋ถ๊ฐ๋ฅ
์ค์๋ก ํด๋น ์ค์ผ์ฅด๋ง ์ ์ฒด๋ฅผ ๋ ๋ฆด ์ ์์
๋ฐฐ์น ์ํ ์คํจ์ ๋ฐฐ์น ๋ชจ๋ํฐ๋ง ๊ด๋ฆฌ ๋์๋ ์ค๋ฅ ๋ชจ๋ํฐ๋ง ๋ก์ง์ ๋ณ๋๋ก ์ถ๊ฐํ์ง ์์ผ๋ฉด ์๊ธฐ ์ด๋ ค์
์ด์๋ฐฐ์น๋ฅผ ์๋ก ๋ค๋ฉด, crontab์ ์ค์ผ์ฅด๋ง ๊ด๋ฆฌ๊ฐ ์ ๋๋ก ๋์ง ์์(์ฃผ์ ์ฒ๋ฆฌ๋์ด์๋ job๋ค ๋ค์)
crontab์ ๊ฒฝ์ฐ ๊ฐ ์๋ฒ๋ง๋ค ๋ฐ๋ก ์ค์ผ์ค๋ง์ ๊ด๋ฆฌํด์ผ ํ๋ฉฐ ๋ฌด์๋ณด๋ค ํด๋ฌ์คํฐ๋ง ๊ธฐ๋ฅ์ด ์ ๊ณต๋์ง ์์ ์ถ์ฒํ์ง ์๋๋ค.
Quartz๋ ์คํ์์ค Job Scheduling ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์์ ํ ์๋ฐ๋ก ๊ฐ๋ฐ๋์ด ์๋ฐ ํ๊ฒฝ, ๊ท๋ชจ์ ์๊ด์์ด ์ฌ์ฉํ ์ ์๋ค. Quartz๋ ์์ฒ ๊ฐ์ ์์ ๋ ์คํ ๊ฐ๋ฅํ๋ฉฐ, ๊ฐ๋จํ interval ํ์์ด๋ Cron ํํ์์ผ๋ก ๋ณต์กํ ์ค์ผ์ฅด๋ง๋ ์ง์ํ๋ค.
DB ๊ธฐ๋ฐ์ผ๋ก ์ค์ผ์ค๋ฌ ๊ฐ์ Clustering ๊ธฐ๋ฅ์ ์ ๊ณต
์์คํ Fail-over์ Random ๋ฐฉ์์ ๋ก๋ ๋ถ์ฐ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ค
In-memory Job Scheduler๋ ์ ๊ณต
์ฌ๋ฌ ๊ธฐ๋ณธ Plug-in์ ์ ๊ณต
ShutdownHookPlugin
- JVM ์ข
๋ฃ ์ด๋ฒคํธ๋ฅผ ์บ์นํด์ ์ค์ผ์ค๋ฌ์๊ฒ ์ข
๋ฃ๋ฅผ ์๋ ค์ค
LoggingJobHistoryPlugin
- Job ์คํ์ ๋ํ ๋ก๊ทธ๋ฅผ ๋จ๊ฒจ ๋๋ฒ๊น
ํ ๋ ์ฌ์ฉ
๋ฐฐ์น ์ํ์ค ์ด์๊ฐ ์๊ฒผ์ ๋ ์ฝ๊ฒ ํ์ ํ ์ ์๋ ๊ตฌ์กฐ๋ก ์ค๊ณ๋์ด์์(๋ก๊ทธ ๊ด๋ฆฌ/๋ฐฉ์ด๋ก์ง์ ์ข์)
Clustering ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๋จ์ํ random ๋ฐฉ์์ด๋ผ์ ์๋ฒฝํ Cluster ๊ฐ์ ๋ก๋ ๋ถ์ฐ์ ์๋จ.
์ด๋๋ฏผ UI์ ์ ๊ณตํ์ง ์์.
์ค์ผ์ค๋ง ์คํ์ ๋ํ History๋ ๋ณด๊ดํ์ง ์์.
Fixed Delay ํ์ ์ ๋ณด์ฅํ์ง ์์ผ๋ฏ๋ก ์ถ๊ฐ ์์ ์ด ํ์
์ค์ผ์ฅด๋ง์ ๋ณ๊ฒฝํ๋ ค๋ฉด ์จ๋ํํฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ๋ฐฐํฌ๊ฐ ํ์ํจ
๋ชจ๋ ๊ฒ์ ์ปค์คํ ํด์ผํด์ ์๊ฐ ์์๊ฐ ๋ง์ด๋ ๋ค.
groovy ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด์์.
๋ฌด๋ฃ CIํด๋ก, ๋ฐฐ์น ์ค์ผ์ฅด๋ง์ผ๋ก ๋ง์ด ์ฌ์ฉ
ํ์ดํ๋ผ์ธ ์ค์ ๋ ๊ฐ๋ฅ
๋ฐฐ์น ๋น๋ ์คํจ์ ์ฌ๋ ๋ฑ์ผ๋ก ๋ฐ๋ก ์๋ฆผ ์์ฑ ๊ฐ๋ฅ
ํด๋น ๋ฐฐ์น ๋ก๊ทธ๋ ํ์ธ ๊ฐ๋ฅ
์์ ํ์คํ ๋ฆฌ ๊ด๋ฆฌ ๊ฐ๋ฅ
jenkins ์์ฒด์์ ๋ฐฐ์น ์ํ on/off ๊ฐ๋ฅ
ํด๋ฌ์คํฐ๋ง ๊ฐ๋ฅ
ํ๋ผ๋ฏธํฐํ, ์ค์ผ์ฅด๋ง, ssh ํธ๋ฆฌ๊ฑฐ ๋ฑ ์ฝ๊ฒ ๊ฐ๋ฅ
๋ชจ๋ ์ด๋ ฅ, ์ค์ ์ ๋ณด๋ค์ด ์ ๋ถ ํ์ผ๋ก ๊ด๋ฆฌ๋จ
์ค์ ์ ๋ณด/์คํ ์ด๋ ฅ/ํ์ฌ Job ์ ๋ณด๋ฑ์ด ๊ถ๊ธํ๋ฉด Jenkins ๊ฐ ์ ๊ณตํ๋ API ํน์ ์๋ฒ๋ด์ ์กด์ฌํ๋ XMLํ์ผ๋ก๋ง ํ์ธํ ์ ์์
๋ฐฑ์ &์ด์คํ๊ฐ ์ด๋ ค์
์ ๋ขฐํ ์ ์๋ ํ๋ฌ๊ทธ์ธ
๋๋ถ๋ถ์ ํ๋ฌ๊ทธ์ธ์ ๋ํด Jenkins๊ฐ ํ์คํ๊ฒ ๋ณด์ฅํ์ง ์์.
์ ํจ์ค ๋ฒ์ ์ ์ ๋๋ถ๋ถ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
์์ด๋น์ค๋น์์ ๊ฐ๋ฐํ ์ํฌํ๋ก์ฐ ์ค์ผ์ค๋ง, ๋ชจ๋ํฐ๋ง ํ๋ซํผ
๋น ๋ฐ์ดํฐ๋ ์์ง, ์ ์ , ์ ์ , ๋ถ์ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด์ ์ฌ๋ฌ๊ฐ์ง ๋จ๊ณ๋ฅผ ๊ฑฐ์น๊ฒ ๋๋๋ฐ ์ด ์์ ๋ค์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋๊ตฌ
DAG(Directed Acyclic Graph) ๊ฐ๋ ์ workflow ๋จ์๋ก ์คํ
ํ์ด์ฌ ์ฝ๋๋ก ์์ฑ
๋์ผํ task ์ํ์์๋ for๋ฌธ๊ฐ if๋ฌธ์ผ๋ก ํ์ดํ๋ผ์ธ ์ก ์คํ ๊ฐ๋ฅ
ํ๋ผ๋ฏธํฐํ๊ฐ ๋์ด์์ง์์, ์คํ์๋ง๋ค dag.py๋ฅผ ๊ณ์ ์์
ํด์ค์ผํ๋ค.
์์ดํ๋ก์ฐ ํ์ดํ๋ผ์ธ์ ๊ฐ๊ฒฐํ๊ณ ๋ช ์์ ์ด๋ฉฐ, **์ง์ ํ ํ๋ฆฟ(jinja template)**์ ์ด์ฉํ์ฌ ํ๋ผ๋ฏธํฐํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ ์๋์ผ๋ก ํ์ดํ๋ผ์ธ์ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅ
๋ฅผ ์ด์ฉํด ๋ณต์กํ workflow ๊ตฌ์ฑ์ด ์ฌ์
t1 >> [t2,t3] >> t4 >> t1
Task ๋ณ๋ ฌ ์ํ์ ์ํด์๋
์ ์ฌ์ฉ ํ์
celery executor
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ RabbitMQ๋ Redis๊ฐ ํ์
meta store๋ก mysql or postgresql ์ฌ์ฉํ์.
ํน์
Kubernetes Executor
๋ ์ฌ์ฉ ๊ฐ๋ฅ
Task๋ฅผ ์ค์ผ์ค๋ฌ๊ฐ ์คํ๊ฐ๋ฅ ์ํ๋ก ๋ณ๊ฒฝํ๋ฉด ๋ฉ์์ง ๋ธ๋ก์ปค์ ์ ๋ฌํ๋๊ฒ ์๋๋ผ Kubernetes API๋ฅผ ์ฌ์ฉํ์ฌ Airflow ์์ปค๋ฅผ pod ํํ๋ก ์คํ
๋งค Task๋ง๋ค pod๊ฐ ์์ฑ๋๋ฏ๋ก ๊ฐ๋ณ๊ณ , Worker์ ๋ํ ์ ์ง ๋ณด์๊ฐ ํ์์๋ค๋ ์ฅ์
Kubernetes๋ฅผ ํ์ฉํ์ฌ ์ง์์ ์ผ๋ก ์์์ ์ ์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ผ๋ก ์์์ ์ฌ์ฉํ ์ ์์.
์งง์ Task์๋ pod์ ์์ฑํ๋ overhead๊ฐ ์์ผ๋ฉฐ, celery executor์ ๋นํด ์๋ฃ๊ฐ ์ ๊ณ ๊ตฌ์ฑ์ด ๋ณต์กํ๋ค๋ ๋จ์
๋ณ๋ ์๋ฒ 1๊ฐ์์ ์ด์ํ ๊ฒ์ด๋ฏ๋ก ๋ง์ง ์์ ๋ณด์
JetBrains์ CI ๋๊ตฌ
ํ์ดํ๋ผ์ธ / ์ค์ผ์ค๋ง ๋ฑ Jenkins๊ฐ ์ง์ํ๋ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ๋์ผํ๊ฒ ์ง์
Jetbrains ์ ํ๊ตฐ (IntelliJ, DataGrip, Upsource ๋ฑ) ๊ณผ ํตํฉ ์ง์์ด ์ข์
Job ์๋์ ๋ํด IntelliJ์์ ์๋์ด ๋ณด์ฌ์ง๋ ๋ฑ
์ค์ ์ ๋ณด๋ค์ด DB๋ก ๊ด๋ฆฌ
๋ฐฑ์ /์ด์คํ๋ DB์ ๋ชจ๋๋จ
Teamcity๋ ์ด๋๋ ์ค์น๋งํด์ ๋ฐ๋ก DB ์ฐ๊ฒฐ๋ง ํ๋ฉด ๋๊ฐ์ Teamcity ํ๊ฒฝ์ด ๊ตฌ์ฑ
์ฌ๋ฌ๋์ ์๋ฒ๋ฅผ ์ด์ํ๋ค๊ณ ํด๋ ์ค์ผ์ค๋ง/์ค์ ๋ฑ์ ๋ํ ๊ด๋ฆฌ ์์๊ฐ ์ ํ ์์.
DB์์ ๋ค ๊ด๋ฆฌ์ค์ด๋, ๊ฐ TeamCity ์๋ฒ์ ๋ํ ๋๊ธฐํ ๊ฑฑ์ ์ด ํ์ ์์.
๋น์ฐํ ๋ณ๋์ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ API๋ฅผ ์ฌ์ฉํด๋ ๋๊ณ , ์ง์ Teamcity ์ค์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ DB์ Query๋ฅผ ๋ ๋ ค์ ์ฌ์ฉ ๊ฐ๋ฅ
์ผ์ ๊ท๋ชจ์ด์์์๋ ์ ๋ฃ ํ๋์ด ํ์
๊ฒฐ๊ตญ์ CI/CD ๋๊ตฌ์ด๋ค๋ณด๋ ๋ฐฐ์น์ชฝ์ผ๋ก ๋ฐ์ ๋ฐฉํฅ์ด ํฅํ๊ณ ์์ง ์์.
ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๊ฐ Jenkins์ ๋นํด ์ฝํจ.
์ ์ฒด ํ๋ฌ๊ทธ์ธ ์๊ฐ 10๋ฐฐ ์ด์ ์ฐจ์ด๋จ.
๊ทธ๋ผ์๋ Github ๋ก๊ทธ์ธ / ์ฌ๋ ์ฐ๋ ๋ฑ ๋๋ถ๋ถ์ ํ๋ฌ๊ทธ์ธ๋ค์ ์กด์ฌ
Spring์์ ๊ณต์์ ์ผ๋ก ๋ฐ๊ณ ์๋ Batch/Data Stream ๋งค๋์
Spring์์ ๋๋๊ณ Batch/Data Stream ๋งค๋์ ๋ก ๋์จ ๋๊ตฌ๋ผ์ ๋ฐ์ ๋ฐฉํฅ์ด ๊ทธ์ชฝ์ผ๋ก ๋ช ํ
Teamcity์ ๋ง์ฐฌ๊ฐ์ง๋ก DB์ ์ฌ๋ฌ ์ค์ ์ ๋ณด๋ค์ ๊ด๋ฆฌ
๋ณ๋๋ก ์ง์ ํ์ง ์์ผ๋ฉด ์ธ๋ฉ๋ชจ๋ฆฌ DB (H2)๋ฅผ ์ฌ์ฉ
์คํ์์ค
CloudFoundry ํน์ Kubernates ํ๊ฒฝ์ด ์๋๋ฉด ์ ๋๋ก ํ์ฉํ๊ธฐ๊ฐ ์ด๋ ค์.
์ ํ๊ฒฝ์์๋ง ์ค์ผ์ค๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉ ํ ์ ์์.
์ฆ, ๋จ์ผ ์๋ฒ์์๋ ์ค์ผ์ค๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉ ๋ชปํจ.
์ปจ์ ์์ฒด๊ฐ ๋ฐฐ์น๊ฐ ์คํ๋ ๋๋ง ์ปจํ ์ด๋๋ฅผ ๋ณ๋๋ก ์์ฑํด์ ์คํํ๊ณ ์ข ๋ฃํ๊ธฐ ์ํจ์ด๋ผ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ์์ด ์ฌ์ฉํ๋ ค๋ฉด ๊ต์ฅํ ์ ํ์
๋น์ฐํ ์ ๋จ์ ์ผ๋ก ์ธํด ํ๋ค์ด ๋ค๋ฅธ ์ด๋ค ๋๊ตฌ๋ค ๋ณด๋ค ๋์.
Cloud Native Batch Application ์ ์ํด ๋์จ ์๋น์ค๋ผ ํด๋ผ์ฐ๋๋ฅผ ๊ต์ฅํ ๋จ์ํ๊ฒ๋ง ์ฌ์ฉํ๋ ๊ทธ๋ฃน์์ ์ฌ์ฉํ๊ธฐ์ ์ด๊ธฐ ํ๋ค์ด ๋์.
Spring Batch์ ๋ํ ๊ณต๋ถ๋ณด๋ค Kubernates ์ Docker ๊ณต๋ถ๊ฐ ์ฐ์ ๋์ด์ผํ ์๋ ์์.
๋จ์ผ ์๋ฒ์ Kubernates ์ค์นํ๊ณ ๊ทธ ์๋ฒ์์์ Docker ์์ฑ&์ญ์ ๋ฅผ ํ๋๋ก ํ๋๊ฑด ๊ฑฐ์ ๋ฌด์๋ฏธ(๋จ์ผ์๋ฒ์์ ์ฌ์ฉํ๋๊ฒ ๊ถ์ฅํ์ง ์์.)