๐ Spring Batch Repeat
- Batch Processing๋ ๋จ์ ์ต์ ํ ๋๋ ๋ฐ๋ณต์ ์ธ ์์ ์ ๊ดํ ๊ฒ์ ๋๋ค.
- ๋ฐ๋ณต์ ์ ๋ตํํ๊ณ ์ผ๋ฐํํ๊ธฐ์ํด Spring Batch์์๋ ๋ฐ๋ณต ์์ ์ ์ ์ดํ๋ RepeatOperation ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ RepeatTemplate ํด๋์ค ์ ๋๋ค
๐ ๋ฐ๋ณต ์ข ๋ฃ๋ฅผ ๊ฒฐ์ ํ๋ ์ธ ๊ฐ์ง ํญ๋ชฉ
Spring Batch์์์ ๋ฐ๋ณต ์์ ์ ๋ํ ์ข ๋ฃ ์ฒ๋ฆฌ๋ RepeatTemplate ํด๋์ค์์ ์ค์ ํ ์ ์์ต๋๋ค.
1. RepeatStatus
- ์คํ๋ง ๋ฐฐ์น์ ์์ ์ด ์ข ๋ฃ๋์๋์ง ํ๋ณํ๊ธฐ ์ํ Enum
2. CompletionPolicy
- RepeatTemplate ๋ด๋ถ์์ ๋ฐ๋ณต ๋ฉ์๋์ ์ข ๋ฃ๋ CompletionPolicy์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
- ์คํ ํ์ ๋๋ ์๋ฃ์๊ธฐ, ์ค๋ฅ ๋ฐ์ ์ ์ํํ ์์ ์ ๋ํ ๋ฐ๋ณต์ฌ๋ถ ๊ฒฐ์
- SimpleCompletionPolicy์์๋ RepeatStatus๋ฅผ ์ฌ์ฉํ์ฌ ์ต๋ ๊ณ ์ ํ์(ChunkSize)๋งํผ ์คํํ ์ ์์ต๋๋ค.
- TimeoutTerminationPolicy: ๋ฐ๋ณต ์์ ๋ถํฐ ํ์ฌ ์์ ๊น์ง ์์๋ ์๊ฐ์ด ์ค์ ๋ ์๊ฐ๋ณด๋ค ํฌ๋ฉด ๋ฐ๋ณต์ข ๋ฃ(๊ธฐ๋ณธ ํ์์์: 30์ด)
- SimpleCompletionPolicy: ํ์ฌ ๋ฐ๋ณต ํ์๊ฐ ChunkSize ๊ฐฏ์๋ณด๋ค ํฌ๋ฉด ๋ฐ๋ณต์ข ๋ฃ(Default Chunk Size: 5)
- CountingCompletionPolicy: ์ผ์ ์นด์ดํธ๋ฅผ ๊ณ์ฐ ๋ฐ ์ง๊ณํด์ ์นด์ดํธ ์ ํ ์กฐ๊ฑด์ด ๋ง์กฑํ๋ฉด ๋ฐ๋ณต ์ข ๋ฃ
3. ExceptionHandler
- RepeatCallback ๋ด๋ถ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด RepeatTemplate๊ฐ ExceptionHandler๋ฅผ ์ฐธ์กฐํ์ฌ ์์ธ๋ฅผ ๋ค์ ๋์ง์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- ๋น์ ์ ์ข ๋ฃ๋ฅผ ์๋ฆฌ๋๋ฐ ์ฌ์ฉํฉ๋๋ค.
ExceptionHandler์ ๊ฒฝ์ฐ ๋ฐฐ์น ์ฒ๋ฆฌ ์ค ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ค์ ํด๋์ ๊ตฌํ์ฒด์ ์ง์ ํฉ๋๋ค.
๊ทธ ํ ์์ธ ์ ๋ณด๋ฅผ ํ ๋๋ก ๊ฐ ํธ๋ค๋ฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ์กฐ๊ฑด์ด ์๋๋ฐ ์์ธ๋ฅผ ๋ค์ ๋์ง์ง ํน์ ๋ฌด์ํ ์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
- LogOrRethrowExceptionHandler: ์์ธ๋ฅผ ๋ก๊ทธ๋ก ๊ธฐ๋กํ ์ง ์๋๋ฉด ๋ค์ ๋์ง์ง ๊ฒฐ์
- RethrowOnThresholdExceptionHandler: ์ง์ ๋ ์ ํ์ ์์ธ๊ฐ ์๊ณ๊ฐ(Threshold)์ ๋๋ฌํ๋ฉด ๋ค์ ๋ฐ์
- SimpleLimitExceptionHandler: ExceptionHandler ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๊ตฌํ์ฒด๋ก, ์ฌ์ฉ ์ฌ๋ก๋ ์ง์ ๋ ์ ํ์ ์์ธ ํ์
์ค ํ๋๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์นด์ดํฐ๊ฐ ์ฆ๊ฐํ๊ณ , ์ ํ์ ๋๋ฌํ๋ฉด ์คํจํฉ๋๋ค. ์ด๋ฌํ ๋ชฉ์ ์ผ๋ก Spring Batch์์๋ SimpleLimitExceptionHandler์ ๋ ์ ์ฐํ RethrowOnThresholdExceptionHandler๋ฅผ ์ ๊ณตํฉ๋๋ค.
handleException() ๋ฉ์๋๋ RethrowOnThresholdExceptionHandler ํด๋์ค์ ์์ํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค.
RepeatStatus, CompletionPolicy, ExceptionHandler์ ๋ฐ๋ณต ์ฒ๋ฆฌ
- RepeatOperation ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์ธ RepeatTemplate์์ ๋ฐ๋ณต์ ์ข ๋ฃํ ๋๊น์ง ์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ RepeatCallback์ ํธ์ถํฉ๋๋ค.
- RepeatCallback์๋ doInIteration() ๋ฉ์๋๊ฐ ์ํ๋๋ฉฐ, ์ํ์ ๋ณด๋ฅผ ์ ์ฅํ๋ RepeatContext๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ณ , ๋ฆฌํด ๊ฐ์ผ๋ก๋ ๋ฐ๋ณต ์ํ๋ฅผ ๋ํ๋ด๋ RepeatStatus ์ ๋๋ค.
Spring Batch์ Step ๋ด์ ์กด์ฌํ๋ RepeatOperations(RepeatTemplate)์ ํตํด RepeatCallback์ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํฉ๋๋ค.
๊ทธ ํ RepeatCallback์ ๋ฉ์๋์ธ doInIteration() ๋ฉ์๋์์ Tasklet์ ์ฒ๋ฆฌํ๊ณ ๋ ํ ์์ ์ดํด๋ดค์๋ ๋ฐ๋ณต ์ข ๋ฃ๋ฅผ ๊ฒฐ์ ํ๋ ํญ๋ชฉ๋ค(ExceptionHandler, CompletionPolicy, RepeatStatus)์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฐ๋ณต๋ฌธ์ ์ข ๋ฃํ ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๐ ์ฝ๋ ์ดํด๋ณด๊ธฐ
์์ ์ฝ๋๋ CompletionPolicy ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด ์ค ํ๋์ธ SimpleCompletionPolicy ํด๋์ค์์ ChunkSize๋ฅผ 3์ผ๋ก ์ค์ ํ์ฌ 3๋ฒ์ ์์ ํ ๋ฐ๋ณต๋ฌธ์ ์ข ๋ฃํ๋ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
(์ฝ๋์์ ์ฃผ์์ผ๋ก ์ฒ๋ฆฌํด๋์ ๊ณณ์ ์ฌ๋ฌ ๊ฐ์ CompletionPolicy ๊ตฌํ์ฒด๋ฅผ ์ค์ ํ๊ฑฐ๋, ExcceptionHandler๋ฅผ ์ค์ ํ๋ ์ฝ๋์ ๋๋ค.)
58๋ผ์ธ์์ RepeatTemplate์ setCompletionPolicy() ๋ฉ์๋๋ฅผ ํตํด CompletionPolicy๋ฅผ ์ค์ ํฉ๋๋ค.
Job์ ์์ ์ ์ฒ๋ฆฌํ ํ RepeatTemplate ํด๋์ค์์ ์์ ์ด ์๋ฃ๋์๋์ง ํ์ธํฉ๋๋ค.
count์ ๊ฐ์ด ChunkSize์ ๊ฐ์ธ 3๋ณด๋ค ์์ผ๋ฏ๋ก ์ข ๋ฃ๋์ง ์๊ณ ๋ฐฐ์น ์์ ์ด ๋ฐ๋ณต ์ฒ๋ฆฌ๊ฐ ๋ฉ๋๋ค.
์ ์ฝ๋๋ RepeatTemplate ํด๋์ค์ executeInternal() ๋ฉ์๋ ์ผ๋ถ์ ๋๋ค.
215๋ผ์ธ์ getNextResult() ๋ฉ์๋๋ฅผ ํตํด ์์ ์ด ์ฒ๋ฆฌ๊ฐ ๋๊ณ , count๊ฐ 1์ฉ ์ฆ๊ฐํฉ๋๋ค.
ChunkSize๊ฐ 3์ด๋ฏ๋ก ์ธ ๋ฒ ๋ฐ๋ณต ์คํ ํ ์ข ๋ฃํ๊ณ Job์ process() ๋ฉ์๋๋ฅผ ์ข ๋ฃํฉ๋๋ค.
๐ ์ฐธ๊ณ ๋ฌธ์
- https://docs.spring.io/spring-batch/docs/current/reference/html/index-single.html#late-binding
- https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard
'Spring > Spring Batch' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Batch (12) Retry (2) | 2023.03.04 |
---|---|
Spring Batch (10) @JobScope, @StepScope (0) | 2022.12.08 |
Spring Batch (9) JobParametersValidator (0) | 2022.11.13 |
Spring Batch (8) JobLauncher (0) | 2022.11.11 |
Spring Batch (7) JobRepository (0) | 2022.11.08 |
๋๊ธ