Airflow ์ค์น ์ ์ ๋ฐ๋์ ํ์ธํด์ผ ํ ์ฌํญ์ด ์์ต๋๋ค:์ง์ ๋ฒ์ : Python, Kubernetes ํธํ์ฑ ํ์ธ ํ์ํ์ ์กฐ๊ฑด: ์์คํ ํจํค์ง, ์ฌ์ฉ์ ๊ถํ, ๋คํธ์ํฌ ์ค์ ๋ฑ์์กด์ฑ ๊ด๋ฆฌ: Providers ๋ฐ Extras ํจํค์ง๋ฅผ ํตํ ๊ธฐ๋ฅ ํ์ฅDB ์ค์ : M
MySQL์ ์์์ ์์ธ๋ก mSQL (Mini SQL)์ด๋ผ๋ ๋ ๋ค๋ฅธ ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๋ จ์ด ๊น์ต๋๋ค. ๋น์ MySQL์ ๊ฐ๋ฐ์๋ค์ ๋น ๋ฅธ ์๋๋ฅผ ์ํด ์์ฒด ISAM(Indexed Sequential Access Method) ๊ธฐ๋ฐ์ ๋ก์ฐ๋ ๋ฒจ ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ์ฉํ๊ณ
Kubernetes์์ ์ค๋ธ์ ํธ๋ "์ํ๋ ์ํ(desired state)"์ ์ ์ธ์ ๋๋ค. ์ด ์ ์ธ์ ๋ค์๊ณผ ๊ฐ์ ํด๋ฌ์คํฐ ์ํ๋ฅผ ์ ์ํฉ๋๋ค:์ด๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ค ๋ ธ๋์์ ์คํ ์ค์ธ์ง์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋น๋ ๋ฆฌ์์ค์ฌ์์ ์ ์ฑ , ์ ๊ทธ๋ ์ด๋ ๋ฐฉ์, ์ฅ์ ํ์ฉ์ฑ๊ณผ ๊ฐ์ ๋์
Kafka๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์ต์ ๋ฆด๋ฆฌ์ค๋ฅผ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค. Scala ๋ฒ์ ์ ๋ฐ๋ผ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ ํํด์ผ ํ๋ฉฐ, ์์๋ Scala 2.13๊ณผ Kafka 4.0.0 ๊ธฐ์ค์ ๋๋ค.โ TIP: ๋ก์ปฌ ์คํ์ ์ํด Java 17 ์ด์์ด ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.โ TIP: ๋์ปค๋ก
์ ์: ์ ์ฒด ๋ฐฐ์น ์์ ์ ์๋ฏธํ๋ ์ปจํ ์ด๋๊ตฌ์ฑ: ํ๋ ์ด์์ Step์ผ๋ก ๊ตฌ์ฑ๋จ์ค์ : Java DSL ๋๋ XML ์ค์ ๊ฐ๋ฅJob ์ ์ + ์๋ณ์(JobParameters)๋์ผํ Job ์ ์๋ผ๋ ๋ค๋ฅธ ํ๋ผ๋ฏธํฐ๋ก ์คํ๋๋ฉด ์๋ก์ด JobInstance ์์ฑJobInstan
๊น์ํ๋์ ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ ์ ๋ฆฌEntityManager๋ ๋ด๋ถ์ ์ผ๋ก ์์์ฑ ์ปจํ ์คํธ(Persistence Context)๋ฅผ ์ ์งํ๋ค. ์ฝ๊ฒ ๋งํด, JPA๊ฐ ์ํฐํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค.1์ฐจ ์บ์: ์์์ฑ ์ปจํ ์คํธ ๋ด๋ถ์์ ๊ฐ์ฅ ํต์ฌ์
๊น์ํ๋์ ์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ ์ ๋ฆฌMVC(Model-View-Controller)๋ ์ํํธ์จ์ด ์ค๊ณ์ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ(Separation of Concerns)๋ฅผ ์ํ ๋ํ์ ์ธ ์ํคํ ์ฒ์ ๋๋ค. ์น ๊ฐ๋ฐ์์ ์ด ํจํด์ ํน
๊น์ํ๋์ ์๋ฐ ์ ๋ฌธ - ์ฝ๋๋ก ์์ํ๋ ์๋ฐ ์ฒซ๊ฑธ์ ์ ๋ฆฌ"๋ณ์"๋ ๋ง ๊ทธ๋๋ก ๋ณํ ์ ์๋ ์(value)์ ๋๋ค. ํ๋ก๊ทธ๋๋ฐ์์๋ ๊ฐ์ ์ ์ฅํ๊ณ , ๊ทธ ๊ฐ์ ์ฐธ์กฐํ ์ ์๋ ์ด๋ฆ์ด ๋ถ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ฏธํ์ฃ .์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ๋ณด๊ฒ ์ต๋๋ค:๋จ์ํ 10์ 3๋ฒ ์ถ๋ ฅํฉ๋๋ค
๊น์ํ๋์ ์๋ฐ ์ ๋ฌธ - ์ฝ๋๋ก ์์ํ๋ ์๋ฐ ์ฒซ๊ฑธ์ ์ ๋ฆฌ"๋ณ์"๋ ๋ง ๊ทธ๋๋ก ๋ณํ ์ ์๋ ์(value)์ ๋๋ค. ํ๋ก๊ทธ๋๋ฐ์์๋ ๊ฐ์ ์ ์ฅํ๊ณ , ๊ทธ ๊ฐ์ ์ฐธ์กฐํ ์ ์๋ ์ด๋ฆ์ด ๋ถ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ฏธํ์ฃ . ์ด ๊ณต๊ฐ์ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ
๊ธฐ์กด์๋ pip, venv, pip-tools, poetry ๋ฑ ๋ค์ํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด Python ํจํค์ง๋ฅผ ๊ด๋ฆฌํด์์ง๋ง, uv๋ ํนํ ์๋, ์์กด์ฑ ํด์์ ์ ํ์ฑ, ๊ทธ๋ฆฌ๊ณ ๋จ์ํ UX์์ ๊ฐ์ ์ ๋ณด์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์์ต๋๋ค:Rust๋ก ์์ฑ๋์ด ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
๋ฉํฐ์ค๋ ๋ ๊ธฐ๋ฐ ์ปค๋ ์ค๋ ๋ ๊ตฌ์กฐ: CPU ์ฝ์ด๋ฅผ ์ต๋ํ ํ์ฉํ ์ ์๋๋ก ์ค๊ณ๋์ด ๋ณ๋ ฌ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ์ ๊ฐํฉ๋๋ค.๋ชจ๋ํ๋ ์ค๊ณ: ์คํ ๋ฆฌ์ง ์์ง์ ๋ชจ๋์ฒ๋ผ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์์ด, ์ํฉ์ ๋ง๋ ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํฉ๋๋ค.CMake ๊ธฐ๋ฐ ๊ตฌ์ฑ: ๋ค์ํ ํ๋ซํผ์์ ์์ฝ๊ฒ ๋น๋ ๊ฐ
Kubernetes ํด๋ฌ์คํฐ๋ ํฌ๊ฒ ๋ ์์ญ์ผ๋ก ๋๋ฉ๋๋ค:Control Plane (์ ์ด ํ๋ ์ธ): ํด๋ฌ์คํฐ์ ๋ธ๋ ์ธ ์ญํ Worker Node (์์ ๋ ธ๋): ์ค์ ์ปจํ ์ด๋๊ฐ ๋์๊ฐ๋ ํ๊ฒฝ์ด ๋ ์์ญ์ด ์ํธ์์ฉํ๋ฉฐ ํด๋ฌ์คํฐ ์ ์ฒด์ ์ํ๋ฅผ ์ ์งํฉ๋๋ค.ํด๋ฌ์คํฐ์ ์ง์ ์ ์ผ๋ก
Kafka๋ ์ ํต์ ์ธ ๋ฉ์์ง ๋ธ๋ก์ปค(์: RabbitMQ, ActiveMQ)๋ฅผ ๋์ฒดํ ์ ์๋ ๊ฐ๋ ฅํ ๋ฉ์์ง ํ๋ซํผ์ ๋๋ค. ๋ด์ฅ๋ ํํฐ์ ๋, ๋ณต์ , ์ฅ์ ํ์ฉ์ฑ ๋๋ถ์ ๋๊ท๋ชจ ์์คํ ์์๋ ์์ ์ ์ผ๋ก ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.์์ฐ์/์๋น์ ๊ฐ ์์ ๋น๋๊ธฐ ๋ฉ์์ง ์ฒ๋ฆฌ
Spring Batch๋ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํนํ๋ ํ๋ ์์ํฌ๋ก, ๋ค์ํ ์ฌ์ฉ์ ๋์ฆ๋ฅผ ๋ง์กฑ์ํค๊ธฐ ์ํด ๊ณ์ธตํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ต๋๋ค. ์๋๋ ํต์ฌ ๊ตฌ์ฑ ์์์ ๋๋ค.Application Layer: ์ฌ์ฉ์๊ฐ ์์ฑํ๋ Job, Step, ์ปค์คํ ๋ฆฌ๋/๋ผ์ดํฐ ๋ฑBatch Co
๊น์ํ๋์ ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ ์ ๋ฆฌ์์์ฑ ์ปจํ ์คํธ๋ "์ํฐํฐ๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ํ๊ฒฝ"์ ๋๋ค. ์ ํํ๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ๋ ๋ ผ๋ฆฌ์ ๊ฐ๋ ์ ๋๋ค:์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ด ์ ์ฅ์EntityManager๋ฅผ ํตํด ์ ๊ทผ๋์ ๋ณด์ด์ง ์์ง๋ง JP
์ ์ ์ปจํ ์ธ ๋ ๊ฐ์ฅ ๋จ์ํ ํํ์ ์น ๋ฆฌ์์ค ์ ๊ณต ๋ฐฉ์์ ๋๋ค. ์๋ฒ๋ ๋ก์ง ์์ด ํ์ผ์ ์๋ ๊ทธ๋๋ก ๋ธ๋ผ์ฐ์ ์ ๋ฐํํฉ๋๋ค.์๋ฒ ์ฒ๋ฆฌ ๋ก์ง ์์๋น ๋ฅด๊ณ ๋จ์HTML, CSS, JS, ์ด๋ฏธ์ง ํ์ผ ๋ฑSEO์ ์ ๋ฆฌSpring Boot๋ ๊ธฐ๋ณธ์ ์ผ๋ก /resources/stati
์ฝํ๋ฆฐ์ ์๋ฐ์ฒ๋ผ ๊ณต์์ ์ผ๋ก ํ์ค ์คํ๊ณผ ๋ค์ํ ๊ตฌํ์ฒด๋ฅผ ๋๋ ์ค๋ช ํ์ง ์์ง๋ง, ์ฝํ๋ฆฐ ๋ํ JVM ๊ธฐ๋ฐ ์ธ์ด๋ก์ ์๋ฐ ์ํ๊ณ๋ฅผ ๊ทธ๋๋ก ํ์ฉํฉ๋๋ค.JetBrains๊ฐ ์ฃผ๋ํ๋ ๊ณต์ ๊ตฌํ์ฒด์ฝํ๋ฆฐ์ JetBrains์์ ๊ฐ๋ฐํ๋ฉฐ, ๊ณต์ ์ปดํ์ผ๋ฌ ๋ฐ ํด์ฒด์ธ์ ์ ๊ณตํฉ๋๋ค.์ฝํ
์๋ฐ๋ ๋จ์ผํ ๊ตฌํ์ฒด๊ฐ ์๋, ํ์ค ์คํ(Java Specification)๊ณผ ์ด๋ฅผ ๋ฐ๋ฅด๋ ๋ค์ํ ๊ตฌํ์ฒด(Java Implementation)์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.ํ์ค ์คํ (JCP์ ์ํด ๊ด๋ฆฌ)์๋ฐ ์ธ์ด๊ฐ ์ด๋ค ๊ตฌ์กฐ๋ก ๋ง๋ค์ด์ ธ์ผ ํ๋์ง ์ ์ํ ์ค๊ณ๋์: ์ปดํ์ผ๋ฌ
Kubernetes๋ ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ, ํ์ฅ, ๊ด๋ฆฌ๋ฅผ ์๋ํํ๋ ์คํ์์ค ํ๋ซํผ์ ๋๋ค. 2014๋ Google์ด ์คํ์์ค๋ก ๊ณต๊ฐํ์ผ๋ฉฐ, ์ด๋ฆ์ ๊ทธ๋ฆฌ์ค์ด๋ก "์กฐํ์(helmsman)"๋ฅผ ์๋ฏธํฉ๋๋ค.ํ์ฅ์ฑ: ์์ฒ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ๊ตฌ์กฐ์ด์์ฑ:
"์ํฌํ๋ก์ฐ๋ฅผ ์ฝ๋๋ก ์ ์ํ๊ณ , ๋ฐฐ์น ์คํ์ ์ฒด๊ณํํ๋ ํ๋ซํผ"Airflow๋ Python ์ฝ๋๋ก ์ํฌํ๋ก์ฐ(DAG: Directed Acyclic Graph)๋ฅผ ์ ์ํ๊ณ , ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋๋๋ก ์ค์ผ์ค๋งํ๋ฉฐ, ์คํ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์๊ฒ ํด์ค๋๋ค.ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต