๐Ÿ’ป Software Engineering/Java Spring

Spring Boot Batch - ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ

MayKim51 2021. 11. 28. 22:27

๋ช‡ ์ฃผ์ „ ์‚ฌ์šฉ์ž 6๋งŒ๋ช…์„ ๋Œ€์ƒ์œผ๋กœ Batch ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋‚˜๋งˆ๋„ ๋ชจ์ˆ˜๋Š” 30๋งŒ๋ช…+ ์ด์—ˆ๊ณ  ๊ทธ์ค‘์—์„œ 6๋งŒ๋ช…์„ ์ถ”๋ ค์„œ, ์ถ”๋ฆฐ ์‚ฌ์šฉ์ž ๋Œ€์ƒ์œผ๋กœ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด Task...
9์›”๋‹ฌ์— ์™„์„ฑํ•ด๋†“๊ณ ๋„ ํ‹ˆํ‹ˆ์ด ์ž˜๋ชป๋œ ๊ฒƒ์€ ์—†๋‚˜ ํ™•์ธํ•  ์ •๋„๋กœ ๋งค์šฐ๋งค์šฐ ์‹ ๊ฒฝ์ด ์“ฐ์˜€์—ˆ๋Š”๋ฐ,
๋“œ๋””์–ด ๋ช‡ ์ฃผ์ „ ์ฒ˜์Œ ์šด์˜ํ™˜๊ฒฝ์—์„œ ์ˆ˜ํ–‰ํ•œ ๋‚ , ๊ฒฐ๋ก ์ ์œผ๋กœ ๊ธฐ๋Šฅ์€ ์ •์ƒ์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ–ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ๋ฐฐ์น˜ ์ž‘์—…์ด ์ƒ๊ฐ๋ณด๋‹ค ๋Š๋ฆฌ๊ฒŒ ๋Œ์•˜๋‹ค. ์–ด๋Š์ •๋„๋ƒ๋ฉด ๋ฐฅ ๋จน๊ณ  ๋ฐ–์— ๋‚˜๊ฐ€์„œ ์ปคํ”ผ ๋œจ๊ฑฐ์šด ๊ฑฐ ํ•œ์ž” ํ˜ธํ˜ธํ˜ธ ์ฒœ์ฒœํžˆ ๋ถˆ์–ด๋จน๊ณ  ๋“ค์–ด์™€์„œ, ๊ฑฐ๊ธฐ๋‹ค ๋“œ๋ผ๋งˆ ํ•œ ํŽธ ๋ด์•ผ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋Š” ์†๋„. T.T

๊ฐœ์„ ์ด ์‹œ๊ธ‰ํ•ด์„œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๋ฏธ๋ฆฌ ์ •๋ฆฌํ•ด๋‘”๋‹ค. (์ž˜ ์ ์šฉ๋˜๋ฉด ์ข‹์€ Before & After๊ฐ€ ๋˜๊ฒ ์ง€..?)
์šฐ์„ ์€ ๋‚˜๋งŒ ์•Œ์•„๋ณด๊ฒŒ๋” ์š”์ ๋งŒ ์ •๋ฆฌํ•˜์ง€๋งŒ, ์ดํ•ด๋„๊ฐ€ ๊นŠ์–ด์ง€๋ฉด ๋ˆ„๊ฐ€ ์ฝ์–ด๋„ ์•Œ์•„๋จน๊ฒŒ๋” ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋˜๊ฒ ์ง€.

์ฐธ๊ณ ๋กœ ๋‚˜์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ์Šคํ„ฐ๋””๋Š” Output์ด ์žˆ์–ด์•ผ ๋‡Œ์— ๊ทธ ๋‚ด์šฉ์ด ๋‚จ๋Š”๋ฐ, ๋ธ”๋กœ๊ทธ post๋„ ๊ทธ output์œผ๋กœ์„œ์˜ ์—ญํ• ์ด ์œ ํšจํ•œ์ง€ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ธฐ ์œ„ํ•ด ๋ช‡๋ฒˆ์€ ํฌ์ŠคํŠธ ์ •๋ฆฌ๋ฅผ ๋” ํ•ด๋ณผ ์ƒ๊ฐ์ด๋‹ค.


Parallel Processing ๋ฐฉ์‹ ๋ช‡๊ฐ€์ง€

* ํฌ๊ฒŒ Multi process, Single Process + Multithread๋กœ ๋‚˜๋‰œ๋‹ค
* ๊ทธ ์ค‘ Multithreaded Steps, Parallel Steps, Partitioning ๋งŒ ์ •๋ฆฌํ•ด๋ณธ๋‹ค

Multithreaded Steps

* Single Process & Multithread
* ํ•œ Step์„ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋กœ ์‹คํ–‰ํ•œ๋‹ค.
* Taskexecutor๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

Parallel Steps

* Single process & multihtread
* ๊ฐ์ž ๋‹ค๋ฅธ step๋“ค์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
* flow๋ฅผ ๋งŒ๋“ค๊ณ  > FlowBuilder๋กœ Flow๋ฅผ ๋งŒ๋“ ๋‹ค.
* ์ฃผ์˜! ๊ฐ๊ฐ์˜ Flow ๋ณ„ start ์ดํ›„์— ์žˆ๋Š” next๋Š”, ๋ชจ๋“  Flow์˜ start๊ฐ€ ์‹คํ–‰๋œ ํ›„ next๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

Partitioning

* 'Single process + Multithread' ๋˜๋Š” 'Multi Processes'
* Implement by PartitionHandler and StepExecutionSplitter
* TaskExecutorPartitionHandler ๋Š” PartitionHandler ์˜ ๊ตฌํ˜„์ฒด. Step์„ ์—ฌ๋Ÿฌ thread๋กœ ์‹คํ–‰ํ•œ๋‹ค.

Spring Batch vs. Spring Boot Batch

* @EnableBatchProcessing ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๊ธฐ์กด์˜ Batch ์„ค์ •์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค
* Debugging์ด ๊ฐ€๋Šฅํ•˜๋‹ค
* xml ์„ค์ • ๋Œ€์‹  Java config ๋ฐฉ์‹ ์„ค์ •์„ ๊ถŒ๊ณ ํ•œ๋‹ค
* ์‹คํ–‰๋ฐฉ๋ฒ•์ด ๊ฐ„๋‹จํ•˜๋‹ค
* Logging framework๊ฐ€ ๋‚ด์žฅ๋˜์–ด์žˆ๋‹ค.

---
์ฐธ๊ณ 
* https://godekdls.github.io/Spring%20Batch/scalingandparallelprocessing/
* http://www.chidoo.me/index.php/2017/12/19/spring-batch-parallel-execution/
* https://oingdaddy.tistory.com/182