์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- ์ค๋ธ์
- ์ฝํ
- ์๋๋ก์ด๋
- ํ๋ก๊ทธ๋๋จธ์ค
- MySQL
- ํผ๊ณตํ
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
- ์๊ณ ๋ฆฌ์ฆ
- ์ธํ๋ฐ
- CS
- groupby
- ๊ธฐ์ ๋ฉด์
- ์คํฐ๋
- ์นด์นด์ค์ฝํ
- Kotlin
- ์ ์ฒ๊ธฐ
- doitandroid
- join
- Android
- ์๋๋ก์ด๋์คํ๋์ค
- ํผ๊ณต์ฑ๋ฆฐ์ง
- Til
- ์๋ฐ
- select
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- java
- ํผ๊ณต๋จ
- ์ฝํ๋ฆฐ
- ์๋ฃ๊ตฌ์กฐ
- SQL
- Today
- Total
Welcome! Everything is fine.
[STUDY] Spring Batch ํต์ฌ ๊ตฌ์กฐ์ ๊ฐ๋ ์ ๋ฆฌ ๋ณธ๋ฌธ
๐ง Spring Batch๋?
๋ฐฐ์น(Batch) ์ฒ๋ฆฌ๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ ํด์ง ์์ ์ ์๋์ผ๋ก ์ผ๊ด ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
- ์์
- ๋งค์ผ ์์ ์ฃผ๋ฌธ ๋ฐ์ดํฐ ํต๊ณ ์ ์ฅ
- ๋งค์ฃผ ๊ณ ๊ฐ ๋์ ์ด๋ฉ์ผ ๋ฐ์ก
- DB ๋ง์ด๊ทธ๋ ์ด์ , ์ ์ฐ ์ฒ๋ฆฌ ๋ฑ
- ํน์ง
- ์ฌ๋์ด ์ง์ ์์ฒญํ์ง ์์๋ ์๋์ผ๋ก ์ฃผ๊ธฐ์ ์คํ
- ์ค์๊ฐ์ฑ๋ณด๋ค ์ ํ์ฑ๊ณผ ์์ ์ฑ์ด ์ค์
- ์คํจ ์ ์ฌ์ฒ๋ฆฌ, ๋ก๊ทธ ์ถ์ ์ด ์ค์
Spring Batch๋ ๋์ฉ๋ ๋ฐฐ์น ์์ ์ ์ฝ๊ณ ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ Spring ๊ธฐ๋ฐ ํ๋ ์์ํฌ๋ค.
- Job/Step ๊ธฐ๋ฐ ๊ตฌ์ฑ ์ ๊ณต
- ์์ธ, ๋ก๊ทธ. ์ฌ์์, ๋ก๊น ๋ฑ์ ๊ธฐ๋ฅ ์ ๊ณต
- ์ฒญํฌ ๊ธฐ๋ฐ ์ฒ๋ฆฌ, ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฑ ๋ด์ฅ
๐ก Spring Batch์ ๊ตฌ์กฐ
Job๊ณผ Step
์๋ ๊ทธ๋ฆผ์ Spring Batch์ ์ ๋ฐ์ ์ธ ์คํ ํ๋ฆ์ ๋ํ๋ธ๋ค.
- JobLauncher : ๋ฐฐ์น ์คํ์ ํธ๋ฆฌ๊ฑฐํ๋ ์ปดํฌ๋ํธ. ๋ฐฐ์น ์คํ ์ JobRepository์ JobExecution์ ์์ฑํด ๊ธฐ๋ก
- Job : ํ๋์ ๋ฐฐ์น ๋จ์. ์ฌ๋ฌ Step์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์
- Step : ์ค์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ์ํ๋๋ ๋จ์. ๋ด๋ถ์ ์ผ๋ก Reader → Processor → Writer ์์๋ก ์ฒ๋ฆฌ๋จ
- JobRepository : Job/Step์ ์คํ ์ํ๋ฅผ ์ ์ฅํ๋ฉฐ, ์ฌ์์/์ค๋จ/์ฑ๊ณต ์ฌ๋ถ ๋ฑ์ ์ถ์
- ItemReader : ๋ฐ์ดํฐ ์์ค๋ก๋ถํฐ ์ ๋ ฅ (CSV, DB, API ๋ฑ)
- ItemProcessor : ์ฝ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณต, ๋ณํ, ํํฐ๋ง
- ItemWriter : ์ต์ข ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ๋ก ์ถ๋ ฅ (DB ์ ์ฅ, ํ์ผ ๊ธฐ๋ก ๋ฑ)
๐ฃ๏ธ Spring Batch์ Job๊ณผ Step์ ๊ตฌ์กฐ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Spring Batch๋ Job๊ณผ Step์ด๋ผ๋ ์คํ ๋จ์๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. Job์ ๋ฐฐ์น ์์ ์ ์ ์ฒด ๋จ์๋ฅผ ๋ํ๋ด๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ Step์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค. ๊ฐ Step์ Reader, Processor, Writer ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ๋ฉฐ ์ค์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ์ํ๋๋ ๋จ์์ ๋๋ค. Job์ ์คํํ๋ฉด JobLauncher๊ฐ ์คํ์ ์์ํ๊ณ , JobRepository์ ์คํ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ์ํ ์ถ์ ์ด๋ ์ฌ์์์ด ๊ฐ๋ฅํ๋๋ก ๊ด๋ฆฌ๋ฉ๋๋ค. Step์ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ํธ๋์ญ์ ์ ๊ฐ์ง ์ ์๊ณ , ์์ฐจ์ ์ผ๋ก ์คํํ๊ฑฐ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ถ๊ธฐํ ์๋ ์์ต๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ ์์ ์ ๋จ๊ณ๋ณ๋ก ๋๋๊ณ ์คํ ํ๋ฆ๊ณผ ์ํ๋ฅผ ๋ช ํํ ๊ด๋ฆฌํ ์ ์๋๋ก ํด์ค๋๋ค.
ํนํ ์คํ ์คํจ ์ ํน์ Step๋ถํฐ ๋ค์ ์คํํ๋ ๊ตฌ์กฐ๋ฅผ ์ง์ํด, ๋ณต๊ตฌ ๊ฐ๋ฅ์ฑ๊ณผ ์คํ ์ ์ด๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
Reader · Processor · Writer
Spring Batch์์ ํ๋์ Step์ ํฌ๊ฒ ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ง๋ค.
๊ฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ , ๊ฐ๊ณตํ๊ณ , ์ ์ฅํ๋ ์ญํ ์ ๋ด๋นํ๋ฉฐ, ์ฑ ์์ด ๋ช ํํ๊ฒ ๋ถ๋ฆฌ๋์ด ์๋ค.
- Reader (ItemReader) – ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ตฌ์ฑ ์์
- ์ธ๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ์ญํ
- ์ ๋ ฅ ์์ค๋ CSV, DB, XML, API ๋ฑ ๋ค์ํ๊ฒ ์ค์ ๊ฐ๋ฅ
- ํ ๋ฒ์ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ, ๋ ์ด์ ์ฝ์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด null ๋ฐํ
- Processor (ItemProcessor) – ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋ ๊ตฌ์ฑ ์์
- Reader์์ ์ฝ์ด์จ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๊ฑฐ๋ ๋ณํํ๋ ์ญํ
- ๋ฐํ๊ฐ์ด null์ผ ๊ฒฝ์ฐ ํด๋น ๋ฐ์ดํฐ๋ writer์ ์ ๋ฌ๋์ง ์์
- ํ์ ๊ตฌ์ฑ ์์๋ ์๋๋ฉฐ, ํ์ ์์๋ง ์ฌ์ฉ
- Writer (ItemWriter) – ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์ฑ ์์
- ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ต์ข ์ ์ผ๋ก ์ด๋ค ํํ๋ก ์ ์ฅํ ์ง ์ ํ๊ณ , ์ธ๋ถ์ ์ถ๋ ฅํ๋ ์ญํ
- DB์ ์ ์ฅํ๊ฑฐ๋, ํ์ผ๋ก ์ถ๋ ฅํ๊ฑฐ๋, ์ธ๋ถ API๋ก ์ ์กํ๋ ๋ฑ์ ์์ ์ ์ํ
- Reader์ ๋ฌ๋ฆฌ ์ฒญํฌ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์ ์ฒ๋ฆฌ
์๋ ์ฝ๋๋ ํ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋ ์ ์ฐ ์ฒ๋ฆฌ Step์ ์์๋ค. Settlement ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ , ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋ค DB์ ๋ฐ์ํ๋ ๋จ์ผ Step์ผ๋ก, chunk(100)์ผ๋ก ์ค์ ๋ ๋งํผ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ๊ณ ์ปค๋ฐํ๋ค.
Step์ Reader → Processor → Writer ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ ๊ตฌ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
- Reader : status๊ฐ 'READY'์ธ ์ ์ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํ(์ปค์ ๊ธฐ๋ฐ)
- Processor : ์ํ๋ฅผ 'COMPLETED'๋ก ๋ณ๊ฒฝ
- Writer : ๋ณ๊ฒฝ๋ ์ํ๋ฅผ DB์ ๋ฐ์ (UPDATE)
Spring Batch๋ ์ฒญํฌ ๋จ์๋ก ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์, ํ๋์ ์ฒญํฌ๊ฐ ์คํจํ๋ฉด ํด๋น ์ฒญํฌ๋ง ๋กค๋ฐฑ๋๊ณ , Job์ ์ค๋จ๋๊ฑฐ๋ ์ฌ์์๋๋ค.
์ปค์ ๊ธฐ๋ฐ vs ํ์ด์ง ๊ธฐ๋ฐ Reader
Spring Batch์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ฌ ๋๋ Reader ์ ๋ต์ ์ ์คํ๊ฒ ์ ํํด์ผ ํ๋ค.
๋ํ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฐฉ์์ ์ปค์ ๊ธฐ๋ฐ(Cursor-based) ๊ณผ ํ์ด์ง ๊ธฐ๋ฐ(Paging-based) ๋ ๊ฐ์ง๋ค.
๋ ๋ฐฉ์ ๋ชจ๋ ๋๋ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋์ง๋ง, ๊ธฐ์ ์คํ๊ณผ ๋ฐ์ดํฐ ํน์ฑ, ํธ๋์ญ์
์ ๋ต์ ๋ฐ๋ผ ์ ํฉํ ์ํฉ์ด ๋ค๋ฅด๋ค.
์ค๋ฌด์์๋ ๋ณดํต...
- ์ปค์ ๊ธฐ๋ฐ์ JdbcCursorItemReader์ ๊ฐ์ JDBC ๊ธฐ๋ฐ ๋ฐฉ์
- ํ์ด์ง ๊ธฐ๋ฐ์ JpaPagingItemReader์ ๊ฐ์ JPA ๊ธฐ๋ฐ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋๋ค.
์๋๋ ๋ ๋ฐฉ์์ ์ฐจ์ด๋ฅผ ์ ๋ฆฌํ ํ๋ค.
ํญ๋ชฉ | ์ปค์ ๊ธฐ๋ฐ(Cursor-based) | ํ์ด์ง ๊ธฐ๋ฐ(Paging-based) |
์ฒ๋ฆฌ ๋ฐฉ์ | ์ปค์๋ฅผ ์ด๊ณ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฝ์ | ์ผ์ ํฌ๊ธฐ๋ก ๋๋์ด ๋ฐ๋ณต ์ฟผ๋ฆฌ๋ก ์ฝ์ |
์ฟผ๋ฆฌ ์คํ | 1๋ฒ ์คํ ํ ์ปค์ ์ ์ง | ์ฌ๋ฌ ๋ฒ ์ฟผ๋ฆฌ ์คํ(page ์๋งํผ) |
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ | ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด ๋ง์ | ๋งค ํ์ด์ง๋ง๋ค ์๊ฒ ๋๋์ด ๊ฐ์ ธ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด ์ ์ |
์๋ | ์ปค๋ฅ์ ์ ์ง๋ก ์๋ ๋น ๋ฆ | ๋ค์์ ์ฟผ๋ฆฌ๋ก ์ธํด ์๋์ ์ผ๋ก ๋๋ฆผ |
๋ฐ์ดํฐ ์ ํฉ์ฑ | ์ฒ๋ฆฌ ์ค ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์ | ์ฒ๋ฆฌ ์ค ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ ์ค๋ณต/๋๋ฝ ๊ฐ๋ฅ์ฑ ์กด์ฌ |
ํธ๋์ญ์ ์ฒ๋ฆฌ | ํธ๋์ญ์ ์ ์ฒด ์ ์ง | ๊ฐ ํ์ด์ง ๋จ์๋ก ํธ๋์ญ์ ๋ถ๋ฆฌ ๊ฐ๋ฅ |
์ปค๋ฅ์ ์ ์ | ์ ์ฒด ์์ ๋์ ์ปค๋ฅ์ ์ ์ | ๊ฐ ํ์ด์ง๋ง๋ค ์ปค๋ฅ์ ์ฐ๊ฒฐ/ํด์ ๊ฐ๋ฅ |
์ ํฉํ ์ํฉ | ์ ์ ์ธ ๋๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋น ๋ฅธ ์ผ๊ด ์ฒ๋ฆฌ | ๋ณ๋ ๊ฐ๋ฅํ ๋ฐ์ดํฐ, ๋ณ๋ ฌ์ฑ/๋ณต์๋ ฅ ํ์ ์ |
JPA ๊ธฐ๋ฐ ํ์ด์ง์ ์ํฐํฐ ๊ด๋ฆฌ์ ์ฐ๊ด ๊ด๊ณ ์ฒ๋ฆฌ ๋ฑ ORM์ ์ด์ ์ ํ์ฉํ ์ ์์ง๋ง, ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ ์ฑ๋ฅ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ด ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ฉด, ์ปค์ ๊ธฐ๋ฐ์ ResultSet์ ์ด์ด ํ ์ค์ฉ ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ํจ์จ์ ์ด๊ณ ์ฒ๋ฆฌ ์๋๋ ๋น ๋ฅด๋ค. ํ์ง๋ง ์ปค๋ฅ์ ์ ์ค๋ ์ ์ ํ๊ฒ ๋๋ฏ๋ก, ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ์ฌ์์์ด ํ์ํ ๊ฒฝ์ฐ์๋ ์ ์ฝ์ด ํฌ๋ค. ๊ฒฐ๊ตญ, ์ด๋ค ๋ฐฉ์์ด ๋ ๋ซ๋ค๊ณ ๋จ์ ํ๊ธฐ๋ณด๋ค๋ ๋ฐฐ์น ์ก์ ํน์ฑ๊ณผ ์์คํ ๊ตฌ์กฐ์ ๋ง๊ฒ ์ ๋ต์ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์ฒญํฌ(Chunk) ๊ธฐ๋ฐ ์ฒ๋ฆฌ
- ์ฒญํฌ(Chunk) : ์ผ์ ํ ๊ฐ์๋ก ๋ฌถ์ธ ๋ฐ์ดํฐ ๋จ์.
- ์ฒญํฌ ๊ธฐ๋ฐ ์ฒ๋ฆฌ ๋ฐฉ์ : ์ง์ ํ ๊ฐ์๋งํผ ๋ชจ์์(์ฒญํฌ ๋จ์๋ก) ์ฒ๋ฆฌํ๊ณ ํ ๋ฒ์ ์ปค๋ฐํ๋ ๋ฐฉ์. ์ฒญํฌ ๋จ์๋ก ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๋ฉด ๋ฐ์ดํฐ ๋ถํ๋ฅผ ์ต์ํํ๋ฉด์ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ณ ์คํจ ์ ๋กค๋ฐฑ์ ํจ๊ณผ์ ์ผ๋ก ์ํํ ์ ์์.
Spring Batch์์๋ chunk(10)์ฒ๋ผ ์ฒญํฌ ํฌ๊ธฐ๋ฅผ ์ง์ ํด ์ค์ ํ๋ฉฐ, ๊ฐ ์ฒญํฌ๋ ๋ค์ ์์๋ก ์ฒ๋ฆฌ๋๋ค.
- ItemReader๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ์ฝ๋๋ค.
- ์ง์ ๋ ์ฒญํฌ ํฌ๊ธฐ๋งํผ ๋ชจ์๋ค.
- ItemProcessor๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋ค.
- ItemWriter๊ฐ ๊ฐ๊ณต๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ ์ฅํ๊ณ ์ปค๋ฐํ๋ค.
๐ฃ๏ธ Spring Batch์ Chunk์ Chunk ๊ธฐ๋ฐ ๋ฐฉ์์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Spring Batch๋ ๊ธฐ๋ณธ์ ์ผ๋ก Chunk ๊ธฐ๋ฐ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. Chunk๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ๊ฐ์๋ก ๋ฌถ์ ๋จ์์ด๋ฉฐ, ์ด ๋จ์๋ก ํธ๋์ญ์ ์ ์ปค๋ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด chunk ํฌ๊ธฐ๋ฅผ 100์ผ๋ก ์ค์ ํ๋ฉด, ๋ฐ์ดํฐ๋ฅผ ํ ๊ฑด์ฉ ์ฝ๊ณ ๊ฐ๊ณตํ๋ 100๊ฑด์ด ๋ชจ์ผ ๋๊น์ง๋ ์ปค๋ฐํ์ง ์๊ณ , 100๊ฑด์ด ์์ธ ์์ ์ ํ ๋ฒ์ ์ ์ฅํ๊ณ ํธ๋์ญ์ ์ ์ปค๋ฐํ๊ฒ ๋ฉ๋๋ค. ์ด ๋ฐฉ์์ ๋งค ๊ฑด๋ง๋ค ์ปค๋ฐํ์ง ์๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๊ณ , ์ค๊ฐ์ ์์ธ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ฒญํฌ ๋จ์๋ก๋ง ๋กค๋ฐฑ๋๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์์ ์ ์ฒ์๋ถํฐ ๋ค์ ์คํํ ํ์๊ฐ ์์ต๋๋ค. Chunk ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ ํธ๋์ญ์ ๋ฒ์๋ฅผ ์ ์ ํ ๋๋ ์ ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํ๋ฉด์๋ ์คํจ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ ์คํ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ฉฑ๋ฑ์ฑ (Idempotency)
- ๋ฉฑ๋ฑ์ฑ(Idempotency) : ๊ฐ์ ์์ ์ ์ฌ๋ฌ ๋ฒ ์ํํด๋ ๊ฒฐ๊ณผ๊ฐ ๋ณํ์ง ์๋ ์ฑ์ง.
- Spring Batch์ฒ๋ผ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒญํฌ ๋จ์๋ก ์ฒ๋ฆฌํ๊ณ , ์ค๊ฐ ์คํจ ์ ์ฌ์์์ด ๊ฐ๋ฅํ ๊ตฌ์กฐ์์๋ ๋ฉฑ๋ฑ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ด ๋ฐ์ดํฐ ์ ํฉ์ฑ๊ณผ ์์ ์ฑ์ ์ ์งํ๋ ํต์ฌ ์์๊ฐ ๋๋ค.
๋ฉฑ๋ฑ์ฑ์ด ๋ณด์ฅ๋์ง ์๋๋ค๋ฉด?
- DB์ ์ค๋ณต๋ ๋ ์ฝ๋๊ฐ insert๋จ(DB์ ๋ณ๋์ Unique ์ ์ฝ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ)
- ์ด๋ฏธ ์ฒ๋ฆฌ๋ ์ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ฎ์ด์
- ์ธ๋ถ ์์คํ (API, ๋ฉ์์ง ํ ๋ฑ)์ ์ค๋ณต ์์ฒญ์ด ๋ฐ์ํจ
์ค์ ๋ก๋ ItemWriter ๋จ๊ณ์์์ ๋ฉฑ๋ฑ์ฑ ๋ณด์ฅ์ด ๊ฐ์ฅ ์ค์ํ๋ค. Writer๋ ํธ๋์ญ์ ์ ์ปค๋ฐ ์ง์ ์ด๊ธฐ ๋๋ฌธ์, ์ด ๋จ๊ณ์์์ ์ค๋ณต/๋ถ์ผ์น๋ ๊ณง ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฌธ์ ๋ก ์ง๊ฒฐ๋๋ค. Writer๋ฟ๋ง ์๋๋ผ Reader์ Processor์์๋ ๋ฐฉ์ด์ ์ผ๋ก ๋ฉฑ๋ฑ์ฑ์ ๊ณ ๋ คํด๋๋ฉด ๋ ์์ ์ ์ธ ์ค๊ณ๊ฐ ๊ฐ๋ฅํ๋ค.
์๋๋ SettlementRegisterJobConfig ํด๋์ค์ ์ผ๋ถ์ด๋ค.
Reader์ Writer ๊ฐ ๋จ๊ณ์์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฉฑ๋ฑ์ฑ์ด ๋ณด์ฅ๋๋ค.
- Reader : ์ด๋ฏธ settlement๊ฐ ์กด์ฌํ๋ payment๋ ์กฐํ๋์ง ์์
- Writer : ๋ณ๋์ ์ค๋ณต ์ฒ๋ฆฌ ๋ก์ง ์์ด๋ ์์ ํ๊ฒ INSERT ๊ฐ๋ฅ
๐ฃ๏ธ Spring Batch์์ ๋ฉฑ๋ฑ์ฑ์ ์ด๋ป๊ฒ ๋ณด์ฅํ๋์?
Spring Batch๋ ์ฒญํฌ ๋จ์๋ก ํธ๋์ญ์ ์ ์ปค๋ฐํ๊ธฐ ๋๋ฌธ์ Step ๋์ค ์์ธ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์ฌ์์๋๋ ๊ฒฝ์ฐ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ์ค๋ณต ์ฒ๋ฆฌ๋ ์ ์๋ ๊ตฌ์กฐ์ ๋๋ค. ๊ทธ๋์ ๋ฉฑ๋ฑ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด Reader ๋จ๊ณ์์๋ถํฐ ์ค๋ณต ๊ฐ๋ฅ์ฑ์ ์ฐจ๋จํ๋ ์กฐ๊ฑด์ ๋ช ํํ ์ค์ ํ์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ์ฐ ๋ฑ๋ก Job์์๋ payment ํ ์ด๋ธ์์ ์ํ๊ฐ 'DONE'์ด๋ฉด์, ์ด๋ฏธ settlement์ ๋ฑ๋ก๋์ง ์์ ๊ฑด๋ง ์กฐํํ๋๋ก LEFT JOIN + IS NULL ์กฐ๊ฑด์ ์ฌ์ฉํด ์ฒ๋ฆฌ ๋์์ ์ ๋ณํ์ต๋๋ค. ์ ์ฐ ์๋ฃ Job์์๋ settlement ํ ์ด๋ธ์์ status๊ฐ 'READY'์ธ ๊ฑด๋ง ์กฐํํด ์ํ๋ฅผ 'COMPLETED'๋ก ์ ๋ฐ์ดํธํ ํ๋๋ก ๊ตฌ์ฑํ์ต๋๋ค. ์ด์ฒ๋ผ Reader์์ ์ค๋ณต ๋์์ ์ ๊ฑฐํ๊ณ , Writer๋ ID ๊ธฐ๋ฐ ์ฒ๋ฆฌ๋ฅผ ํตํด ์ด๋ฏธ ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ์ ๋ํด ๋ค์ ์ปค๋ฐ๋์ง ์๋๋ก ์ค๊ณํ์ต๋๋ค. ๋๋ถ์ Job์ด ์ฌ์์๋๋๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์ค๋ณต ์ ์ฅ๋๊ฑฐ๋ ์ํ๊ฐ ๋ฐ๋ณต ๋ณ๊ฒฝ๋๋ ๋ฌธ์ ์์ด, ๋ฉฑ๋ฑ์ฑ์ด ์์ฐ์ค๋ฝ๊ฒ ๋ณด์ฅ๋๋ ๊ตฌ์กฐ๊ฐ ๋ฉ๋๋ค.