Spring Batch Scaling
์ฒ๋ฆฌํด์ผํ ๋ฐ์ดํฐ๊ฐ ์ฆ๊ฐํ์ฌ ์ผ์ ๊ท๋ชจ ์ด์์ด ๋๋ ๊ฒฝ์ฐ ๋ฐฐ์น๋ Scaling์ด ํ์ํ๋ค. Spring Batch์์ ์ ๊ณตํ๋ Scaling๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
Multi-threaded Step
Single process
Local
๋จ์ผ Step ์ํ์, ํด๋น Step๋ด์ ๊ฐ Chunk๋ฅผ ๋ณ๋์ ์ฌ๋ฌ ์ฐ๋ ๋์์ ์คํํ๋ ๋ฐฉ๋ฒ
Parallel Steps
Single process
Local
์ฌ๋ฌ๊ฐ์ Step์ ๋ณ๋ ฌ๋ก ์คํํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋จ์ผ Step๋ด์ ์ฑ๋ฅ ํฅ์์ ์๋ค.
Remote Chunking
Multi process
Remote
Step์ฒ๋ฆฌ๊ฐ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ก ๋ถํ ๋์ด ์ธ๋ถ์ ๋ค๋ฅธ ์๋ฒ๋ก ์ ์กํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์ ์ด๋ ์๋ฒ์์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์๋์ง ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉ์ธ์ง ์ ์ค์ด ์๋๋ ๊ฒ์ด 100% ๋ณด์ฅ ๋์ด์ผํ๋ค.(AWS SQS, Kafka ๋ฑ MQ์ฌ์ฉ ๊ถ์ฅ)
Partitioning
Single/Multi process
Local/Remote
๋งค๋์ (๋ง์คํฐ)๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ ์์ ํํฐ์ ์ผ๋ก ๋๋๊ณ , ํํฐ์ ์์ ์ฌ๋ ์ด๋ธ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ๋ ๋ฐฉ์
AsyncItemProcessor์ AsyncItemWriter
Local
๋ณ๊ฐ์ ์ฐ๋ ๋๋ฅผ ํตํด ItemProcessor์ ItemWriter๋ฅผ ์ฒ๋ฆฌ
spring-batch-integration์์กด์ฑ์์ ์ง์
์ด ์ค ์ผ๋ถ๋ฅผ ๊ตฌํํด๋ณผ ๊ฒ์ด๋ค.
Multi-threaded Step

์คํ๋ง ๋ฐฐ์น์ ๋ฉํฐ ์ฐ๋ ๋ Step์ TaskExecutor๋ฅผ ์ด์ฉํด ๊ฐ ์ฐ๋ ๋๊ฐ Chunk๋จ์๋ก ์คํ๋๊ฒ ํ๋ ๋ฐฉ์์ด๋ค.
SimpleAsyncTaskExecutor: chunk ๋จ์๋ณ๋ก ์ฐ๋ ๋ ์์ฑThreadPoolTaskExecutor: ์ฐ๋ ๋ํ ๋ด์์ ์ง์ ๋ ๊ฐฏ์์ ์ฐ๋ ๋๋ง์ ์ฌ์ฌ์ฉํ๋ฉด์ ์คํ(์ด์์์ ์ฌ์ฉํ ๋๋ ์ฐ๋ ๋ํ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅ)
๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ ๊ตฌ์ฑ์ ์ฌ์ฉํ๊ณ ์ ํ๋ Reader์ Writer๊ฐ ๋ฉํฐ์ฐ๋ ๋๋ฅผ ์ง์ํ๋์ง ํ์ ์ด ํ์ํ๋ค.
์๋ฅผ ๋ค์ด JpaPagingItemReader์ ๊ฒฝ์ฐ๋ ์๋์ ๊ฐ์ด thread-safe๋ฅผ ์ ๊ณตํด์ฃผ๊ณ ์๋๊ฒ์ ๋ณผ ์ ์์ผ๋ฉฐ,
JpaCursorItemReader๋ thread-safeํ์ง ์์ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฌ๊ธฐ์ ๋ ํ๊ฐ์ง ์์๋ฌ์ผํ ์ ์ด ์๋ค. ๋ฉํฐ์ฐ๋ ๋๋ก ๊ฐ chunk๋ค์ด ๊ฐ๋ณ๋ก ์งํ๋๋ ๊ฒฝ์ฐ ์คํจ ์ง์ ์์ ์ฌ์์ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์๋ํ๋ฉด, ๋ฉํฐ์ฐ๋ ๋์ ๊ฒฝ์ฐ 1n๊ฐ์ chunk๊ฐ ๋์์ ์คํ๋๋ฉฐ, 5๋ฒ์งธ chunk๊ฐ ์คํจํ๋ค๊ณ ํด์ 14 chunk๊ฐ ๋ชจ๋ ์ฑ๊ณตํ๋ค๋ ๋ณด์ฅ์ด ์๋ค.
๊ทธ๋์ ๋ฉํฐ์ฐ๋ ๋ ์ ์ฉ์ ์ผ๋ฐ์ ์ผ๋ก ItemReader์ saveState ์ต์
์ false๋ก ์ค์ ํ๋ค.
saveState :
ItemStream#update(ExecutionContext)๋ฉ์๋๋กExectuionContext์ reader์ ์ํ๊ฐ์ ์ ์ฅํ ์ง ๊ฒฐ์ ํ๋ค. (Defualt : true)
Thread-safe
PagingItemReader
์์์ ๋ดค๋ฏ์ด PagingItemReader๋ thread-safeํ ๊ฒ์ ์ ์ ์๋ค. ๋ฉํฐ์ฐ๋ ๋๋ก ์ํํ๋ ๋ฐฐ์น๊ฐ ์๋ค๋ฉด, DB์ ๊ทผ์ PagingItemReader๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
application.yml
main() ๋ฉ์๋ ์ค์
Job ๊ตฌํ
์ฌ๊ธฐ์ ํต์ฌ์
TaskExecutor์ ๊ตฌํํ๋ ๋ถ๋ถ๊ณผ Step์คํ์.saveState(false)๋ก ์ค์ ํ์ฌ, Reader๊ฐ ์คํจํ ์ง์ ์ ์ ์ฅํ์ง ์๊ณ , ์คํจ์ ๋ค์ ์ฒ์๋ถํฐ ์คํํ๋๋ก ํ๋ ๊ฒ์ด๋ค. (๋ค๋ฅธ thread๋ค์ ์ฑ๊ณต์ ๋ณด์ฅํ์ง ์์ผ๋ฏ๋ก!)TaskExecutor๊ตฌํ์์๋ allowCoreThreadTimeOut์ ์ค์ ํด ํน์ ์๊ฐ(KeepAliveSeconds)์ดํ์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ข ๋ฃ๋๋๋ก ์ค์ ํ๋ค.๋ค์ Job์ ์ํํ๋ฉด ๊ฐ thread๋ณ๋ก ๋ณ๋ ฌ๋ก ์ํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Not Thread Safety
CursorItemReader
cursorItemReader์ ๊ฒฝ์ฐ์๋ thread safety๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค. Reader ์์ญ์ SynchronizedItemStreamReader๋ก wrappingํ์ฌ thread safetyํ๊ฒ ๊ตฌํํ ์ ์๋ค.
SynchronizedItemStreamReader์ delegate์ ์ํํ๊ณ ์ถ์ CursorItemReader๋ฅผ ๋ฑ๋กํด์ฃผ๋ฉด ๋๋ค.
SynchronizedItemStreamReader์ read() ๋ฉ์๋๋ฅผ ๋ณด๋ฉด synchronized ๋ฉ์๋๋ก ๊ฐ์ธ ๋๊ธฐํ๋ ์ฝ๊ธฐ๊ฐ ๊ฐ๋ฅํ๋ค.
์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, ๊ฐ thread๊ฐ ์์ฐจ์ ์ผ๋ก ์ฝ์ด์ ๊ฐ๋ณ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ฏธ ๋คํธ์ํฌ/DISK IO/CPU/Memory ๋ฑ ์๋ฒ ์์์ด ์ด๋ฏธ ๋จ์ผ ์ฐ๋ ๋์์๋ ๋ฆฌ์์ค ์ฌ์ฉ๋์ด ํ๊ณ์น์ ๋ฌํ๋ค๋ฉด ๋ฉํฐ์ฐ๋ ๋๋ก ์งํํ๋ค๊ณ ํด์ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์์ผ๋ฉฐ, ์ค์ ์ด์ ํ๊ฒฝ ์ ์ฉ ์ด์ ์ ์ถฉ๋ถํ ํ ์คํธ๋ฅผ ์งํํด๋ณด๊ณ ํด์ผํ๋ค.
Parallel Steps

๊ฐ ์ญํ ์ ์ฌ๋ฌ step(Flow)์ผ๋ก ๋๋์ด ๋ณ๋ ฌํ ํ ์ ์๋ค.
Flow๋ ์์ฒด ์ค๋ ๋์์ ์งํ๋๋ฉฐ, ์ฌ๋ฌ Flow๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ค. FlowBuilder์ .split() ๋ฉ์๋๋ TaskExecutor๋ฅผ ๋ฐ์ ๊ฐ Flow๋ ์์ฒด ์ค๋ ๋์์ ์คํ๋๋ค. ์์ ๊ฐ์ด ๊ตฌํํ๋ฉด ๊ฐ step์ด๋ step์ flow๋ฅผ ๋ณ๋ ฌ๋ก ์ํํ ์ ์๋ค.
๊ฐ Step๋ค์ด ๋ณ๋ ฌ๋ก ์ํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ชจ๋ Flow๊ฐ ์ข ๋ฃ๋๋ฉด Job์ด ์ข ๋ฃ๋๋ค.
AsyncItemProcessor์ AsyncItemWriter
AsyncItemProcessor์ AsyncItemWriterํน์ ๋ฐฐ์น ์ฒ๋ฆฌ์ ๋ณ๋ชฉ๊ตฌ๊ฐ์ด ItemProcessor์ ์กด์ฌํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ๊ทธ๋ฐ ๊ฒฝ์ฐ Step์ ItemProcessor ๋ถ๋ถ๋ง ๋ณ๋ ์ค๋ ๋์์ ์คํํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค. AsyncItemProcessor๋ ItemProcessor ๊ตฌํ์ฒด๋ฅผ ๋ํํ๋ ๋ฐ์ฝ๋ ์ดํฐ๋ก, ์๋ก์ด ์ค๋ ๋์์ ItemProcessor ๋ก์ง์ ์ํํ๋ฉฐ, ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ๊ณ ๋ ํ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ฐํ๋ Future๋ฅผ AsyncItemWriter๋ก ์ ๋ฌํ๋ค. AsyncItemWriter ๋ํ, ItemWrite ๊ตฌํ์ฒด๋ฅผ ๋ํํ ๋ฐ์ฝ๋ ์ดํฐ์ด๋ค. AsyncItemWriter๋ Future๋ฅผ ์ฒ๋ฆฌํ ํ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ItemWriter์ ์ ๋ฌํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฐ๋์ AsyncItemProcessor์ AsyncItemWriter๋ ํจ๊ป ์ฌ์ฉํด์ผํ๋ค.
dependency
์ ์์กด์ฑ์ ์ถ๊ฐํด์ฃผ์ด์ผ AsyncItemProcessor์ AsyncItemWriter๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
example
ํ๋ก์ธ์ ๋ณ๋ชฉํ์์ ๊ตฌํํ๊ธฐ ์ํด ์์๋ก 5๋ฐ๋ฆฌ์ด์ฉ ์ฌ๋๋ก ๋ง๋ค์๋ค. ๊ทธ ํ ๋ฐฐ์น๋ฅผ ์ํํด๋ณด๋ฉด,
๋ฐฐ์น ์ํ์์๋ถํฐ ์ข ๋ฃ๊น์ง ์ฝ 9์ด๊ฐ ๊ฑธ๋ฆฐ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด์ ๋น๋๊ธฐ์ฒ๋ฆฌ๋ฅผ ํตํด ์ฑ๋ฅ์ ๊ฐ์ ํด๋ณผ ๊ฒ์ด๋ค.
AysncItemProcessor์ setDelegate() ๋ฉ์๋์ ๋ํํ ItemProcessor๋ฅผ ์ง์ ํด์ฃผ๊ณ , ๋ณ๋ ์ค๋ ๋์์ ์คํํ๊ธฐ ์ํ TaskExecutor๋ฅผ ์ค์ ํด์ค๋ค. ๊ทธ ํ AsyncItemWriter๋ฅผ ๊ตฌํํ์ฌ Future ๋ฅผ ๋ฐ์์ ์ฐ๊ธฐ ์์
์ ํ ์ ์๋๋ก ๊ตฌํํ๋ค. ์ํํ ItemWriter๋ฅผ setDelegate ๋ฉ์๋์ ์ง์ ํด์ค๋ค.
chunk๋ฉ์๋ ์ฒ๋ฆฌ์ AsyncItemProcessor๊ฐ ๋ฐํํ๋ ํ์
์ธ Future<T>๋ก ๋ฐํ ํ์
์ ๋ณ๊ฒฝํด์ฃผ๋ฉด๋๋ค. ๊ทธ ํ ๋ฐฐ์น๋ฅผ ์ํํด๋ณด๋ฉด,
์ฝ 4์ด๋ง์ ์ํ์ด ์๋ฃ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Partitioning
๋ฐฐ์น ๊ธฐ๋ฐ ์ํฌ๋ก๋์ ๋๋ถ๋ถ์ I/O์ ์๋ค. ์คํ๋ง ๋ฐฐ์น๋ ์ฌ๋ฌ ๊ฐ์ ์์ปค๊ฐ ์์ ํ ์คํ ์ ์คํํ ์ ์๋๋ก ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.

ํํฐ์ ๋์ Master Step์ด ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ง์ ๋ ์์ Worker Step์ผ๋ก ์ผ์ ๋ถํ ํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋งํ๋ค. ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋ ์์ ํํฐ์ ์ผ๋ก ๋๋์ด ๊ฐ ์์ปค๊ฐ ๋๋ ์ง ํํฐ์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค. ๊ฐ ์์ปค๋ ์์ฒด์ ์ผ๋ก ์ฝ๊ธฐ(ItemReader), ์ฒ๋ฆฌ(ItemProcessor), ์ฐ๊ธฐ(ItemWriter) ๋ฑ์ ๋ด๋นํ๋ ์จ์ ํ ๋ฐฐ์น Step์ด๋ฉฐ, ์ฌ์์๊ณผ ๊ฐ์ด ์คํ๋ง ๋ฐฐ์น๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
Multi-threaded Step vs Partitioning
๋ฉํฐ์ฐ๋ ๋ Step์ ๋จ์ผ Step์ Chunk ๋จ์๋ก ์ฐ๋ ๋๋ฅผ ์์ฑํด ๋ถํ ์ฒ๋ฆฌ
์ด๋ค ์ฐ๋ ๋์์ ์ด๋ค ๋ฐ์ดํฐ๋ค์ ์ฒ๋ฆฌํ ์ง์ ๋ํ ์ธ๋ฐํ ์กฐ์ ์ด ๋ถ๊ฐ๋ฅ
ํด๋น Step์ ItemReader/ItemWriter๋ฑ์ด ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์ ์ง์ํ๋์ง ์ ๋ฌด๊ฐ ์ค์ํจ
ํํฐ์ ๋์ ๋ ๋ฆฝ์ ์ธ Step(Worker Step)์ ๊ตฌ์ฑํ๊ณ , ๊ฐ๊ฐ ๋ณ๋์ StepExecution ํ๋ผ๋ฏธํฐ ํ๊ฒฝ์ ๊ฐ์ง๊ณ ์ฒ๋ฆฌ
๋ฉํฐ์ฐ๋ ๋๋ก ๋์ํ์ง๋ง, ItemReader/ItemWriter์ด ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์ ์ง์ํ๋์ง ์ค์ํ์ง ์๋ค.
์ฃผ์ ์ธํฐํ์ด์ค

Partitioner
Partitioner๋ ํํฐ์
๋ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ํํฐ์
์ผ๋ก ๋๋๋ ์ญํ ์ ํ๋ค. ์ฆ, ํํฐ์
๋๋ Worker Step์ ์ํ StepExecution์ ์์ฑํ๋ ์ธํฐํ์ด์ค๋ค.
partition(int gridSize) ๋จ์ผ ๋ฉ์๋๋ก ๊ตฌํ๋์ด์์ผ๋ฉฐ, ์ฌ๊ธฐ์ gridSize๋ ๋ถํ ํ ์์ปค ๊ฐ์๊ฐ ๋ช๊ฐ์ธ์ง ๊ฒฐ์ ํ๋ ์ค์ ๊ฐ์ด๋ค. gridSize๋ฅผ ๊ณ์ฐํ๊ฑฐ๋ ์ค์ ํ๋๊ฒ์ ์ค๋ก์ง ๊ฐ๋ฐ์๋ค ๋ชซ์ด๋ค.
org.springframework.batch.core.partition.support.SimplePartitioner๊ธฐ๋ณธ ๊ตฌํ์ผ๋ก, ๋น StepExecution์ ์์ฑ
org.springframework.batch.core.partition.support.MultiResourcePartitioner์ฌ๋ฌ ๋ฆฌ์์ค์ ๋ฐฐ์ด์ ํ์ธํ๊ณ , ๋ฆฌ์์ค๋น ํํฐ์ ์ ์์ฑ
PartitionHandler
PartitionHandler๋ Master Step์ด Worker Step์ ์ด๋ป๊ฒ ๋ค๋ฃฐ์ง ์ ์ํ๋ ์ธํฐํ์ด์ค์ด๋ค. ์ฆ, ์์ปค์ ์์ฌ์ํต์ ํ๋๋ฐ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค์ด๋ค.
์ฌ๊ธฐ์ ๋ค๋ฃจ๋ ๋ด์ฉ์ ๊ฐ ์์ปค์๊ฒ ์์ ๋์์ ์ด๋ป๊ฒ ์๋ ค์ค์ง, ๋ณ๋ ฌ๋ก ์ํํ๊ฒ๋๋ ๊ฒฝ์ฐ ์ฐ๋ ๋ํ์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ์ง, ๋ชจ๋ ์์ ์ด ์๋ฃ๋์๋์ง ์๋ณํ๋์ง ์ด๋ค.
์คํ๋ง ๋ฐฐ์น ์ฌ์ฉ์ Partitioner ๊ตฌํ์ฒด๋ฅผ ์ง์ ๊ตฌํํ๋ ๊ฒฝ์ฐ๋ ์์ง๋ง, PartitionHandler๋ฅผ ๊ตฌํํ๋ ๊ฒฝ์ฐ๋ ์์ ๊ฒ์ด๋ค.
org.springframework.batch.core.partition.support.TaskExecutorPartitionHandler๋จ์ผ JVM ๋ด์์ ํํฐ์ ๋ ๊ฐ๋ ์ ์ฌ์ฉํ ์ ์๋๋ก, ๋์ผํ JVM๋ด์ ์ฌ๋ฌ ์ค๋ ๋์์ ์์ปค ๋ถํ ์คํ
org.springframework.batch.core.partition.support.MessageChannelPartitionHandler์๊ฒฉ JVM์ ๋ฉํ๋ฐ์ดํฐ ์ ์ก
org.springframework.cloud.task.batch.partition.DeployerPartitionHandlerSpring Cloud Task ํ๋ก์ ํธ๊ฐ ์ ๊ณต
์ง์๋๋ ํ๋ซํผ์์์ ์จ๋๋งจ๋ ๋ฐฉ์์ผ๋ก ์์ปค ์คํ
TaskExecutorPartitionHandler (๋จ์ผ JVM) ์์
๋จ์ผ JVM๋ด์์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํด ์์ปค๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ์ปดํฌ๋ํธ๋ก, ๋จ์ผ ์ฅ๋น๋ด์์ ์ํํ ์ ์๋ ์์ ์๋ ์ ์ฝ(๋คํธ์ํฌ/DISK IO/CPU/Memory)์ด ์กด์ฌํ๋ค.
๋ค์๊ณผ ๊ฐ์ด TaskExecutorPartitionHandler์ worker๋ก ์ํํ step, ๋ฉํฐ์ฐ๋ ๋ ์ฒ๋ฆฌ๋ฅผ ์ํ TaskExecutor ์ค์ , ํํฐ์
๋ ์(gridSize)๋ฅผ ์ง์ ํด์ค๋ค.
Partitioner ๊ตฌํ
์์ฑํ Worker Step ์ ๊ฒฐ์
long targetSize = (max - min) / gridSize + 1
๊ฐ Worker Step์ด ์ด๋ค ๋ณ์๋ฅผ ๊ฐ์ง๊ฒ ํ ์ง ๊ฒฐ์
value.putLong("minId", start)value.putLong("maxId", end)
๋ค์๊ณผ ๊ฐ์ด ๊ฐ ํํฐ์ ๋ณ๋ก ์ํํ StepExecution์ด ์ ์์ ์ผ๋ก ์ ๊ตฌํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Step ๊ตฌํ
partitioner() ๋ฉ์๋๋ฅผ ์ด์ฉํด step์ ์ฌ์ฉ๋ Partitioner ๊ตฌํ์ฒด๋ฅผ ๋ฑ๋กํด์ฃผ๊ณ , ํํฐ์
๋๋ Step์ .step() ๋ฉ์๋์ ๋ฑ๋กํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ partitionHandler()๋ฅผ ๋ฑ๋กํด์ฃผ๋ฉด master step๊ตฌํ์ด ์๋ฃ๋๋ค.
ItemReader/ItemWriter
๋ค์๊ณผ ๊ฐ์ด #{stepExecutionContext['๋ณ์๋ช
']}์ผ๋ก ์ Partitioner์์ ๊ฐ ํํฐ์
๋ณ๋ก ์ง์ ํ StepExecution ๋ณ์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค. ํด๋น ๋ณ์๋ฅผ ์ ๋ฌ๋ฐ์ ๊ฐ ํํฐ์
๋ณ๋ก ์ฒ๋ฆฌํ๋๋ก ๊ตฌํํ๋ฉด ๋๋ค.
Job
๊ทธ ํ ํด๋น Master Step์ Job์ ๋ฑ๋กํด์ฃผ๋ฉด ๊ตฌํ์ด ์๋ฃ๋๋ค.
์ฐธ๊ณ
Last updated
Was this helpful?