Spring Batch ๋„์ž…๊ธฐ!! - @Scheduled๋กœ๋Š” ๋ถ€์กฑํ–ˆ๋‹ค(#1)

2025. 7. 3. 18:56ยท๐Ÿ’ชBackend/Spring

์ €๋Š” ์Šคํ”„๋ง ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ์—์„œ ์ฃผ๊ธฐ์ ์ธ ์ž‘์—…์„ @Scheduled ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์™”์Šต๋‹ˆ๋‹ค.


๋งค์ผ ์ฃผ์‹ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ๊ฒฝ์ œ์ง€ํ‘œ ๋ฐœํ‘œ์ผ์—๋Š” ๋ฏผ๊ฐ๋„ ๋ถ„์„์„ ์žฌ์‹คํ–‰ํ•˜๋Š” ๋“ฑ, ๋ฐฐ์น˜์„ฑ ์ž‘์—…์ด ํ•˜๋‚˜๋‘˜ ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

 

์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž, Spring Batch๋ฅผ ์ฐพ์•„๋ณด๊ณ  ๋„์ž…์„ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

 

 

์ œ๊ฐ€ ๋ฆฌํŒฉํ† ๋งํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์˜ ๋ฐฐ์น˜ ์ž‘์—…๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

1. ์ดˆ๊ธฐ ์„ธํŒ…

  • ์ข…๋ชฉ๋ณ„ 3๋…„์น˜ ์ฃผ์‹ ๋ฐ์ดํ„ฐ ์ €์žฅ (์ฐจํŠธ/๋ฏผ๊ฐ๋„ ๋ถ„์„์šฉ)
  • ์ฃผ์š” ๊ฒฝ์ œ์ง€ํ‘œ 3๋…„์น˜ ์ด๋ ฅ ์ €์žฅ (์ง€ํ‘œ ์ผ์ • ์บ˜๋ฆฐ๋” ๋ฐ ๋ถ„์„์šฉ)

2. ๋งค์ผ ๋ฐ˜๋ณต

  • ๋งค์ผ ์ฃผ์‹ ๋งˆ๊ฐ ํ›„ ๋‹น์ผ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ์ €์žฅ

3. ์ฃผ๊ธฐ์  ๋ฐ˜๋ณต

  • ์ง€ํ‘œ ๋ฐœํ‘œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ, ๋ฏผ๊ฐ๋„ ๋ถ„์„ ์žฌ๊ณ„์‚ฐ ๋กœ์ง ์‹คํ–‰

 

 

์™œ @Scheduled๋กœ๋Š” ๋ถ€์กฑํ–ˆ์„๊นŒ์š”?

1. ์‹คํ–‰ ์ด๋ ฅ ์ถ”์ ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค

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

2. ์‹คํŒจ ์‹œ ๋ณต๊ตฌ๊ฐ€ ๊นŒ๋‹ค๋กœ์› ์Šต๋‹ˆ๋‹ค

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

3. ์ž‘์—… ํ๋ฆ„ ๊ด€๋ฆฌ๊ฐ€ ์ง๊ด€์ ์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค

  • ์–ด๋–ค ์ž‘์—…์ด ๋จผ์ € ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๊ณ , ์–ด๋–ค ์ˆœ์„œ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ํ๋ฆ„์„ ๋ˆˆ์œผ๋กœ ๋ณด๊ธฐ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์ œ์–ด๊ฐ€ ๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ์—์„œ ์ˆ˜๋™์œผ๋กœ ์ด๋ค„์กŒ์Šต๋‹ˆ๋‹ค.

4. ํ™•์žฅ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์ด ๋ถ€์กฑํ–ˆ์Šต๋‹ˆ๋‹ค

  • ์ ์  ๋ณต์žกํ•ด์ง€๋Š” ์ž‘์—… ์กฐ๊ฑด (์˜ˆ: ์กฐ๊ฑด๋ถ€ ์‹คํ–‰, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋“ฑ)์„ @Scheduled๋กœ๋Š” ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿง  ๊ทธ๋ ‡๋‹ค๋ฉด Spring Batch๋Š” ๋ญ๊ฐ€ ๋‹ค๋ฅผ๊นŒ์š”?

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

  • ์‹คํ–‰ ์ด๋ ฅ์€ ์ž๋™์œผ๋กœ DB์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค (BATCH_JOB_EXECUTION, BATCH_STEP_EXECUTION ๋“ฑ)
  • ์‹คํŒจํ•œ Step๋งŒ ๋”ฐ๋กœ ์žฌ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • Job → Step → Reader/Processor/Writer ๊ตฌ์กฐ๋กœ ์ž‘์—…์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • ์ƒํƒœ ๊ธฐ๋ฐ˜ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ, ์žฌ์‹œ์ž‘ ์ „๋žต ๋“ฑ์„ ๊ธฐ๋ณธ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

 

 

โœ… ๊ทธ๋ž˜์„œ Spring Batch๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค

์‚ฌ์‹ค ์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํžˆ ์ฃผ๊ธฐ์ ์ธ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์ดˆ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
Spring Batch์˜ "๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ"๋‚˜ "๋ณต์žกํ•œ ๋‹ค๋‹จ๊ณ„ Step ๊ตฌ์„ฑ"์ด ๊ผญ ํ•„์š”ํ•œ ์ƒํ™ฉ์€ ์•„๋‹ˆ์—ˆ์–ด์„œ ๊ทธ ์ƒํ™ฉ์—์„  ์ ํ•ฉํ•œ ํŒ๋‹จ์ด์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

 

๊ทธ๋ž˜์„œ Spring Batch๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋‚˜์”ฉ ๋ฆฌํŒฉํ† ๋ง์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

 

โœ๏ธ ๋‹ค์Œ ๊ธ€ ์˜ˆ๊ณ 

๋‹ค์Œ ๊ธ€์—์„œ๋Š” ์ œ๊ฐ€ Spring Batch๋ฅผ ์ ์šฉํ•˜๋ฉด์„œ ๋งˆ์ฃผํ•œ ๊ตฌ์กฐ์  ๊ณ ๋ฏผ,,,
์ฆ‰ Tasklet ๋ฐฉ์‹๊ณผ Chunk ๋ฐฉ์‹์˜ ์ฐจ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ–ˆ๋Š”์ง€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

 

๊ทธ๋Ÿผ ์•ˆ๋‡ฝ... 

 

'๐Ÿ’ชBackend > Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Spring Batch ๋„์ž…๊ธฐ!! - Tasklet vs Chunk, ๋ญ๊ฐ€ ๋‹ค๋ฅธ๋ฐ? (#2)  (0) 2025.07.05
MSA์—์„œ Response Entity์™€ Response custom class๋กœ ์‘๋‹ต ํ†ต์ผํ•˜๊ธฐ  (2) 2025.03.04
[Spring] DI(์˜์กด์„ฑ ์ฃผ์ž…): ์™œ ํ•„์š”ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?  (5) 2025.02.07
'๐Ÿ’ชBackend/Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Spring Batch ๋„์ž…๊ธฐ!! - Tasklet vs Chunk, ๋ญ๊ฐ€ ๋‹ค๋ฅธ๋ฐ? (#2)
  • MSA์—์„œ Response Entity์™€ Response custom class๋กœ ์‘๋‹ต ํ†ต์ผํ•˜๊ธฐ
  • [Spring] DI(์˜์กด์„ฑ ์ฃผ์ž…): ์™œ ํ•„์š”ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?
.๋ฐ.
.๋ฐ.
  • .๋ฐ.
    Do IT
    .๋ฐ.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • All (40)
      • ๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜ (21)
        • PS (16)
        • SQL (4)
        • ์ด๋ก  (5)
      • ๐ŸŽˆcapstone (2)
      • ๐Ÿ’ชBackend (12)
        • Django (8)
        • Spring (4)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    BFS
    ํŒŒ์ด์ฌ
    programmers
    springscheduler
    resposneentity
    ์„œ๋ธŒ์ฟผ๋ฆฌ
    bruteforce
    ์‘๋‹ตํ˜•์‹
    windowํ•จ์ˆ˜
    python
    PS
    ์ฝ”ํ…Œ
    ์Šคํ”„๋ง๋ฐฐ์น˜
    Batch
    ๋‹ค์ค‘์กฐ์ธ
    Django
    ๋ฌธ์ œํ’€์ด
    BOJ
    ์Šค์ผ€์ค„๋Ÿฌ
    crud
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ETL
    ์žฌ๊ท€
    ์ž๋ฐ”
    responsecustomclass
    SQL
    MYSQL
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    apiresponse
    ๋ฐฑ์ค€
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
.๋ฐ.
Spring Batch ๋„์ž…๊ธฐ!! - @Scheduled๋กœ๋Š” ๋ถ€์กฑํ–ˆ๋‹ค(#1)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”