๐ŸŒฑ์Šคํ”„๋ง ๋ฐฐ์น˜ ์Šคํ„ฐ๋”” 8ํšŒ์ฐจ (with ์ŠคํŽ˜์…œ ๊ฒŒ์ŠคํŠธ ์ด๋™์šฑ๋‹˜, ๊น€๋‚จ์œค๋‹˜)

์†กํ•˜์—ฐยท2024๋…„ 12์›” 4์ผ
4

์Šคํ”„๋ง ๋ฐฐ์น˜ ์Šคํ„ฐ๋”” ์˜คํ”„๋ผ์ธ ์ฒซ๋งŒ๋‚จ ๐ŸŽ‰

[KSUG X Devocean] Spring Batch ์Šคํ„ฐ๋””๊ฐ€ ์–ด๋Š๋ง 8ํšŒ์ฐจ๋ฅผ ๋งž์ดํ–ˆ์Šต๋‹ˆ๋‹ค!
์ง€๋‚œ ํ† ์š”์ผ SKT ์‚ผํ™”ํƒ€์›Œ์—์„œ ๋“œ๋””์–ด ์ฒซ ์˜คํ”„๋ผ์ธ ๋งŒ๋‚จ์ด ์ง„ํ–‰๋˜์—ˆ๋Š”๋ฐ์š”.

์ด๋ฒˆ ๋ชจ์ž„์€ ์ŠคํŽ˜์…œ ๊ฒŒ์ŠคํŠธ(์ด๋™์šฑ ๋‹˜, ๊น€๋‚จ์œค ๋‹˜)๊ณผ ํ•จ๊ป˜ํ•ด ๋”์šฑ ํ’์„ฑํ•œ ์Šคํ„ฐ๋”” ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•จ๊ป˜ ์‚ดํŽด๋ณด๋Ÿฌ๊ฐ€์‹ค๊นŒ์š” ๐Ÿ”

8ํšŒ์ฐจ ์Šคํ„ฐ๋”” ์ฃผ์ œ๐Ÿ’ก

8ํšŒ์ฐจ ์Šคํ„ฐ๋”” ์ฃผ์ œ๋Š” ์Šคํ”„๋ง๋ฐฐ์น˜์—์„œ CompositeItemProcessor ์‚ฌ์šฉํ•ด๋ณด๊ธฐ์˜€์Šต๋‹ˆ๋‹ค!

CompositeItemProcessor๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ItemProcessor๋ฅผ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” Spring Batch์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

์ข€ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์˜ ๊ธ€์— ์ •๋ฆฌํ–ˆ๋Š”๋ฐ ๊ด€์‹ฌ์žˆ๋Š” ๋ถ„๋“ค์€ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”
[Spring Batch 8ํŽธ] CompositeItemProcessor ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๐Ÿ”ง

์˜ค๋Š˜๋„ ์šด๋ช…์˜ ๋ฐœํ‘œ์ž ๋ฝ‘๊ธฐ..!

๋ฐœํ‘œ์ž๋กœ ์„ ์ •๋œ ํ•œ์†”๋‹˜์ด CompositeItemProcessor์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์†Œ๊ฐœํ•ด์ฃผ์…จ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ๋™์–ต๋‹˜๋„(๋งค์ฃผ ๊ณต์œ ํ•ด์ฃผ์‹œ๋Š”๋ฐ ์ตœ๊ณ ๐Ÿ‘) 8์ฃผ์ฐจ ์Šคํ„ฐ๋”” ๋‚ด์šฉ์„ ๊ณต์œ ํ•ด์ฃผ์…จ๋Š”๋ฐ ์ด๋ฒˆ์— ๋“ค์œผ๋ฉด์„œ supabase์— ๋Œ€ํ•ด ์ฒ˜์Œ ์•Œ๊ฒŒ๋˜์—ˆ์–ด์š”! firebase์˜ ๋Œ€ํ•ญ๋งˆ๋ผ๊ณ  ํ•˜๋˜๋ฐ ์‹ ๊ธฐํ•˜๋”๋ผ๊ตฌ์š”?

๊น€๋‚จ์œค๋‹˜์˜ Spring Batch ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์žฌ์ฒ˜๋ฆฌ ๊ฐ€์ด๋“œ๐Ÿ“

์ด๋ฒˆ ์„ธ์…˜์—์„œ๋Š” ๊น€๋‚จ์œค๋‹˜์ด Spring Batch ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์žฌ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์…จ์Šต๋‹ˆ๋‹ค!

์Šคํ”„๋ง ๋ฐฐ์น˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ๋‚ด์šฉ์—์„œ ๊ฐ„๋‹จํžˆ ๊ธฐ์–ต์— ๋‚จ๋Š” ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๋ฉด

1. reader ๊ฐœ์„  - zero offset item Reader์„ ํ™œ์šฉ
2. aggregation ๊ฐœ์„ - Group by ํฌ๊ธฐ, ์ฟผ๋ฆฌ๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ
3. I/O ์ž‘์—… ๊ฐœ์„  - IO์ž‘์—…์„ chunck ๋‹จ์œ„์˜ ์ผ๊ด„ ์ฒ˜๋ฆฌ, ๋ฌถ์–ด์„œ ๊ฐœ์„ 

Spring Batch์˜ ์ตœ์ ํ™”์™€ ์žฌ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด ์‹ค์งˆ์ ์ธ ์‚ฌ๋ก€๋ฅผ ๊ณต์œ ํ•ด์ฃผ์…”์„œ ์ธ์ƒ์ ์ด์—ˆ๋˜ ์„ธ์…˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ๋ณต์žกํ•œ ์ƒํ™ฉ์—์„œ chunk๋‹จ์œ„ ์‹คํ–‰ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋ฉด ์ „์ฒด๋ฅผ ๋กค๋ฐฑํ• ๊ฒƒ์ธ์ง€ ์˜ค๋ฅ˜ ๋‚œ ๋ถ€๋ถ„๋ถ€ํ„ฐ ํ•  ๊ฒƒ์ธ์ง€? ์ด๋Ÿฐ ๋ฌธ์ œ๋“ค์„ ๊ฐ™์ด ๊ณ ๋ฏผํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋˜ ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. (+ ๊ธฐ์•ˆ84 ๋ฉ”ํƒ€๊ฐ€ ๊ธฐ์–ต์— ๋‚จ๋„ค์š”ใ…Žใ…‹ใ…‹ )

์ŠคํŽ˜์…œ ๊ฒŒ์ŠคํŠธ์™€ ํ•จ๊ป˜ํ•˜๋Š” ๊ฐœ๋ฐœ์ž Q&A ํ† ํฌ (with ์ด๋™์šฑ๋‹˜, ๊น€๋‚จ์œค๋‹˜)

๊ทธ ํ›„ ์•ž์„œ ๋ฐœํ‘œํ•ด์ฃผ์‹  ๊น€๋‚จ์œค๋‹˜๊ณผ ์ด๋™์šฑ๋‹˜์ด ์ŠคํŽ˜์…œ ๊ฒŒ์ŠคํŠธ๋กœ ์ฐธ์—ฌํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋“ค์˜ Q&A ํ† ํฌ ์‹œ๊ฐ„์„ ๊ฐ€์กŒ์Šต๋‹ˆ๋‹ค!

ํŠนํžˆ ์‹ค๋ฌด์—์„œ์˜ ๊ฒฝํ—˜๊ณผ ๋ฐฐ๊ฒฝ์ง€์‹์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๋‹ต๋ณ€๋“ค์ด ์ธ์ƒ์ ์ด์—ˆ๋Š”๋ฐ์š”

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

Q: ์Šคํ”„๋ง ๋ฐฐ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ฒช์€ ์žฅ์•  ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
yml ํŒŒ์ผ์—์„œ ์ตœ์ƒ์œ„์— ์žˆ๋Š”๊ฒŒ ๋ฎ์–ด์”Œ์šฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ ์šด์˜ DB์— ํ…Œ์ŠคํŠธํ•˜๋‹ค๊ฐ€ ์ผ๋ถ€ ํ…Œ์ด๋ธ”์„ ๋‚ ๋ฆฐ.. (๋“ค์œผ๋ฉด์„œ ์ •๋ง ํ—‰ํ–ˆ๋˜ ์‚ฌ๋ก€์˜€์Šต๋‹ˆ๋‹ค)
+์ง€๊ธ‰ ๊ด€๋ จํ•œ ์‹ค์ˆ˜ ์‚ฌ๋ก€

Q: ๊ฐœ๋ฐœ์ž ๊ด€์ ์—์„œ ํ•ด์ฃผ๊ณ  ์‹ถ์€ ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ๋‹ค๋ฉด?
์˜ค์ง ์—”์ง€๋‹ˆ์–ด๋ง ์Šคํ‚ฌ๋งŒ ์ถ”๊ตฌํ•˜๊ธฐ๋ณด๋‹ค๋Š” ํšŒ์‚ฌ์™€ ํŒ€์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ถ€๋ถ„์— ๋งž์ถœ ์ˆ˜ ์žˆ๋Š”, ํŒ€์˜ ๋ชฉํ‘œ๋ฅผ ์œ„ํ•ด ๊ฐ€๊ฐ์—†์ด ๋ฌด์–ธ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๋•ํŠธ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ณ ๋ฏผํ•ด๋ณด๊ธฐ (like ๋ฐฐ์—ญ์— ์–ด์šธ๋ฆฌ๋Š” ์—ฐ๊ธฐ๋ฅผ ํ•˜๋Š” ๋ฐฐ์šฐ)

๋Œ€๋ง์˜ ๋„คํŠธ์›Œํ‚น ํƒ€์ž„ ๐ŸŽ

๋งˆ๋ฌด๋ฆฌ๋กœ๋Š” ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํ‚น ์ด๋ฒคํŠธ๋“ค์ด ์ค€๋น„๋˜์–ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค~

์„ ๋ฌผ ์ฆ์ •์‹ ์‹œ๊ฐ„์—๋Š” ์ƒ๋„๋‹˜๊ณผ ๊ธฐ๋„๋‹˜ ํ›„์›ํ•ด์ฃผ์‹  ์ฑ…์ด๋ž‘ ๋จธ๊ทธ์ปต์„ ๋ฐ›์•˜๋Š”๋ฐ์š”! (์ด๊ฒƒ์ €๊ฒƒ ํ›„์›ํ•ด์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค...!)
์ €๋Š” ์š”์ƒˆ ์ฝ”ํ”„๋ง์— ๊ด€์‹ฌ์žˆ์–ด์„œ ์ฝ”ํ‹€๋ฆฐ ์ฑ…์œผ๋กœ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹คใ…Žใ…Žใ…Ž

๊ฒฝ์„๋‹˜๊ป˜์„œ ์ค€๋น„ํ•ด์ฃผ์‹  ์ด๋ฒคํŠธ "๋‚˜์˜ ์„ฑ์žฅ์„ ๋ฐฉํ•ดํ•˜๋Š” ๋ฒฝ"์ด๋ผ๋Š” ์ฃผ์ œ๋กœ ๊ฐ์ž ์ž์‹ ์„ ๋ฐฉํ•ดํ•˜๋Š” ์š”์ธ์„ ์ ๊ณ  ๊ทธ๊ฒƒ์„ ๊ตฌ๊ฒจ๋ฒ„๋ฆฌ๋Š”..ใ…‹ใ…‹ใ…‹ ์†Œ์†Œํ•œ ์ฆ๊ฑฐ์›€๋„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค

๋งˆ์ง€๋ง‰์œผ๋กœ๋Š” ํ”ผ์ž๋ฅผ ๋จน์œผ๋ฉด์„œ ์Šคํ„ฐ๋”” ๊ตฌ์„ฑ์›๋“ค๊ณผ ์—ฌ๋Ÿฌ ์žฌ๋ฏธ์žˆ๋Š” ์ด์•ผ๊ธฐ๋“ค์„ ๋‚˜๋ˆ„๋ฉฐ 8ํšŒ์ฐจ ์Šคํ„ฐ๋”” ๋ชจ์ž„์ด ๋์ด ๋‚ฌ์Šต๋‹ˆ๋‹ค!

๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ...๐Ÿ’ฌ

์ด์ œ ๋‘๋‹ฌ๊ฐ„ ๋‹ฌ๋ ค์˜จ ์Šคํ”„๋ง ๋ฐฐ์น˜ ์Šคํ„ฐ๋””๋„ ๋์ด ๋‚ฉ๋‹ˆ๋‹ค! ์Šคํ”„๋ง์— ๋Œ€ํ•œ ์†Œ์†Œํ•œ ๊ด€์‹ฌ์œผ๋กœ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ ์Šคํ„ฐ๋”” ๊ธฐ๊ฐ„๋™์•ˆ ๋ฐฐ์›Œ๊ฐ€๋Š” ๊ฒŒ ์ •๋ง ๋งŽ์€ ๊ฑฐ ๊ฐ™์•„์š”ใ…Žใ…Ž

์˜คํ”„๋ผ์ธ ํ–‰์‚ฌ ์ค€๋น„ํ•ด์ฃผ์‹  ๊ฒฝ์„๋‹˜๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ ์Šคํ”„๋ง๋ฐฐ์น˜ ์Šคํ„ฐ๋””๋„ ๋งˆ์ง€๋ง‰๊นŒ์ง€ ํŒŒ์ดํŒ…์ž…๋‹ˆ๋‹ค ๐ŸŒฑ

profile
๊ฐœ๋ฐœ ๊ธฐ๋ก ๋„์ ๋„์ โœ๏ธ #๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ์ž

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

comment-user-thumbnail
2024๋…„ 12์›” 5์ผ

8์ฃผ๋™์•ˆ ํ•˜์—ฐ์“ฐ ๋‹˜ ์ง„์งœ ๊ณผ์ œ๋„ ์ •์‹œ์ œ์ถœ, ์ถœ์„๋„ 100% ๋„ˆ๋ฌด ์—ด์‹ฌํžˆ ํ•ด์ฃผ์–ด์„œ ๊ณ ๋งˆ์›Œ์š” ใ… ใ… 
์Šคํ„ฐ๋”” ์ฐธ์—ฌํ•˜์‹œ๋Š” ๋ถ„๋“ค๊ป˜, ์ข‹์€ ์Šคํ„ฐ๋”” ๊ธฐ์–ต ๋‚จ๊ฒจ๋“œ๋ฆฌ๊ณ  ์‹ถ์—ˆ๊ณ ,
์ƒˆ๋กœ์šด ๋ถ„๋“ค๊ณผ์˜ ๋งŒ๋‚จ์œผ๋กœ ์ธํ•ด, ๋‚˜์—๊ฒŒ ๋ฌด์–ธ๊ฐ€ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ์ฐพ๋Š” ๊ธฐํšŒ๋กœ์„œ ์˜คํ”„๋ผ์ธ ๋ชจ์ž„์„ ์ƒ๊ฐํ–ˆ๋˜๊ฒŒ ์•„๋‹Œ๊ฐ€ ์‹ถ์–ด์š”..

์ง€๊ธˆ์ฒ˜๋Ÿผ ๋„ˆ๋ฌด ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•˜๊ณ  ๊พธ์ค€ํ•˜๊ฒŒ ํ•˜๋ฉด ๋‚ด๋…„์— ์ง„์งœ ๋ณธ์ธ์ด ์›ํ•˜๋Š”๊ณณ ๊ผญ ์ด๋ฃฐ ์ˆ˜ ์žˆ์„๊บผ๋ผ ๋ฏฟ์–ด ์˜์‹ฌ์น˜ ์•Š์•„์š”...
ํ™”์ดํŒ…์ด๊ณ , ์ดํ›„์—๋„ ๊พธ์ค€ํžˆ ์ธ์‚ฌํ•ด์š”!!

1๊ฐœ์˜ ๋‹ต๊ธ€