๐ก Spring Batch์ด๋?
Spring Batch๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฒฝ๋ํ๋ ํ๋ ์์ํฌ๋ก, ๋ฐ๋ณต์ ์ธ ์์ ์ ์ํํ๋ ์ผ๊ด ์ฒ๋ฆฌ(Batch Processing) ์์ ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ค๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ก๊น /์ถ์ , ํธ๋์ญ์ ๊ด๋ฆฌ, ์์ ์ฒ๋ฆฌ ํต๊ณ, ์์ ์ฌ์์, ์์ ๊ฑด๋๋ฐ๊ธฐ, ๋ฆฌ์์ค ๊ด๋ฆฌ ๋ฑ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ํ์์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ค๋ค.
๋ํ ์ต์ ํ ๋ฐ ํํฐ์ ๋ ๊ธฐ์ ์ ํตํด ๋์ฉ๋ ๋ฐ ๊ณ ์ฑ๋ฅ ๋ฐฐ์น ์์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ณ ๊ธ ๊ธฐ์ ์๋น์ค๋ฅผ ์ ๊ณตํด์ฃผ๊ธฐ๋ ํ๋ค.
- ๋ฐฐ์น ํ๋ก์ธ์ฑ์ด๋?
- ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ ํธ๋์ญ์ ์ ๊ทธ๋ฃนํํ์ฌ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ๊ธฐ์
- ์ฆ, ์ฌ์ฉ์์๊ฒ ๋น ๋ฅธ ์๋ต์ด ํ์ํ์ง ์์ ์๋น์ค์ ์ ์ฉํ ์ ์๋ค.
โ๏ธ Spring Batch์ ์ฅ์
1. Chunk ๊ธฐ๋ฐ ์์ ์ฒ๋ฆฌ
- Spring Batch๋ฅผ ์ฌ์ฉํ๋ฉด Chunk ๊ธฐ๋ฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ ๋จ์์ Chunk๋ก ๋๋๊ณ ๊ฐ Chunk๋ฅผ ์์ฐจ์ ํน์ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
- Chunk ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ปค๋ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ํด๋น ์์ ์ด ์คํจํ ์ ํด๋น Chunk๋ง ๋กค๋ฐฑํ๊ณ ์ฌ์ฒ๋ฆฌํ ์ ์๋ ์ฉ์ด์ฑ์ ์ ๊ณตํด์ค๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ด๋ฆฌํ๊ณ ์ฒ๋ฆฌ ์๋๋ฅผ ์ต์ ํํ๋๋ฐ ์๋นํ ๋์์ ์ค๋ค.
2. ํจ์จ์ ์ธ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ
๋ฉํฐ ์ฐ๋ ๋, ๋ณ๋ ฌ ์ฒ๋ฆฌ, ์๊ฒฉ ๋ถ์ฐ ์ฒ๋ฆฌ๋ฅผ ํฌํจํ ๊ณ ๊ธ ๋ฐฐ์น ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ง์ํ์ฌ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ์์คํ ๋ฆฌ์์ค ๋ํ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๊ฒ ๋์์ค๋ค.
3. ์ธ๋ถ์ ์ธ ์์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
์คํจํ ๋ฐฐ์น ์์ ์ ์๋์ผ๋ก ์ฌ์์ํ๊ฑฐ๋, ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๊ฑด๋๋ธ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ค๋๋ค.
4. ์ฟผ๋ฆฌ ๊ทธ๋ฃนํ ์ฒ๋ฆฌ
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํจ์จ์ ์ธ ์ํธ ์์ฉ์ ์ํด JDBC ๋ฐฐ์น ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ํ๋์ ๋ฐฐ์น๋ก ๊ทธ๋ฃนํํ์ฌ ์ฒ๋ฆฌํด์ค๋ค.
์ด๋ฅผ ํตํด ๋คํธ์ํฌ ๋น์ฉ์ ์ค์ด๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปค๋ฅ์ ์ฌ์ฉ์ ์ต์ ํํ์ฌ ์ ์ฒด ์ฒ๋ฆฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
๐ก ์ฃผ์ ๊ตฌ์ฑ ์์
Spring Batch๋ Job๊ณผ Step์ด๋ผ๋ ๋ ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๋ก ๋๋๋ค.
- Job: ์ฌ๋ฌ Step์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์น ์์ ์ ๋จ์
- Step: Job ๋ด์ ๊ฐ๋ณ ์์
๋จ์๋ก, ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฒ๋ฆฌํ๋ฉฐ ์ฐ๋ ์ญํ ์ํ
- Tasklet: Step ๋ด์์ ๋จ์ผ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ์ปดํฌ๋ํธ
- Chunk ๊ธฐ๋ฐ ์ฒ๋ฆฌ: ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํฌ๊ธฐ์ ๋ฌถ์์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- ๋ณ๋ ฌ ์ฒ๋ฆฌ : ์ฌ๋ฌ Step์ ๋ณ๋ ฌ ์คํํ๊ฑฐ๋, ํ Step์์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ํ์ฉํ๋ ๋ฑ ๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋จ์ถ
1. Chunk ๊ธฐ๋ฐ ์ฒ๋ฆฌ
์คํ๋ง ๋ฐฐ์น์์๋ ๋ฐ์ดํฐ๋ฅผ ์์ ๋จ์(Chunk)๋ก ๋๋์ด ์ฒ๋ฆฌํ๋ค. ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ชจ๋ ์ฒ๋ฆฌํ์ง ์๊ณ , ์ผ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ํ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํจ์ผ๋ก์จ ์์คํ ์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ๋์ผ ์ ์๋ค.
- Chunk๋ ๋ฐ์ดํฐ์ ๋ฌถ์์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ์์ค์์ ํ ๊ฑด์ฉ ์ฝ์ด๋ค์ธ ํ, ์ฒ๋ฆฌํ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ๋์ด ๋ ๋๊น์ง ์ ์ฅํ์ง ์๊ณ ์ ์งํ๋ค๊ฐ Chunk๊ฐ ์์ฑ๋๋ฉด ์ผ๊ด์ ์ผ๋ก ์ ์ฅํ๋ค.
Chunk ์ฒ๋ฆฌ ํ๋ฆ
Chunk ๊ธฐ๋ฐ ์ฒ๋ฆฌ์ ๊ธฐ๋ณธ์ ์ธ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค:
- ์ฝ๊ธฐ(Read): ์์ค(ํ์ผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ)์์ ํ ๋ฒ์ ํ ๊ฑด์ฉ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์จ๋ค.
- ์ฒ๋ฆฌ(Process): ์ฝ์ด์จ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๊ฑฐ๋ ๋ณํํ๋ ์์ ์ ์ํํ๋ค.
- ์ฐ๊ธฐ(Write): ์ผ์ ํฌ๊ธฐ์ Chunk๊ฐ ์์ฑ๋๋ฉด, ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด ์ ์ฅํ๋ค.
Chunk ํฌ๊ธฐ ์ค์
Chunk ํฌ๊ธฐ๋ ๊ฐ๋ฐ์๊ฐ ์กฐ์ ํ ์ ์๋ค. Chunk ํฌ๊ธฐ๊ฐ ์์์๋ก ์์ฃผ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฏ๋ก ์์ ์ฑ์ ๋์์ง์ง๋ง ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค. ๋ฐ๋ฉด, Chunk ํฌ๊ธฐ๊ฐ ํด์๋ก ์ฑ๋ฅ์ด ๋์์ง์ง๋ง ์ค๋ฅ ๋ฐ์ ์ ์ฌ์ฒ๋ฆฌํด์ผ ํ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ค.
2. ๋ณ๋ ฌ ์ฒ๋ฆฌ
Spring Batch๋ ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํตํด ์ฌ๋ฌ ์ค๋ ๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ, ์ฒ๋ฆฌ ์๊ฐ์ ๋จ์ถํ ์ ์๋ค.
๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฐฉ์
- ๋ฉํฐ์ค๋ ๋ ์ฒ๋ฆฌ: ํ๋์ Step์์ ํ๋์ ๋ฐ์ดํฐ์ ์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
- ๋ณ๋ ฌ ๋จ๊ณ ์ฒ๋ฆฌ: ์ฌ๋ฌ Step์ ๋์์ ๋ณ๋ ฌ๋ก ์คํํ์ฌ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. ์ด๋ Step์ด ๋ ๋ฆฝ์ ์ธ ๊ฒฝ์ฐ์ ์ ํฉํจ
- Partitioning: ํ๋์ Step์์ ํ๋์ ๋ฐ์ดํฐ์ ์ ํํฐ์ ์ผ๋ก ๋๋์ด ๊ฐ ํํฐ์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์. ์ด๋ฅผ ํตํด ๋จ์ผ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฌ๋ฌ ์ค๋ ๋ ๋๋ ํ๋ก์ธ์ค์์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ๋ฉํฐ์ค๋ ๋ ์ฒ๋ฆฌ๋ ํ๋์ ๋ฐ์ดํฐ ์ ์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- ํํฐ์ ๋์ ํ๋์ ๋ฐ์ดํฐ ์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ถ๋ฆฌ์์ผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
ํธ๋์ญ์ ๊ด๋ฆฌ ๋ฐ ์ค๋ฅ ๋ณต๊ตฌ
Spring Batch๋ ๊ฐ Chunk๋ฅผ ํธ๋์ญ์ ๋จ์๋ก ์ฒ๋ฆฌํ๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น Chunk์ ๋ชจ๋ ์์ ์ด ๋กค๋ฐฑ๋๊ณ , ์ด์ ์ ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์๋ค.
์ฌ์์ ๋ฐ ์ค๋ฅ ๋ณต๊ตฌ
๋ฐฐ์น ์์ ์ด ์ค๊ฐ์ ์ค๋จ๋๋๋ผ๋, Spring Batch๋ ์์ ์ํ๋ฅผ ๊ธฐ๋กํ์ฌ ์ฌ์์ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค.
๋ฐฐ์น ์์ ์ ์ฌ์์ํ๋ฉด, ์ค๋จ๋ ์ง์ ๋ถํฐ ์ด์ด์ ์์ ์ ์ํํ๋ค.
๊นจ์ ์ ๋ณด
1. JDBC์ JPA์ ๋ํ ๋ฐฐ์น ํ ์คํธ ์ JDBC๊ฐ JPA์ ๋นํด ์ฑ๋ฅ์ด ๋ ์ข๋ค.
insertํ ๋ฐ์ดํฐ๊ฐ 10๋ง๊ฑด์ด ๋์ด๊ฐ๋ค๋ฉด JDBC ๊ณ ๋ คํด๋ณด๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
bulk insert๋ bulk delete ๋๋ฆฌ๋๋ฐ ๊ตณ์ด jpa๋ก ๊ฐ์ฒด๋ก ๋ค๋ฃจ๋๊ฒ ๋นํจ์จ์ ์ผ๋๊ฐ ๋ง๊ธฐ์
์ฐธ๊ณ
'Back-end > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] com.auth0 vs jsonwebtoken.jjwt (1) | 2025.02.16 |
---|---|
[Spring] JPA ๋ฒํฌ ์ฐ์ฐ์ด๋? (0) | 2025.02.01 |
[Spring] Private ๋ฉ์๋์ @Transactional ์ ์ธ ์ ํธ๋์ญ์ ์ด ๋์ํ๋๊ฐ? (0) | 2025.01.16 |
[Spring] Spring Data JPA์์ ์๋ก์ด Entity์ธ์ง ํ๋จํ๋ ๋ฐฉ๋ฒ? (1) | 2024.12.08 |
[Spring] AWS SageMaker ์๋ํฌ์ธํธ ์ฐ๊ฒฐ ์๋ํ๊ธฐ (0) | 2024.11.23 |