Spring Batch 1
๐ฟ DB Schema
Job ๊ด๋ จ ํ ์ด๋ธ
- BATCH_JOB_INSTANCE
- Job์ด ์คํ๋ ๋ JobInstance ์ ๋ณด๊ฐ ์ ์ฅ๋๋ฉฐ job_name๊ณผ Job_key์ ํค๋ก ํ์ฌ ํ๋์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ
- ๋์ผํ job_name ๊ณผ job_key๋ก ์ค๋ณต ์ ์ฅ๋ ์ ์๋ค.
- BATCH_JOB_EXECUTION
- job์ ์คํ์ ๋ณด๊ฐ ์ ์ฅ๋๋ฉฐ Job ์์ฑ, ์์, ์ข ๋ฃ์๊ฐ, ์คํ์ํ, ๋ฉ์์ง ๋ฑ์ ๊ด๋ฆฌ
- BATCH_JOB_EXECUTION_PARAMS
- Job๊ณผ ํจ๊ป ์คํ๋๋ JobParameter ์ ๋ณด๋ฅผ ์ ์ฅ
- BATCH_JOB_EXECUTION_CONTEXT
- Job์ ์คํ๋์ ์ฌ๋ฌ๊ฐ์ง ์ํ์ ๋ณด, ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํ(Json ํ์) ํด์ ์ ์ฅ
- Step ๊ฐ ์๋ก ๊ณต์ ๊ฐ๋ฅํจ
Step ๊ด๋ จ ํ ์ด๋ธ
- BATCH_STEP_EXECUTION
- Step์ ์คํ์ ๋ณด๊ฐ ์ ์ฅ๋๋ฉฐ ์์ฑ, ์์ ์ข ๋ฃ์๊ฐ, ์คํ ์ํ, ๋ฉ์์ง ๋ฑ์ ๊ด๋ฆฌ
- BATCH_STEP_EXECTION_CONTEXT
- Step์ ์คํ๋์ ์ฌ๋ฌ๊ฐ์ง ์ํ์ ๋ณด, ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํ(Json)ํด์ ์ ์ฅ
- Step ๋ณ๋ก ์ ์ฅ๋๋ฉฐ Step๊ฐ ์๋ก ๊ณต์ ํ ์ ์์
๐ฟ Job
๋ฐฐ์น ๊ณ์ธต ๊ตฌ์กฐ์์ ๊ฐ์ฅ ์์์ ์๋ ๊ฐ๋ ์ผ๋ก์ ํ๋์ ๋ฐฐ์น ์์ ์์ฒด๋ฅผ ์๋ฏธํจ
- API ์๋ฒ์ ์ ์ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ํต๊ณ ์๋ฒ๋ก ์ฎ๊ธฐ๋ ๋ฐฐ์น -> Job ๊ทธ ์์ฒด
- Job Configuration์ ํตํด ์์ฑ๋๋ ๊ฐ์ฒด ๋จ์๋ก์ ๋ฐฐ์น์์ ์ ์ด๋ป๊ฒ ๊ตฌ์ฑํ๊ณ ์คํํ ๊ฒ์ธ์ง ์ ์ฒด์ ์ผ๋ก ์ค์ ํ๊ณ ๋ช ์ธํด ๋์ ๊ฐ์ฒด
- ๋ฐฐ์น Job์ ๊ตฌ์ฑํ๊ธฐ ์ํ ์ต์์ ์ธํฐํ์ด์ค์ด๋ฉฐ ์คํ๋ง ๋ฐฐ์น๊ฐ ๊ธฐ๋ณธ ๊ตฌํ์ฒด๋ฅผ ์ ๊ณต
- ์ฌ๋ฌ Step์ ํฌํจํ๊ณ ์๋ ์ปจํ ์ด๋๋ก์ ๋ฐ๋์ ํ๊ฐ ์ด์์ Step์ผ๋ก ๊ตฌ์ฑํด์ผ ํจ
๊ธฐ๋ณธ ๊ตฌํ์ฒด
- Simple Job
- ์์ฐจ์ ์ผ๋ก Step์ ์คํ์ํค๋ Job
- ๋ชจ๋ Job์์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ํ์ค ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์์
- Flow Job
- ํน์ ํ ์กฐ๊ฑด๊ณผ ํ๋ฆ์ ๋ฐ๋ผ Step์ ๊ตฌ์ฑํ์ฌ ์คํ์ํค๋ Job
- Flow ๊ฐ์ฒด๋ฅผ ์คํ์์ผ์ ์์ ์ ์งํํจ
๐ฟ JobInstance
Job์ด ์คํ๋ ๋ ์์ฑ๋๋ Job์ ๋ ผ๋ฆฌ์ ์คํ ๋จ์ ๊ฐ์ฒด๋ก์ ๊ณ ์ ํ๊ฒ ์๋ณ ๊ฐ๋ฅํ ์์ ์คํ์ ๋ํ๋
- Job์ ์ค์ ๊ณผ ๊ตฌ์ฑ์ ๋์ผํ์ง๋ง Job์ด ์คํ๋๋ ์์ ์ ์ฒ๋ฆฌํ๋ ๋ด์ฉ์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ Job์ ์คํ์ ๊ตฌ๋ถํด์ผ ํจ
- ์๋ฅผ ๋ค์ด ํ๋ฃจ์ ํ๋ฒ ์ฉ ๋ฐฐ์น Job์ด ์คํ๋๋ค๋ฉด ๋งค์ผ ์คํ๋๋ ๊ฐ๊ฐ์ Job์ JobInstance๋ก ํํํฉ๋๋ค.
- JobInstance ์์ฑ ๋ฐ ์คํ
- ์ฒ์ ์์ํ๋ Job + JobParameter(ํด์ฌ)์ผ ๊ฒฝ์ฐ ์๋ก์ด JobInstance ์์ฑ
- ์ด์ ๊ณผ ๋์ผํ Job + JobParameter์ผ ๊ฒฝ์ฐ ์ด๋ฏธ ์กด์ฌํ๋ JobInstance ๋ฆฌํด
- Job๊ณผ๋ 1:M ๊ด๊ณ
BATCH_JOB_INSTANCE ํ ์ด๋ธ๊ณผ ๋งคํ
- JOB_NAME(Job)rhk JOB_KEY(JobParameter ํด์๊ฐ)๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ ์ค๋ณตํด์ ์ ์ฅํ ์ ์์
๐ฟ JobParameter
Job์ ์คํํ ๋ ํจ๊ป ํฌํจ๋์ด ์ฌ์ฉ๋๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง ๋๋ฉ์ธ ๊ฐ์ฒด
- ํ๋์ Job์ ์กด์ฌํ ์ ์๋ ์ฌ๋ฌ๊ฐ์ JobInstance๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์ฉ๋
- JobParameters์ Job Instance๋ 1:1 ๊ด๊ณ
__
๐ฟ JobExecution
JobInstance์ ๋ํ ํ๋ฒ์ ์๋๋ฅผ ์๋ฏธํ๋ ๊ฐ์ฒด๋ก์ Job ์คํ ์ค์ ๋ฐ์ํ ์ ๋ณด๋ค์ ์ ์ฅํ๊ณ ์๋ ๊ฐ์ฒด
- ์์์๊ฐ, ์ข ๋ฃ์๊ฐ, ์ํ(์์๋จ, ์๋ฃ, ์คํจ)์ข ๋ฃ ์ํ์ ์์ฑ์ ๊ฐ์ง
- JobExecution์ FAILED ๋๋ COMPLETED ๋ฑ์ Job์ ์คํ ๊ฒฐ๊ณผ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์์
- JobExecution์ ์คํ ์ํ ๊ฒฐ๊ณผ๊ฐ COMPLETED๋ฉด JobInstance ์คํ์ด ์๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํด์ ์ฌ ์คํ์ด ๋ถ๊ฐํจ
- JobExecution์ ์คํ ์ํ ๊ฒฐ๊ณผ๊ฐ FAILED๋ฉด JobInstance ์คํ์ด ์๋ฃ๋์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ฃผํด์ ์ฌ์คํ์ด ๊ฐ๋ฅํจ
- JobParameter๊ฐ ๋์ผํ ๊ฐ์ผ๋ก Job์ ์คํํ ์ง๋ผ๋ JobInstance๋ฅผ ๊ณ์ ์คํํ ์ ์์
- JobExecution์ ์คํ ์ํ ๊ฒฐ๊ณผ๊ฐ COMPLETED๊ฐ ๋ ๋๊น์ง ํ๋์ JobInstance ๋ด์์ ์ฌ๋ฌ๋ฒ์ ์๋๊ฐ ์๊ธธ ์ ์์
- JobInstance์ JobExecution๋ 1:M์ ๊ด๊ณ๋ก์ JobInstance์ ๋ํ ์ฑ๊ณต/์คํจ์ ๋ด์ญ์ ๊ฐ์ง๊ณ ์์
๐ฟ Step
Batch Job์ ๊ตฌ์ฑํ๋ ๋ ๋ฆฝ์ ์ธ ํ๋์ ๋จ๊ณ๋ก์ ์ค์ ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ์ ์ํ๊ณ ์ปจํธ๋กคํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋๋ฉ์ธ ๊ฐ์ฒด
- ๋จ์ํ ๋จ์ผ ํ์คํฌ ๋ฟ ์๋๋ผ ์ ๋ ฅ๊ณผ ์ฒ๋ฆฌ ๊ทธ๋ฆฌ๊ณ ์ถ๋ ฅ๊ณผ ๊ด๋ จ๋ ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ํฌํจํ๋ ๋ชจ๋ ์ค์ ๋ค์ ๋ด๊ณ ์๋ค.
- ๋ฐฐ์น์์ ์ ์ด๋ป๊ฒ ๊ตฌ์ฑํ๊ณ ์คํํ ๊ฒ์ธ์ง Job์ ์ธ๋ถ ์์ ์ Task ๊ธฐ๋ฐ์ผ๋ก ์ค์ ํ๊ณ ๋ช ์ธํด ๋์ ๊ฐ์ฒด
- ๋ชจ๋ Job์ ํ๋ ์ด์์ step์ผ๋ก ๊ตฌ์ฑ๋จ
๊ธฐ๋ณธ ๊ตฌํ์ฒด
- TaskletStep
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ํด๋์ค๋ก์ Tasklet ํ์ ์ ๊ตฌํ์ฒด๋ค์ ์ ์ดํ๋ค.
- PartitionStep
- ๋ฉํฐ ์ค๋ ๋ ๋ฐฉ์์ผ๋ก Step์ ์ฌ๋ฌ ๊ฐ๋ก ๋ถ๋ฆฌํด์ ์คํํ๋ค.
- JobStep
- Step ๋ด์์ Job์ ์คํํ๋๋ก ํ๋ค.
- FlowStep
- Step ๋ด์์ Flow๋ฅผ ์คํํ๋๋ก ํ๋ค.
๐ฟ StepExecution
Step์ ๋ํ ํ๋ฒ์ ์๋๋ฅผ ์๋ฏธํ๋ ๊ฐ์ฒด๋ก์ Step ์คํ ์ค์ ๋ฐ์ํ ์ ๋ณด๋ค์ ์ ์ฅํ๊ณ ์๋ ๊ฐ์ฒด
- ์์์๊ฐ, ์ข ๋ฃ์๊ฐ, ์ํ, commit count, rollback count ๋ฑ์ ์์ฑ์ ๊ฐ์ง
- Step์ด ๋งค๋ฒ ์๋๋ ๋๋ง๋ค ์์ฑ๋๋ฉฐ ๊ฐ Step ๋ณ๋ก ์์ฑ๋๋ค.
- Job์ด ์ฌ์์ ํ๋๋ผ๋ ์ด๋ฏธ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ Step์ ์ฌ ์คํ๋์ง ์๊ณ ์คํจํ Step๋ง ์คํ๋๋ค.
- ์ด์ ๋จ๊ณ Step์ด ์คํจํด์ ํ์ฌ Step์ ์คํํ์ง ์์๋ค๋ฉด StepExecution์ ์์ฑํ์ง ์๋๋ค. Step์ด ์ค์ ๋ก ์์๋์ ๋๋ง StepExecition์ ์์ฑํ๋ค.
Job Execution ๊ณผ์ ๊ด๊ณ
- Step์ StepExecution์ด ๋ชจ๋ ์ ์์ ์ผ๋ก ์๋ฃ ๋์ด์ผ JobExecution์ด ์ ์์ ์ผ๋ก ์๋ฃ๋๋ค.
- Step์ StepExecution ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด JobExecution์ ์คํจํ๋ค.
BATCH_STEP_EXECUTION ํ ์ด๋ธ๊ณผ ๋งคํ
- JobExecution๊ณผ StepExecution์ 1:M ๊ด๊ณ
- ํ๋์ Job์ ์ฌ๋ฌ ๊ฐ์ Step์ผ๋ก ๊ตฌ์ฑํ์ ๊ฒฝ์ฐ ๊ฐ StepExecution์ ํ๋์ jobExecution์ ๋ถ๋ชจ๋ก ๊ฐ์ง๋ค.
๐ฟ StepContribution
Chunk ํ๋ก์ธ์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฒํผ๋ง ํ ํ StepExecution ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋๋ฉ์ธ ๊ฐ์ฒด
- ์ฒญํฌ ์ปค๋ฐ ์ง์ ์ StepExecution์ apply ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํจ
- ExitStatus์ ๊ธฐ๋ณธ ์ข ๋ฃ์ฝ๋ ์ธ ์ฌ์ฉ์ ์ ์ ์ข ๋ฃ์ฝ๋๋ฅผ ์์ฑํด์ ์ ์ฉํ ์ ์์
๐ฟ StepContribution
ํ๋ ์์ํฌ์์ ์ ์ง ๋ฐ ๊ด๋ฆฌํ๋ ํค/๊ฐ์ผ๋ก ๋ ์ปฌ๋ ์ ์ผ๋ก StepExecution ๋๋ JobExecution ๊ฐ์ฒด์ ์ํ๋ฅผ ์ ์ฅํ๋ ๊ณต์ ๊ฐ์ฒด
- DB์ ์ง๋ ฌํ ํ ๊ฐ์ผ๋ก ์ ์ฅ๋จ - (โkeyโ : โvalueโ)
- ๊ณต์ ๋ฒ์
- Step ๋ฒ์ - ๊ฐ Step์ StepExecution์ ์ ์ฅ๋๋ฉฐ Step๊ฐ ์๋ก ๊ณต์ ์๋จ
- Job ๋ฒ์ - ๊ฐ Job์ JobExecution์ ์ ์ฅ๋๋ฉฐ Job๊ฐ ์๋ก ๊ณต์ ์๋๋ฉฐ ํด๋น Job์ Step ๊ฐ ์๋ก ๊ณต์ ๋จ
- Job ์ฌ ์์์ ์ด๋ฏธ ์ฒ๋ฆฌํ Row ๋ฐ์ดํฐ๋ ๊ฑด๋๋ฐ๊ณ ์ดํ๋ก ์ํํ๋๋ก ํ ๋ ์ํ ์ ๋ณด๋ฅผ ํ์ฉํ๋ค.
๐ฟ JobRepository
๋ฐฐ์น ์์ ์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์ ์ฅ์ ์ญํ
- Job์ด ์ธ์ ์ํ๋์๊ณ ์ธ์ ๋๋ฌ์ผ๋ฉฐ, ๋ช๋ฒ ์คํ๋์๊ณ ์คํ์ ๋ํ ๊ฒฐ๊ณผ ๋ฑ์ ๋ฐฐ์น ์์
์ ์ํ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ meta data๋ฅผ ์ ์ฅ
- JobLauncher, Job, Step ๊ตฌํ์ฒด ๋ด๋ถ์์ CRUD ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํจ(DB์ ์ฐ๊ฒฐ๋ ๋ถ๋ถ์ด๋ผ๋ ๋ป)
JobRepository ์ค์
- @EnableBatchProcessing ์ด๋ ธํ ์ด์ ๋ง ์ ์ธํ๋ฉด JobRepository๊ฐ ์๋์ผ๋ก ๋น์ผ๋ก ์์ฑ๋จ
- BatchConfigurer ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ BasicBatchConfigurer๋ฅผ ์์ํด์ JobRepository ์ค์ ์ ์ปค์คํฐ๋ง์ด์ง ํ ์ ์๋ค.
- JDBC ๋ฐฉ์์ผ๋ก ์ค์ - JobRepositoryFactoryBean
- ๋ด๋ถ์ ์ผ๋ก AOP ๊ธฐ์ ์ ํตํด ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ณ ์์
- ํธ๋์ญ์ isolation์ ๊ธฐ๋ณธ๊ฐ์ SERIALIZABLE๋ก ์ต๊ณ ์์ค, ๋ค๋ฅธ ๋ ๋ฒจ(READ_COMMITED, REPEATABLE_READ)๋ก ์ง์ ๊ฐ๋ฅ
- ๋ฉํํ ์ด๋ธ์ Table Prefix๋ฅผ ๋ณ๊ฒฝํ ์ ์์, ๊ธฐ๋ณธ ๊ฐ์ โBATCH_โ์
- In Memory ๋ฐฉ์์ผ๋ก ์ค์ - MapJobRepositoryFactoryBean
- ์ฑ๋ฅ ๋ฑ์ ์ด์ ๋ก ๋๋ฉ์ธ ์ค๋ธ์ ํธ๋ฅผ ๊ตณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ
- ๋ณดํต Test๋ ํ๋กํ ํ์ ์ ๋น ๋ฅธ ๊ฐ๋ฐ์ด ํ์ํ ๋ ์ฌ์ฉ
- JDBC ๋ฐฉ์์ผ๋ก ์ค์ - JobRepositoryFactoryBean
๐ฟ JobLauncher
๋ฐฐ์น Job์ ์คํ์ํค๋ ์ญํ ์ ํ๋ค.
- Job๊ณผ Job Parameters๋ฅผ ์ธ์๋ก ๋ฐ์ผ๋ฉฐ ์์ฒญ๋ ๋ฐฐ์น ์์ ์ ์ํํ ํ ์ต์ข Client์๊ฒ JobExecution์ ๋ฐํ
- Spring Boot Batch๊ฐ ๊ตฌ๋์ด ๋๋ฉด JobLauncher ๋น์ด ์๋ ์์ฑ ๋๋ค.
- Job ์คํ
- JobLauncher.run(Job, JobParameter)
- Spring Boot Batch๋ JobLauncherApplicationRunner๊ฐ ์๋์ ์ผ๋ก JobLauncher๋ฅผ ์คํ์ํจ๋ค.
- ๋๊ธฐ์ ์คํ
- taskExecutor๋ฅผ SyncExecutor๋ก ์ค์ ํ ๊ฒฝ์ฐ(๊ธฐ๋ณธ)
- JobExecution์ ํ๋ํ๊ณ ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ์ต์ข ์๋ฃํ ํ Client์๊ฒ JobExecution์ ๋ฐํ
- ์ค์ผ์ค๋ฌ์ ์ํ ๋ฐฐ์น์ฒ๋ฆฌ์ ์ ํฉ ํจ - ๋ฐฐ์น ์ฒ๋ฆฌ ์๊ฐ์ด ๊ธธ์ด๋ ์๊ด์๋ ๊ฒฝ์ฐ
- ๋น๋๊ธฐ์ ์คํ
- taskExecutor๊ฐ SimpleAsyncTaskExecutor๋ก ์ค์ ํ ๊ฒฝ์ฐ
- JobExecution์ ํ๋ํ ํ Client์๊ฒ ๋ฐ๋ก jobExecution์ ๋ฐํํ๊ณ ๋ฐฐ์น์ฒ๋ฆฌ๋ฅผ ์๋ฃํ๋ค.
- HTTP ์์ฒญ์ ์ํ ๋ฐฐ์น์ฒ๋ฆฌ์ ์ ํฉํจ - ๋ฐฐ์น์ฒ๋ฆฌ ์๊ฐ์ด ๊ธธ ๊ฒฝ์ฐ ์๋ต์ด ๋ฆ์ด์ง์ง ์๋๋ก ํจ