Back-end/Spring

[Spring] Spring Batch๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์‹ฑ

๋ฅ˜๊ฑด 2025. 1. 20. 17:15
๋ฐ˜์‘ํ˜•

๐Ÿ’ก Spring Batch์ด๋ž€?

Spring Batch๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฝ๋Ÿ‰ํ™”๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ๊ด„ ์ฒ˜๋ฆฌ(Batch Processing) ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ค€๋‹ค.

 

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

 

๋˜ํ•œ ์ตœ์ ํ™” ๋ฐ ํŒŒํ‹ฐ์…”๋‹ ๊ธฐ์ˆ ์„ ํ†ตํ•ด ๋Œ€์šฉ๋Ÿ‰ ๋ฐ ๊ณ ์„ฑ๋Šฅ ๋ฐฐ์น˜ ์ž‘์—…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ณ ๊ธ‰ ๊ธฐ์ˆ  ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด์ฃผ๊ธฐ๋„ ํ•œ๋‹ค.

 

  • ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์‹ฑ์ด๋ž€?
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋‚˜ ํŠธ๋žœ์žญ์…˜์„ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ 
    • ์ฆ‰, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น ๋ฅธ ์‘๋‹ต์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ์„œ๋น„์Šค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  •  

 

 

 

โœˆ๏ธ Spring Batch์˜ ์žฅ์ 

1. Chunk ๊ธฐ๋ฐ˜ ์ž‘์—… ์ฒ˜๋ฆฌ

  • Spring Batch๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Chunk ๊ธฐ๋ฐ˜์˜ ์ฒ˜๋ฆฌ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์€ ๋‹จ์œ„์˜ Chunk๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ Chunk๋ฅผ ์ˆœ์ฐจ์  ํ˜น์€ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Chunk ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ปค๋ฐ‹ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ž‘์—…์ด ์‹คํŒจํ•  ์‹œ ํ•ด๋‹น Chunk๋งŒ ๋กค๋ฐฑํ•˜๊ณ  ์žฌ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์šฉ์ด์„ฑ์„ ์ œ๊ณตํ•ด์ค€๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š”๋ฐ ์ƒ๋‹นํ•œ ๋„์›€์„ ์ค€๋‹ค.

2. ํšจ์œจ์ ์ธ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

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

3. ์„ธ๋ถ€์ ์ธ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

์‹คํŒจํ•œ ๋ฐฐ์น˜ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜, ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ค๋‹ˆ๋‹ค.

4. ์ฟผ๋ฆฌ ๊ทธ๋ฃนํ™” ์ฒ˜๋ฆฌ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํšจ์œจ์ ์ธ ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•ด JDBC ๋ฐฐ์น˜ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ๋ฐฐ์น˜๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ๋น„์šฉ์„ ์ค„์ด๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปค๋„ฅ์…˜ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์ „์ฒด ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

๐Ÿ’ก ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

Spring Batch๋Š” Job๊ณผ Step์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋‚˜๋‰œ๋‹ค.

  • Job: ์—ฌ๋Ÿฌ Step์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐฐ์น˜ ์ž‘์—…์˜ ๋‹จ์œ„
  • Step: Job ๋‚ด์˜ ๊ฐœ๋ณ„ ์ž‘์—… ๋‹จ์œ„๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์“ฐ๋Š” ์—ญํ•  ์ˆ˜ํ–‰
    • Tasklet: Step ๋‚ด์—์„œ ๋‹จ์ผ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ
    • Chunk ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ: ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ • ํฌ๊ธฐ์˜ ๋ฌถ์Œ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹
    • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ : ์—ฌ๋Ÿฌ Step์„ ๋ณ‘๋ ฌ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ํ•œ Step์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋“ฑ ๋™์‹œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋‹จ์ถ•

 

1. Chunk ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ

์Šคํ”„๋ง ๋ฐฐ์น˜์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์€ ๋‹จ์œ„(Chunk)๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ , ์ผ์ •๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ ํ›„ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•จ์œผ๋กœ์จ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

  • Chunk๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฌถ์Œ์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์Šค์—์„œ ํ•œ ๊ฑด์”ฉ ์ฝ์–ด๋“ค์ธ ํ›„, ์ฒ˜๋ฆฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ •๋Ÿ‰์ด ๋  ๋•Œ๊นŒ์ง€ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์œ ์ง€ํ•˜๋‹ค๊ฐ€ Chunk๊ฐ€ ์™„์„ฑ๋˜๋ฉด ์ผ๊ด„์ ์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

Chunk ์ฒ˜๋ฆฌ ํ๋ฆ„

Chunk ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ์˜ ๊ธฐ๋ณธ์ ์ธ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  • ์ฝ๊ธฐ(Read): ์†Œ์Šค(ํŒŒ์ผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ)์—์„œ ํ•œ ๋ฒˆ์— ํ•œ ๊ฑด์”ฉ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜จ๋‹ค.
  • ์ฒ˜๋ฆฌ(Process): ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜๊ฑฐ๋‚˜ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์“ฐ๊ธฐ(Write): ์ผ์ • ํฌ๊ธฐ์˜ Chunk๊ฐ€ ์™„์„ฑ๋˜๋ฉด, ์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด„ ์ €์žฅํ•œ๋‹ค.

Chunk ํฌ๊ธฐ ์„ค์ •

Chunk ํฌ๊ธฐ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. Chunk ํฌ๊ธฐ๊ฐ€ ์ž‘์„์ˆ˜๋ก ์ž์ฃผ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฏ€๋กœ ์•ˆ์ •์„ฑ์€ ๋†’์•„์ง€์ง€๋งŒ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด, Chunk ํฌ๊ธฐ๊ฐ€ ํด์ˆ˜๋ก ์„ฑ๋Šฅ์ด ๋†’์•„์ง€์ง€๋งŒ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์žฌ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง„๋‹ค.

 

 

2. ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ

Spring Batch๋Š” ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ, ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

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

 

- ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์ฒ˜๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ์…‹์„ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹
- ํŒŒํ‹ฐ์…”๋‹์€ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ์…‹์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋ถ„๋ฆฌ์‹œ์ผœ์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ฐ ์˜ค๋ฅ˜ ๋ณต๊ตฌ

Spring Batch๋Š” ๊ฐ Chunk๋ฅผ ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋„์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น Chunk์˜ ๋ชจ๋“  ์ž‘์—…์ด ๋กค๋ฐฑ๋˜๊ณ , ์ด์ „์— ์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์žฌ์‹œ์ž‘ ๋ฐ ์˜ค๋ฅ˜ ๋ณต๊ตฌ

๋ฐฐ์น˜ ์ž‘์—…์ด ์ค‘๊ฐ„์— ์ค‘๋‹จ๋˜๋”๋ผ๋„, Spring Batch๋Š” ์ž‘์—… ์ƒํƒœ๋ฅผ ๊ธฐ๋กํ•˜์—ฌ ์žฌ์‹œ์ž‘ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๋ฐฐ์น˜ ์ž‘์—…์„ ์žฌ์‹œ์ž‘ํ•˜๋ฉด, ์ค‘๋‹จ๋œ ์ง€์ ๋ถ€ํ„ฐ ์ด์–ด์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

 

 

๊นจ์•Œ ์ •๋ณด

1. JDBC์™€ JPA์— ๋Œ€ํ•œ ๋ฐฐ์น˜ ํ…Œ์ŠคํŠธ ์‹œ JDBC๊ฐ€ JPA์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ๋” ์ข‹๋‹ค.

 

insertํ•  ๋ฐ์ดํ„ฐ๊ฐ€ 10๋งŒ๊ฑด์ด ๋„˜์–ด๊ฐ„๋‹ค๋ฉด JDBC ๊ณ ๋ คํ•ด๋ณด๋Š” ๊ฒŒ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค.

bulk insert๋‚˜ bulk delete ๋•Œ๋ฆฌ๋Š”๋ฐ ๊ตณ์ด jpa๋กœ ๊ฐ์ฒด๋กœ ๋‹ค๋ฃจ๋Š”๊ฒŒ ๋น„ํšจ์œจ์ ์ผ๋•Œ๊ฐ€ ๋งŽ๊ธฐ์—

 

์ฐธ๊ณ 

https://velog.io/@ktf1686/Spring-Spring-Batch%EB%9E%80

https://velog.io/@ktf1686/Spring-Spring-Batch-Amazon-SQS-%EC%A0%81%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0

https://velog.io/@ksngh/SPRING-BATCH-%EC%99%80-kafka-1

๋ฐ˜์‘ํ˜•