[ Spring batch ] Job๊ณผ Step

๋ฐ•๋ณ‘์ฐฌยท2021๋…„ 9์›” 29์ผ
0

spring batch

๋ชฉ๋ก ๋ณด๊ธฐ
2/2
post-custom-banner

๐Ÿ“Œ Job์ด๋ž€?

  • Job์€ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋งŒ๋“ค์–ด ํฌํ˜„ํ•œ ๊ฐ์ฒด.
  • ์ „์ฒด ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ์— ์žˆ์–ด ํ•ญ์ƒ ์ตœ์ƒ๋‹จ ๊ณ„์ธต์— ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ตœ์†Œ ํ•˜๋‚˜์˜ Step์„ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ ์—„์ฒญ๋‚˜๊ฒŒ ๋ณต์žกํ•œ Job์ด ์•„๋‹Œ ์ด์ƒ 2-10๊ฐœ์˜ Step์„ ๊ถŒ์žฅํ•œ๋‹ค

๐Ÿ“Œ Step์ด๋ž€?

  • Step์€ ์‹ค์ง์ ์ธ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋ฅผ ์ •์˜ํ•˜๊ณ  ์ œ์–ด ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๋„๋ฉ”์ธ ๊ฐ์ฒด.
  • job์„ ๊ตฌ์„ฑํ•˜๋Š” ๋…๋ฆฝ๋œ ์ž‘์—…์˜ ๋‹จ์œ„.
  • tasklet ๊ธฐ๋ฐ˜ ์Šคํ…๊ณผ chunk ๊ธฐ๋ฐ˜ ์Šคํ…์ด ์žˆ๋‹ค.

tasklet

  • ์Šคํ…์ด ์ค‘์ง€๋  ๋•Œ๊นŒ์ง€ exeute ๋ฉ”์„œ๋“œ๊ฐ€ ๊ณ„์† ๋ฐ˜๋ณตํ•˜์—ฌ ์ˆ˜ํ–‰๋œ๋‹ค.
  • ์ดˆ๊ธฐํ™”, ์ €์žฅ, ํ”„๋กœ์‹œ์ € ์‹คํ–‰, ์•Œ๋ฆผ ์ „์†ก ๋“ฑ๊ณผ ๊ฐ™์€ job์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

chunk

  • ItemReader, ItemProcessor, ItemWriter๋ผ๋Š” 3๊ฐœ์˜ ์ฃผ์š” ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ItemProcessor๊ฐ€ ํ•„์ˆ˜๋Š” ์•„๋‹ˆ๋‹ค.

๐Ÿ“Œ Job ์‹คํ–‰

job์„ ์‹คํ–‰ํ•˜๋ฉด job์€ ๊ฐ step์„ ์‹คํ–‰ํ•œ๋‹ค. ๊ฐ step์ด ์‹คํ–‰๋˜๋ฉด JobRepository๋Š” ํ˜„์žฌ ์ƒํƒœ๋กœ ๊ฐฑ์‹ ๋œ๋‹ค.
์ฆ‰ ์‹คํ–‰๋œ ์Šคํ…, ํ˜„์žฌ ์ƒํƒœ, ์ฝ์€ ์•„์ดํ…œ ๋ฐ ์ฒ˜๋ฆฌ๋œ ์•„์ดํ…œ ์ˆ˜ ๋“ฑ์ด ๋ชจ๋‘ JobRepository์— ์ €์žฅ๋œ๋‹ค.

๐Ÿ’ก JobRepository

  • ๋ฐฐ์น˜์— ๊ด€๋ จ๋œ ์ˆ˜์น˜๋ฐ์ดํ„ฐ(์‹œ์ž‘์‹œ๊ฐ„, ์ข…๋ฃŒ์‹œ๊ฐ„, ์ƒํƒœ, ์ฝ๊ธฐ/์“ฐ๊ธฐ ํšŸ์ˆ˜ ๋“ฑ)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ job์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌ ํ•œ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๊ด€๊ณ„ํ˜• DB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์น˜ ๋‚ด์˜ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ณต์œ ํ•œ๋‹ค.

๐Ÿ’ก JobLauncher

  • Job.execute ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ job์„ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • ์žก์˜ ์žฌ์‹คํ–‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ, ์žก์˜ ์‹คํ–‰๋ฐฉ๋ฒ•, ํŒŒ๋ผ๋ฏธํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๋“ฑ์˜ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๐Ÿ”ง ์ž‘๋™ ์›๋ฆฌ

์—ฌ๋Ÿฌ ์•„์ดํ…œ์œผ๋กœ ์ด๋ค„์ง„ ์ฒญํฌ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์Šคํ… ๋‚ด์—์„œ ์™„๋ฃŒ๋œ๋‹ค.
โฌ‡๏ธ
JobRepository ๋‚ด์— ์žˆ๋Š” JobExecution ๋˜๋Š” StepExecution์„ ํ˜„์žฌ ์ƒํƒœ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
โฌ‡๏ธ
step์€ ItemReader๊ฐ€ ์ฝ์€ ์•„์ดํ…œ ๋ชฉ๋ก์„ ๋”ฐ๋ผ๊ฐ„๋‹ค.
โฌ‡๏ธ
step์ด ๊ฐ ์ฒญํฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋งˆ๋‹ค, JobRepository์˜ StepExecution์˜ step ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ๋‹ค.
โฌ‡๏ธ
ํ˜„์žฌ๊นŒ์ง€์˜ ์ปค๋ฐ‹ ์ˆ˜, ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ ์‹œ๊ฐ„, ๊ธฐํƒ€ ๋‹ค๋ฅธ ์ •๋ณด ๋“ฑ์ด JobRepositry์— ์ €์žฅ๋œ๋‹ค.
โฌ‡๏ธ
Job ๋˜๋Š” Step์ด ์™„๋ฃŒ๋˜๋ฉด, JobRepository ๋‚ด์— ์žˆ๋Š” JobExecution ๋˜๋Š” StepExecution์ด ์ตœ์ข… ์ƒํƒœ๋กœ ์—…๋ฐ์ดํŠธ ๋œ๋‹ค.

โ“ JobExecution๊ณผ StepExecution

๐Ÿ’ก JobInstance

  • Job์˜ ๋…ผ๋ฆฌ์  ์‹คํ–‰์ด๋‹ค.
  • Job์˜ ์ด๋ฆ„๊ณผ Job์˜ ๋…ผ๋ฆฌ์  ์‹คํ–‰์„ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ชจ์Œ์ด๋‹ค.
  • ์žก์ด ๋‹ค๋ฅธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด JobInstance๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • JobInstance๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ JobExecutions๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก JobExecution

  • Job์˜ ์‹ค์ œ ์‹คํ–‰์„ ์˜๋ฏธํ•œ๋‹ค.
  • Job์„ ๊ตฌ๋™ํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ƒˆ๋กœ์šด JobExecution์„ ์–ป๊ฒŒ๋œ๋‹ค.
  • JobExecution์€ job์ด๋‚˜ step์ด ์ง„ํ–‰๋  ๋•Œ ๋ณ€๊ฒฝ๋œ๋‹ค. ์žก ์ƒํƒœ๋Š” JobExecution์˜ ExecutionContext์— ์ €์žฅ๋œ๋‹ค.

๐Ÿ’ก StepExecution

  • Step์˜ ์‹ค์ œ ์‹คํ–‰์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๋ฐ˜๋ฉด StepInstance๋ผ๋Š” ๊ฐœ๋…์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • JobExecution์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ StepExecution๊ณผ ์—ฐ๊ด€๋œ๋‹ค.

๐Ÿ’ก ExecutionContext

  • ๋ฐฐ์น˜ job์˜ ์„ธ์…˜์ด๋‹ค.
  • ExecutionContext๊ฐ€ ๋‹ด๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ๋“ค์ด JobRepository์— ์ €์žฅ๋˜๋ฏ€๋กœ ์•ˆ์ „ํ•˜๋‹ค.
  • ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ธ์…˜๊ณผ ๋‹ค๋ฅธ ์ ์€ job์„ ๋‹ค๋ฃจ๋Š” ๊ณผ์ •์—์„œ ์‹ค์ œ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ExecutionContext๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.
profile
์•ˆ๋…•ํ•˜์„ธ์š”
post-custom-banner

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