๐ŸŒฑSpring Batch (1) - ๋ฐฐ์น˜์™€ Job, Step์€ ๋ฌด์—‡์ผ๊นŒ?๐Ÿง

Dohyeon Kongยท2024๋…„ 7์›” 9์ผ
0

Spring๐ŸŒฑ

๋ชฉ๋ก ๋ณด๊ธฐ
8/11
post-thumbnail

Spring Batch๋ž€?

Spring Batch๋Š” ๋กœ๊น…/์ถ”์ , ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ์ž‘์—… ์ฒ˜๋ฆฌ ํ†ต๊ณ„, ์ž‘์—… ๋‹ค์‹œ ์‹œ์ž‘, ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๋ฐ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  • ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ์ฒ˜๋ฆฌ ์ž‘์—…์„ '์ž๋™ํ™”'ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋ฐฐ์น˜ ํ”„๋กœ๊ทธ๋žจ(Batch Program)

  • ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๋ณดํ†ต ์Šค์ผ€์ฅด๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ํŠน์ • ์‹œ๊ฐ„์— ์ˆ˜ํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๋งค์ผ ์ƒˆ๋ฒฝ 3์‹œ์— ์ผ๊ด„์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ž‘์—…์ด ๋ฐฐ์น˜ ํ”„๋กœ๊ทธ๋žจ์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ์ด๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ(Scheduler)

  • ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ํŠน์ • ์‹œ๊ฐ„์— ์ˆ˜ํ–‰๋˜๋„๋ก ์˜ˆ์•ฝํ•ด ๋†“์€ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•ด์ฃผ๋Š” ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•œ๋‹ค.

๋ฐฐ์น˜ ํ”„๋กœ๊ทธ๋žจ๊ณผ ์Šค์ผ€์ค„๋Ÿฌ์˜ ์ฐจ์ด์ ๐Ÿง

  • ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ์‹คํ–‰ ๋ฐฉ๋ฒ•๊ณผ ๋ชฉ์ ์— ๋”ฐ๋ผ ์—„์—ฐํžˆ ๋‹ค๋ฅด๋‹ค.
  • ๋ฐฐ์น˜ ํ”„๋กœ๊ทธ๋žจ์€ ์ผ๊ด„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๋ฉฐ ์ •ํ•ด์ง„ ์‹œ๊ฐ„์— ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž์˜ ๋ช…๋ น์ด ์žˆ์„ ๋•Œ ์‹คํ–‰ํ•˜๋Š” ๋ฐ˜๋ฉด์—
  • ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์ •ํ•ด์ง„ ์‹œ๊ฐ„์— ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ฉฐ, ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ž‘์—…์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•œ๋‹ค.

๋ฐฐ์น˜ ์‚ฌ์šฉ ๋ชฉ์ 

๋ชฉ์ ์„ค๋ช…
๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋กœ๊ทธ ํŒŒ์ผ, CSV ํŒŒ์ผ ๋“ฑ์—์„œ '๋ฐ์ดํ„ฐ ์ถ”์ถœ ๋ฐ ์ฒ˜๋ฆฌ'๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ์ด ๋œ๋‹ค.
์ž๋™ํ™”๋œ ์ž‘์—… ์ฒ˜๋ฆฌ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฃผ๊ธฐ์ ์œผ๋กœ '๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—…'์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.
๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์—ฌ๋Ÿฌ ์„œ๋ฒ„์—์„œ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
์žฌ์‹œ๋„ ๋ฐ ๋กœ๊น…๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์ž๋™ ์žฌ์‹œ๋„ ๋ฐ ๋กœ๊ธฐ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
๋ฐ์ดํ„ฐ ๋ถ„์„๋ฐ์ดํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ๋ฐฑ์—… ๋ฐ ๋ณต์›, ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋“ฑ ๋‹ค์–‘ํ•œ ์šฉ๋„์— ์‚ฌ์šฉ๋œ๋‹ค.

๋ฐฐ์น˜ ์ฃผ์š” ๊ธฐ๋Šฅ

์ฃผ์š” ๊ธฐ๋Šฅ์„ค๋ช…
Job๊ณผ Step์„ ์ด์šฉํ•œ ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์Šค ๊ตฌํ˜„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.๋ฐฐ์น˜ ์ฒ˜๋ฆฌ์˜ ๋‹จ์œ„ ์ž‘์—…(Job)๊ณผ ์ž‘์€ ๋‹จ์œ„ ์ž‘์—…(Step)์„ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
Chunk ์ง€ํ–ฅ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ํ†ตํ•œ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•œ๋‹ค.Chunk ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
Quartz, Cron ๋“ฑ์˜ ์Šค์ผ€์ฅด๋Ÿฌ๋ฅผ ์ด์šฉํ•œ ๋ฐฐ์น˜ ์ž‘์—… ์Šค์ผ€์ค„๋ง์„ ์ œ๊ณตํ•œ๋‹ค.์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์น˜ ์ž‘์—…์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ์Šค์ผ€์ค„๋ง ์ œ๊ณตํ•œ๋‹ค.
Batch ์ž‘์—…์— ๋Œ€ํ•œ ๋กœ๊น…๊ณผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.Batch ์ž‘์—… ์ˆ˜ํ–‰ ์ค‘ ๋กœ๊น…๊ณผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜์—ฌ ์•ˆ์ •์ ์ธ ๋ฐฐ์น˜ ์ž‘์—…์„ ์ œ๊ณตํ•œ๋‹ค.

Chunk ์ง€ํ–ฅ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

  • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ '๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์†Œํ™”'ํ•˜๊ณ  ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์€ Chunk ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌ'ํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

Chunk๋ž€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์•„์ดํ…œ์„ ๋ฌถ์€ ํ•˜๋‚˜์˜ ๋ฉ์–ด๋ฆฌ, ๋ธ”๋ก์„ ์˜๋ฏธํ•œ๋‹ค.
ํ•œ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์•„์ดํ…œ์„ ์ž…๋ ฅ ๋ฐ›์•„ Chunk ๋‹จ์œ„์˜ ๋ฉ์–ด๋ฆฌ๋กœ ๋งŒ๋“  ํ›„ Chunk ๋‹จ์œ„๋กœ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

Quartz

  • Java ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ ์†Œ์Šค '์Šค์ผ€์ค„๋ง ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ'์ด๋ฉฐ ํŠน์ • ์‹œ๊ฐ„์— ์ž‘์—…์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ์˜ˆ์•ฝ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

Cron

  • Cron์€ ๋ฆฌ๋ˆ…์Šค์™€ ์œ ๋‹‰์Šค ๊ณ„์—ด ์šด์˜์ฒด์ œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์˜ˆ์•ฝ ์ž‘์—… '์Šค์ผ€์ค„๋ง ์‹œ์Šคํ…œ'์ด๋‹ค. ํŠน์ • ์‹œ๊ฐ„์— ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

์ „์ฒด์ ์ธ ์ง„ํ–‰ ๊ณผ์ •

  • Job Launcher๋กœ Job์„ ์‹คํ–‰ํ•œ๋‹ค. (Job Launcher -> Job)
  • Job์€ Step์„ ํ†ตํ•ด ์‹ค์ œ ๋ฐฐ์น˜์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. (Job -> Step)
  • Step์—์„œ ์ฝ์–ด์˜ค๊ณ (Item Reader) -> ์ฒ˜๋ฆฌํ•˜๊ณ (Item Processor) -> ์ €์žฅ(Item Writer)์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

Job

Job์ด๋ž€ ํ•˜๋‚˜ ์ด์ƒ์˜ Step์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ '๋ฐฐ์น˜ ์ฒ˜๋ฆฌ์˜ ์ตœ์ƒ์œ„ ๋‹จ์œ„'๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  • ์‹คํ–‰ ์‹œ์ ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 1๊ฐœ์˜ Job์€ 1๊ฐœ ์ด์ƒ์˜ Step์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

* Job์˜ ์ˆ˜ํ–‰๊ณผ์ •

* JobParameters๊ฐ€ ํฌํ•จ๋œ ์ˆ˜ํ–‰๊ณผ์ •

์ˆ˜ํ–‰๊ณผ์ •์—์„œ ๋‚˜์˜จ ์šฉ์–ด ์ •๋ฆฌ๐Ÿ“’

์šฉ์–ด์„ค๋ช…
Job๋ฐฐ์น˜ ์ฒ˜๋ฆฌ์˜ โ€˜๋‹จ์œ„ ์ž‘์—…โ€™์„ ์˜๋ฏธํ•œ๋‹ค.
JobInstanceํ•˜๋‚˜์˜ Job ์‹คํ–‰์„ ๋‚˜ํƒ€๋‚ด๋Š” โ€˜์ธ์Šคํ„ด์Šคโ€™๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
JobParametersJob ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ โ€˜ํŒŒ๋ผ๋ฏธํ„ฐโ€™๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
JobRepositoryJob ์‹คํ–‰ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” โ€˜์ €์žฅ์†Œโ€™๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
JobLauncherJob์„ ์‹คํ–‰ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
JobExecutionJob ์‹คํ–‰ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
JobExecutionListenerJob ์‹คํ–‰ ์ „ํ›„๋กœ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Step

Step์ด๋ž€ ์‹ค์ œ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ Spring Batch Job์•ˆ์—๋Š” ํ•œ ๊ฐœ ์ด์ƒ์˜ Step์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

  • Step์—์„œ๋Š” ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” Tasklet ๋ฐฉ์‹๊ณผ Reader-Processor-Writer ๋ฌถ์Œ์œผ๋กœ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” Chunk ๋ฐฉ์‹์ด ์žˆ๋‹ค.

Step์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด ์ •๋ฆฌ๐Ÿ“’

์šฉ์–ด์„ค๋ช…
StepJob์„ ๊ตฌ์„ฑํ•˜๋Š” ์ž‘์€ ๋‹จ์œ„ ์ž‘์—…์„ ์˜๋ฏธํ•œ๋‹ค.
ItemReader๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
ItemProcessor์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
ItemWriter์ฒ˜๋ฆฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
ExecutionContextStep ์‹คํ–‰ ์ค‘ ํ•„์š”ํ•œ ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
StepExecutionStep ์‹คํ–‰ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
StepExecutionListnerStep ์‹คํ–‰ ์ „ํ›„๋กœ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ฐธ๊ณ  ์‚ฌ์ดํŠธ

profile
์ฒœ์ฒœํžˆ, ๊พธ์ค€ํžˆ, ๊ทธ๋ฆฌ๊ณ  ๋๊นŒ์ง€

0๊ฐœ์˜ ๋Œ“๊ธ€