๐ 10๋ถ ํ
์ฝํก - ๋ผ๋น์ Spring Batch๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ด๋ค.
batch์ ๊ธฐ๋ณธ ์ ์๋ (์ผ๊ด์ฒ๋ฆฌ๋ฅผ ์ํด) ํจ๊ป ๋ฌถ๋ค
์ด๋ค.
โ ๊ฐ๋ฐ์ ์ ์ฉํด๋ณด๋ฉด ๊ฐ๋ฐ์๊ฐ ์ ์ํ ์์
์ ํ๋ฒ์ ์ผ๊ด ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ค.
๋ฐฐ์น๋ฅผ ์ ์ฉํ ์ ํ๋ฆฌ์ผ์ด์
์
- ๋งค์ถ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์ผ๋งค์ถ ์ง๊ณ
- ๋งค์ฐ ํฐ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ๋ณดํ๊ธ์ฌ ๊ฒฐ์
- ํธ๋์ญ์
๋ฐฉ์์ผ๋ก ํฌ๋งท, ์ ํจ์ฑ ํ์ธ ๋ฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ด๋ถ ๋ฐ ์ธ๋ถ ์์คํ
์์ ์์ ํ ์ ๋ณด๋ฅผ ๊ธฐ๋ก ์์คํ
์ผ๋ก ํตํฉ ๋ฑ๋ฑ
์ด ์๋ค.
๋ผ๋น ๋์ ํ๋ก์ ํธ์์ ๋ฐฐ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๋ป๊ฒ ์ฌ์ฉํ์๊น?
- ๋์ฉ๋์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ํฌ๋กค๋งํ๊ธฐ ์ํด ์ฌ์ฉ
- ์ฌ์ฉ์์ ์ ์์ด ๊ฑฐ์ ์๋ ์๊ฐ๋์ ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ํ๊ธฐ ์ํด ๋ฐฐ์น๋ฅผ ์ ์ฉ
- ์ ํด์ง ์๊ฐ์ ๊ตฌ๋
์ ์ ์ฒญํ ํ์์๊ฒ ์ผ๊ด ์ ์กํ๊ธฐ ์ํด ์ฌ์ฉ
- ๋ค๋ฅธ ์ ๋ณด๋ฅผ ์ด๋ํ๋ ๋ฑ ๋ค๋ฅธ ์๋น์ค์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
๋ฐ๋ผ์ ๋ฐฐ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ํ์ํ ์ํฉ์?
- ์ผ์ ์ฃผ๊ธฐ๋ก ์คํํด์ผ ํ ๋
- ์ค์๊ฐ ์ฒ๋ฆฌ๊ฐ ์ด๋ ค์ด ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ ๋
โ ์ด๋ฐ ์์
์ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ํํ๋ฉด ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ ์ ์์ผ๋ ๋ฐฐ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌํํ๋ค.
๋ฐฐ์น์ ์ค์ผ์ฅด๋ฌ์ ์ฐจ์ด
- ๋ฐฐ์น์ ๋ํ์ ์ธ ํ๋ ์์ํฌ: Spring Batch
- ์ค์ผ์ฅด๋ฌ์ด ๋ํ์ ์ธ ํ๋ ์์ํฌ: Quartz
์ค์ผ์ฅด๋ง์ด๋?
- ๋งค ์๊ฐ/์ง์ ํ ์๊ฐ์ ์ง์ ํ ๋์์ ์ํํ๋ ๊ฒ์ด๋ค.
- ๊ทธ๋์ ์คํ๋ง ๋ฐฐ์น์ ๊ณต์ ๋ฌธ์์๋
์คํ๋ง ๋ฐฐ์น๋ ์ค์ผ์ค๋ง ํ๋ ์์ํฌ๊ฐ ์๋๋ค
๋ผ๋ ๋ง์ด ์๋ค.
- ๋ฐฐ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋์ ๋ชฉ์ ์ ๋์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ด๋ค.
- ๋ฐฐ์น ํ๋ ์์ํฌ์์ ์ค์ผ์ค๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๋๋ค.
- ์ค์ผ์ค๋ง ํ๋ ์์ํฌ๋ ๋ฐฐ์น๋ฅผ ๋์์ฃผ๋ ๋ณด์์ ์ญํ ์ด๋ค.
๋ฐฐ์น์ ๋๋ฉ์ธ ์ฉ์ด
- ๋ฐฐ์น ์์
์ Job์ด๋ผ๊ณ ํ๊ณ Job์ ์คํํ๊ธฐ ์ํ JobLauncher๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
- ํ๋์ Job์ ์ฌ๋ฌ ๊ฐ์ Step์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๊ณ Step์ ItemReader, ItemProcessor, ItemWriter๋ก ๊ตฌ์ฑ๋ ์ ์๋ค.
- Job Launcher์ Job Step์ ๋ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ JobRepository๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
- ํ๋์ Job์ ์ฌ๋ฌ ๊ฐ์ JobInstance๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ์คํํ ๋ ์ง๊ฐ JobParameter๊ฐ ๋๋ค. JobParameter๋ฅผ ๊ฐ์ง๊ณ JobInstance๋ฅผ ๊ตฌ๋ถํ ์ ์๋ค.
- JobInstance๋ค์ ์คํํ ๊ฒฐ๊ณผ๋ฅผ JobExecution์ด๋ผ๋ ๊ฐ์ฒด๋ก ๊ฐ์ง ์ ์๋ค.
- batch ์์
์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๋ JobExecution์ ๋ํด ์ดํด๋ณด๋ฉด JobExecution์ BatchStatus์ ExitStatus๋ผ๋ ๋ ๊ฐ์ง ์ํ๋ฅผ ๊ฐ๋๋ค.
๋ค์์ผ๋ก Step์ ๋ํด ์์๋ณด์.
Job์ ํ๋ ์ด์์ Step์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๊ณ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Step์ StepExecution์ด๋ผ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๊ณ JobExecution์ด ์ฌ๋ฌ ๊ฐ์ StepExecution์ ๊ฐ๋ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
Step
- ๋ฐฐ์น ์์
์ ๋
๋ฆฝ์ ์ด๊ณ ์์ฐจ์ ์ธ ๋จ๊ณ๋ฅผ ์บก์ํํ๋ ๋๋ฉ์ธ ๊ฐ์ฒด
- ๋ชจ๋ Job์ ํ๋ ๋๋ ๊ทธ ์ด์์ Step์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- Step์ ๋ด์ฉ์ ๊ฐ๋ฐ์์ ์ฌ๋์ด๋ฏ๋ก ๋ณต์กํ๊ฑฐ๋ ๋จ์ํ๊ฒ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก StepExecution๋ ๋ ๊ฐ์ง ์ํ๋ฅผ ๊ฐ์ง๋ค.
-
JobRepository๋ Job, Step ๊ตฌํ์ ์ํ CRUD ์์
์ ์ ๊ณตํ๋ค.
โ JobExecution๊ณผ StepExecution์ด ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๋ ์ผ์ ํ๋ค.
-
JobLauncher๋ Job์ ์์ํ๊ธฐ ์ํ ๊ฐ๋จํ ์ธํฐํ์ด์ค์ด๋ค. ๊ตฌํ ์ JobRepository์์ ์ ํจํ JobExecution์ ํ๋ํ๊ณ Job์ ์คํํ๋ค.
โ JobLauncher์ ๊ฒฝ์ฐ์๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๊ฐ ํ๋ ์์ํฌ์๊ฒ ์ ๊ณต๋ฐ์์ ์ฌ์ฉํ ์ ์๋ค.
-
SpringBatch๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋ฉํ ๋ฐ์ดํฐ๋ค์ ์ ๊ณต๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ข ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๋ค.
- ๋ฐฐ์น์ ์ ์ํ ์์
์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ๋์ row๊ฐ ํ๋์ ์์ดํ
์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- Step์ itemReader, itemWriter, itemProcessor๋ก ๊ตฌ์ฑ๋๋ค.
- itemReader๋ Step์์ ์์ดํ
์ ํ๋์ฉ ์ฝ์ด์ค๋ ๊ฐ์ฒด์ด๋ค.
- ์๋ฐ์์ SpringBatch๋ฅผ ์ฌ์ฉํ์ ๋ ์๋์ผ๋ก null์ ๋ฐํํด์ฃผ๊ธฐ ๋๋ฌธ์ Optional๋ก ๊ฐ์ฒด๋ฅผ ํ๋ฒ ๋ ๊ฐ์ธ๋ ๋น์ฉ์ ๊ฐ์ํ์ง ์์๋ ๋๋ค.
- Spring Batch๋ฅผ ๊ตฌํํ ๋ JobLauncher์ JobRepository๋ ํ๋ ์์ํฌ์์ ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ Job๊ณผ Step์ ์ง์คํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๊ณ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๋ค.
- Job์ Step์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ Step์ Tasklet์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- Tasklet์ โ์ต๋ช
Taskletโ๊ณผ โChunk Oriented Taskletโ ์ด๋ ๊ฒ ๋ ์ข
๋ฅ๊ฐ ์๋ค.
- SpringBatch๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด Chunk Oriented Tasklet์ ์ข ๋ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋๋ค.
- Chunk-oriented Processing์ Step์์ itemReader์ itemProcessor์ ๋ํ ์์
์ chunk ๋จ์๋ก ์ํํ๋ค.
- chunk๋ ๊ฐ ์ปค๋ฐ ์ฌ์ด์ ์ฒ๋ฆฌ๋ row(item)์ ์์ด๋ค. ์ฑ๊ณต ์ chunk๋งํผ ์ปค๋ฐ, ์คํจ ์ chunk๋งํผ ๋กค๋ฐฑ์ ์ํํ๊ฒ ๋๋ค.
- itemWriter์์๋ itemReader์ itemProcessor์์ ์ฒ๋ฆฌํ item์ chunk ๋จ์๋งํผ ์์์ chunk๋ฅผ ํ๋ฒ์ writeํ๋ค.
์๋ฐ๋ก ์ดํดํด๋ณด์๋ฉด commitInterval์ด chunk์ size๋ฅผ ์๋ฏธํ๋ค. chunkInterval ๋งํผ ์์ดํ
์ด ์์๋ค๋ฉด write๋ฅผ ํ๋ฒ์ ์งํํ๋ค.
- itemReader๋ Cursor์ Paging ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- Cursor๋ ๋จผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปค๋ฅ์
์ ๊ณ์ ์ ์งํ ์ฑ ์์ดํ
์ ํ๋์ฉ ๋ฝ์์ค๋ ์์
์ด๋ค.
- Paging์ ํ๋ฒ ์ปค๋ฅ์
์ ํ ๋ ์ ์ํ ํ์ด์ง๋งํผ ์์ดํ
์ ํ๋ฒ์ ๊ฐ์ ธ์ค๊ฒ ๋๋ค.
itemReader์ Paging ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ ํ์ด์ง ์ฌ์ด์ฆ๋งํผ ๊ฐ์ ธ์ค๊ฒ ๋ ๋ chunk ์ฌ์ด์ฆ๊ฐ ๋ ํฌ๋ค๋ฉด write๋ฅผ ํ๊ธฐ ์ ์ ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ฌ ํ๋ค. ๋ฐ๋ผ์, ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ ์ ์๋ค.
- ์ฃผ์์ ์ฐธ๊ณ ํด๋ณด๋ฉด chunk ์ฌ์ด์ฆ์ page ์ฌ์ด์ฆ๋ฅผ ๋์ผํ๊ฒ ํด์ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ค๊ณ ์ฐ์ฌ์ ธ ์๋ค.
- ItemWriter๋ chunk ๋จ์๋งํผ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์์ ์ํํ๋ค.
- Spring Batch๋ฅผ ํ์ฉํ๋ค๋ฉด ํ๋์ Job์์ ์ฌ๋ฌ ๊ฐ์ง Step์ ์ ์ํ์ ๋ ์์ฐจ์ ์ผ๋ก Step์ด ์คํ๋ ์ ์๋๋ก ์์๋ฅผ ์ ์ํ ์ ์๋ค.
- ๋ํ ์กฐ์ ๋ถ๊ธฐ๋ฌธ์ ํตํด Step์ ํ๋ฆ์ ์ ์ดํ ์ ์๋ค.
๋ฐฐ์น ์ ํ๋ฆฌ์ผ์ด์
์ด์ํ ๋ Tip์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์
์
ํ๊ณ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ QAํ๊ธฐ ์ด๋ ต๋ค.
๋ฐฐ์น ์ ํ๋ฆฌ์ผ์ด์
๊ด๋ฆฌ ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Quartz ์ค์ผ์ค๋ฌ ํ๋ ์์ํฌ์ ๋ํ์ฌ ์ค์ผ์ค์ ๊ด๋ฆฌํ๋ Admin ํ์ด์ง๋ฅผ ์ง์ ๊ตฌํํ์ฌ ์ฌ์ฉํ๋ค.
- ๋ํ ๋ณดํต CI ํด์ ์ด์ฉํด์๋ ๋ง์ด ์ด์ํ๋ค.
- global properties๋ฅผ ์ด์ฉํด์ ์์ฝ๊ฒ ๊ณตํต ์ค์ ์ ์ฃผ์
ํ ์ ์๋ค.
- Chunk Oriented Processing์ ๊ตฌํํ๊ฒ ๋๋ค๋ฉด Chunk ์ต์ ํ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
์์ฝ
์คํ๋ง ๋ฐฐ์น ์ ๋ชฐ๋๋๋ฐ ์ ๊ธฐํ๋ค์ ! ๋ด์ ์ ์ฉํด๋ณด๊ณ ์ถ์ด์~ ๊ธ ์ ์ฝ์์ต๋๋ค ใ ใ