๐ค Step์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
1. Tasklet ๋ฐฉ์ :
์ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ์์ด๊ธด ํฉ๋๋ค.
Input/Output์ ๋ํ process๊ฐ ์๋ ๋จ์ ํต๊ณ, ์ผ๋ฐ์ ์ธ Query ์ํ๊ณผ ๊ฐ์ ๊ฐ๋จํ Batch์ ์ฌ์ฉํ๊ณค ํฉ๋๋ค.
Chunk์ ItemReader, ItemProcessor, ItemWirter์ ๊ณผ์ ์ ๋จ์ผ ์์ ์ผ๋ก ์ธ์ํ์ฌ Step์ ์ํํฉ๋๋ค.
2. Chunk ๋ฐฉ์ :
์ง์ ํ Chunksize์ ๋ง๊ฒ ItemReader, ItemProcessor, ItemWirter๋ก ๋๋ Step์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋๋ค.
์ ๋ฆฌํ์๋ฉด, Spring Batch์์๋ Job์ด ์๋๋ฐ์.
์ด Job์ ์ฌ๋ฌ๊ฐ์ Step์ผ๋ก ๊ตฌ์ฑ๋๊ณ ,
Step ์ Tasklet || Chunk๋ก ๊ตฌ์ฑ๋๋ค๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
๐ค Chunk
Chunk๋ ์ฒ๋ฆฌ๋๋ row(data)์ ๊ฐฏ์๋ฅผ ์๊ธฐํฉ๋๋ค .
ChunkSize = 5 ๋ผ๋ฉด, 5๊ฐ์ data๊ฐ ํ๋์ฉ ์ฝํ์ง๊ณ ํ๋์ Chunk๋ฅผ ์ด๋ฃจ์ด ํ ๋ฒ์ ์ฒ๋ฆฌ๋๋ค๋ ๊ฒ์ด์ฃ !
๐ณ Chunk๊ฐ ์ค์ํ ์ด์ ๋ ๋ฌด์์ผ๊น์ ?
์ฌ๋ฌ๋ถ์ด 10000๊ฐ์ data์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋งค์ผ ๋งค์ผ ์งํํด์ผ ํ๋ ์ ๋ฌด๊ฐ ์์ต๋๋ค.
๊ทผ๋ฐ, ์ด๋ ๋ 9876๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ค์ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค... ๊ทธ๋ผ, ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋จ์ 1๋ฒ์งธ๋ถํฐ ๋ค์ ์ฒ๋ฆฌ๋ฅผ ์์ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋, Chunk๋ฅผ ์ด์ฉํ๊ฒ ๋๋ฉด, 9876๋ฒ์งธ ๋ฐ์ดํฐ๊ฐ ์ํ chunk๋ถํฐ ๋ค์ ์ฒ๋ฆฌ๋ฅผ ์์ํ ์ ์๊ฒ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด, ์๊ฐ๊ณผ ์์ ๋ชจ๋ ์๋ ์ ์๊ฒ ์ฃ ?
๐ณ Chunk๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์?
๋ง์ฝ ChunkSize๊ฐ 5 ๋ผ๊ณ ์๊ฐํ ๋, IteamReader, ItemProcessor์์ ํ๋ํ๋ ์์๋๋ก 5๊ฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ItemWriter์์ 5๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ฒ๋ฆฌํฉ๋๋ค.
ItemReader์ read() ๋ฉ์๋๋ Item ํ๋๋ฅผ ๋ฐํํ๋ ๋ฐ๋ฉด, ItemWriter์ write()๋ ์ธ์๋ก Item List๋ฅผ ๋ฐ์ต๋๋ค.
๋ค์ ์ ๋ฆฌํ์๋ฉด,
Reader์ Processor์์๋ 1๊ฑด์ฉ ๋ค๋ค์ง๊ณ ,
Writer์์ Chunk ๋จ์๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
for(int i=0; i<totalSize; i+=chunkSize){
List items = new Arraylist();
for(int j = 0; j < chunkSize; j++){
Object item = itemReader.read()
Object processedItem = itemProcessor.process(item);
items.add(processedItem);
}
itemWriter.write(items);
}
์กฐ์กธ๋๋์ ๋ธ๋ก๊ทธ(jojoldu.tistory.com/331)์ ์์ฑ๋ Java๋ฅผ ์ด์ฉํด ์ฒญํฌ์งํฅ ํ๋ก์ธ์ค ์ฒ๋ฆฌ ๊ณผ์ ์ ๋ณด์ฌ์ค ์์ ์ ๋๋ค.
๐ค Page Size์ Chunk Size ๋ญ๊ฐ ๋ค๋ฅธ๊ฐ์?
Page Size : ํ ๋ฒ์ ์กฐํํ data์ ์
Chunk Size : ํ ํธ๋์ญ์ ์์ ์ฒ๋ฆฌํ data์ ์
๋ง์ฝ, PageSize = 10 ์ด๊ณ , Chunk Size = 50 ์ด๋ผ๊ณ ์๊ฐํด๋ด ์๋ค!
์ด ๋ง์ IteamReader์์ ์กฐํ๊ฐ 5๋ฒ ์ด๋ฃจ์ด์ ธ์ผ 1๋ฒ์ Transaction์ด ๋ฐ์ํด Chunk๊ฐ ์ฒ๋ฆฌ๋๋ค๋ ๋ง์ ๋๋ค.
์ด ๋ ๊ฐ์ง๋ ์์ ํ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ง, 2๊ฐ ๊ฐ์ ์ผ์น์ํค๋ ๊ฒ์ด ๋ณดํธ์ ์ด๋ฉฐ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํฉ๋๋ค.
<์ผ์นํ์ง ์์์ผ๋ก ์ธํด ๋ฒ์ด์ง๋ ์ด์>
Spring Batch์์ ์์์ฑ ์ปจํ ์คํธ ๋ฌธ์ (processor์์ lazyException ๋ฐ์ํ ๋)
์๋ ํ์ธ์? ์ด๋ฒ ์๊ฐ์ springboot-batch์์ reader๋ก ์ฝ์ ๋ฐ์ดํฐ๋ฅผ processor๋ก ๋๊ธธ๋ ์์์ฑ ์ปจํ ์คํธ๊ฐ ๋ฌธ์ ๊ฐ ๋๋ ์ํฉ์ ํด๊ฒฐํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ชจ๋ ์ฝ๋๋ Github์ ์๊ธฐ ๋๋ฌธ์ ํจ๊ป ๋ณด์๋ฉด
jojoldu.tistory.com
'Spring > SpirngBatch' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Batch (4) - MetaData (0) | 2021.05.30 |
---|---|
Spring Batch (3) (0) | 2021.05.06 |
SpringBatch (0) | 2021.03.24 |