๋ฐฑ์๋ ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ๋ ๊ฐํธํ๊ณ ํจ๊ณผ์ ์ผ๋ก!
์คํ๋ง ๋ฐฐ์น์ ์ธ๊ณ๋ฅผ ๊ฒฝํํด ๋ณด์ธ์.
์คํ๋ง ๋ฐฐ์น ํ์ต,
์ด๋ป๊ฒ ์์ํด์ผ ํ ๊น์?
์คํ๋ง ์ฌ๋จ์์ ์งํํ๋ ์คํ๋ง ํ๋ก์ ํธ๋ ๋ค์ํฉ๋๋ค.
๋ํ์ ์ผ๋ก ์คํ๋ง ๋ถํธ๋ ์คํ๋ง ๋ฐ์ดํฐ, ์คํ๋ง ํด๋ผ์ฐ๋ ๋ฑ์ด ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ํ๋ก์ ํธ๋ค๊ณผ ๊ด๋ จ๋ ์๋ฃ๋ ๋ ํผ๋ฐ์ค๊ฐ ๋ง์ด ์กด์ฌํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์คํ๋ง ๋ฐฐ์น๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
Spring Batch?
์คํ๋ง ๋ฐฐ์น๋ ๋ฐฐ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๋ ๋ฐ ํ์ํ ๊ฐ๋ ฅํ API๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ API๋ง์ ์ฌ์ฉํด๋ ๋ณต์กํ ๋ฐฐ์น ํ๋ก๊ทธ๋จ๋ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
์คํ๋ง ๋ฐฐ์น๋ ์คํ๋ง์ ํ์ ํ๋ก์ ํธ ์ค์์๋ ์ญ์ฌ๊ฐ ์งง์ง ์๊ณ ๋ฒ์ ์ด ๊ณ์ ์
๊ทธ๋ ์ด๋ ๋๋ฉด์ ๊ฒฌ๊ณ ํ ๊ธฐ์ ์ ๊ธฐ๋ฐ์ ๊ฐ์ถ๊ณ ์์ต๋๋ค. ์ค๊ณ ๋ฐ ๊ตฌํ์ ์์ด์๋ ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ์ด ๋์์๋ ๋ถ๊ตฌํ๊ณ , ๊ด๋ จ ์๋ฃ๋ ๋ ํผ๋ฐ์ค๊ฐ ๋ค๋ฅธ ์คํ๋ง ํ๋ก์ ํธ๋ค๊ณผ ๋น๊ตํด์ ํฑ์์ด ๋ถ์กฑํ ๊ฒ์ด ํ์ค์
๋๋ค.
์ด์ ๊ทธ๋์ ์คํ๋ง ๋ฐฐ์น๋ฅผ ์ฌ์ฉํด ์จ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ์คํ๋ง ๋ฐฐ์น์ ๊ธฐ์ ์ ์ต๋ํ๊ณ ์ ํ๋ ๊ฐ๋ฐ์๋ค์๊ฒ ์ง์์ ๊ณต์ ํ๊ณ ์ ๊ฐ์๋ฅผ ๊ธฐํ, ์ ์ํ๊ฒ ๋์์ต๋๋ค.
์คํ๋ง ๋ฐฐ์น์
ํต์ฌ์ ์๋ ค๋๋ฆฝ๋๋ค.
๋ณธ ๊ฐ์๋ ์คํ๋ง ๋ฐฐ์น์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ์ ํ ๋ชจ๋ฅด๋ ์ฌ์ฉ์๋ถํฐ ๊ธฐ์ด์ ์ธ ์ง์ ๋ฐ ์ฌ์ฉ ๊ฒฝํ์ ์์ง๋ง ์ข๋ ๊น์ด์๋ ์ง์์ ์ต๋ํ๊ณ , ์คํ๋ง ๋ฐฐ์น์ ํต์ฌ์ ์ธ ๊ฐ๋
๊ณผ ์๋ฆฌ, ๋ด๋ถ ๊ตฌ์กฐ, ๋์ ๋ฐฉ์ ๋ฑ์ ์ฌ๋์๊ฒ ์ดํดํ๊ณ ์ด๋ฅผ ์์ฉํ๊ณ ์ ํ๋ ๋ถ๋ค์ ์ํ ๊ฐ์์
๋๋ค.
์๋ฐ ๊ฐ๋ฐ์๋ผ๋ฉด
์คํ๋ง ๋ฐฐ์น๋ณด๋ค
๋ ๋์ ์ ํ์ ์์ต๋๋ค.
์๋ฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฐ๋ฐ์๋ผ๋ฉด ๋ฐฐ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํจ์ ์์ด ์คํ๋ง ๋ฐฐ์น๋ณด๋ค ๋ ๋์ ์ ํ์ ์๋ค๊ณ ์๋ถํฉ๋๋ค. ์คํ๋ง์ ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ ๋ค ์ฌ์ฉํ ์ ์๋ ๋์์ ๋ฐฐ์น ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ํ์ํ ๋ค์ํ ์์๋ค์ ์ ๊ณตํด์ฃผ๊ณ ์์ผ๋ฉฐ ๊ฐ๋จํ ์ค์ ๊ณผ ๊ตฌ์ฑ์ผ๋ก๋ ๋ณต์กํ๊ณ ๊ฒฌ๊ณ ํ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด์๋ ์คํ๋ง ๋ฐฐ์น์ ๊ธฐ์ด์ ๊ธฐ๋ณธ์ ํ์คํ๊ฒ ์ดํด ๋ฐ ์ ๋ฆฝํ๊ณ ๋์ ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ๋ก ๋์ด๊ฐ์ผ ํฉ๋๋ค. ๋จ์ํ API ์ฌ์ฉ๋ฒ์ ์ธ์ฐ๊ณ ์ฝ๋ฉํด์๋ ์คํ๋ง ๋ฐฐ์น์ ๋ฐฉ๋ํ ๊ธฐ์ ์ ์ฅ์ ์ ๊ทน๋ํํ ์ ์์ต๋๋ค.
์คํ๋ง ๋ฐฐ์น๋ฅผ ๋๋ฌ์ผ ๊ณ ๋ฏผ,
์ด ๊ฐ์๋ก OK.
- โ๋ฐฐ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ๋ ์คํ๋ง ๋ฐฐ์น๊ฐ ๊ฐ์ฅ ์ข์ ์ ํ์ธ๊ฐ์?โ
- โ์คํ๋ง ๋ฐฐ์น์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ ๋ฐ ๊ตฌ์ฑํ๋ ๋ด์ฉ์ ๋๋ต์ ์ผ๋ก ์๊ณ ์๋๋ฐ ์ด๊ฒ์ผ๋ก๋ ๋ฐฐ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๋๋ฐ ๊ด์ฐฎ์๊น์?โ
- โ๋ค์ํ ๋ฐฐ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๋๋ฐ ์คํ๋ง ๋ฐฐ์น๋ฅผ ์ด๋ ์ ๋ ์์ค๊น์ง ์์์ผ ํ๋๊ฐ์?โ
์ด ๊ฐ์๋ ์คํ๋ง ๋ฐฐ์น์ ํต์ฌ์ ์ธ ๊ฐ๋
๊ณผ ์๋ฆฌ๋ฟ ์๋๋ผ ๋ค์ํ ์ค์ต๊ณผ ๋ด๋ถ ํ๋ฆ๋ค์ ์ฌ์ธต์ ์ผ๋ก ๋ถ์ํจ์ผ๋ก์จ ์ค๋ฌด์ ์ผ๋ก ๋ค์ํ ๋ฐฐ์น ์ดํ๋ฆฌ์ผ์
์ ๊ฐ๋ฐํ ์ ์๋ ์ญ๋์ ๊ธฐ๋ฅด๋ ๋ฐ ๋ชฉ์ ์ ๋๊ณ ์์ต๋๋ค.
์ด๋ฐ ๋ถ๋ค๊ป
์ถ์ฒํฉ๋๋ค.
์คํ๋ง ๋ฐฐ์น
(Spring Batch)๋ฅผ
์ฒ์ ์ ํ๋
์
๋ฌธ์
์คํ๋ง ๋ฐฐ์น๋ฅผ ํตํด
๋ฐฐ์น ์ดํ๋ฆฌ์ผ์ด์
(Batch Application)์
๋ง๋ค๊ณ ์ ํ๋ ๋ถ
๋จ์ API ์ฌ์ฉ์ ๋์ด
๋ด๋ถ ๊ตฌ์กฐ์ ๋์์๋ฆฌ
๋ฑ์ ์ฌ์ธต์ ์ผ๋ก
์๊ณ ์ ํ๋ ๋ถ
์คํ๋ง ๋ฐฐ์น์
๊ธฐ๋ฅ์ ํ์ฅํ์ฌ
์ปค์คํฐ๋ง์ด์งํ ์์ค์
์ญ๋์ ๊ฐ์ถ๊ณ ์ถ์ ๋ถ
์ด ๊ฐ์์ ํน์ง
- ๋จ์ํ API ์ฌ์ฉ๋ฒ๊ณผ ๋ฌธ๋ฒ๋ง์ ํ์ตํ์ง ์์ต๋๋ค.
- ์คํ๋ง ๋ฐฐ์น๊ฐ ์ด๋ค ๊ตฌ์กฐ๋ก ๋์ํ๋์ง ์ ํํ ํ๋ฆ๋ค์ ์ดํดํ๊ณ ์๋ฆฌ๋ฅผ ํ์
ํ๋๋ก ํฉ๋๋ค.
- ์คํ๋ง ๋ฐฐ์น๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ํ์ฅํ์ฌ ์ปค์คํฐ๋ง์ด์งํ๋ ์ญ๋์ ๊ธฐ๋ฅด๋๋ก ํฉ๋๋ค.
- ์ค์ ์์ ๋ฅผ ํตํด ์คํ๋ง ๋ฐฐ์น์ ๊ธฐ์ ์ ์ด๋ป๊ฒ ์ค๋ฌด์ ์ผ๋ก ํ์ฉํ ์ ์์์ง์ ๋ํ ๊ฐ๊ฐ์ ์ตํ๊ฒ ๋ฉ๋๋ค.
ํ์ต ์ปค๋ฆฌํ๋ผ
1. ์คํ๋ง ๋ฐฐ์น์ ํต์ฌ ๋๋ฉ์ธ ์ดํด ๋ฐ ํ์ฉ
์คํ๋ง ๋ฐฐ์น์์ Job์ ๊ตฌ์ฑํ๋๋ฐ ์์ด์ ์ฌ์ฉ๋๋ ์ฌ๋ฌ ๋๋ฉ์ธ๋ค์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Job, Step, Flow, Tasklet, JobInstance, Jobexecution, StepExecution, ExecutionContext ๋ฑ.. ์ด๋ฌํ ๋๋ฉ์ธ๋ค์ ๋ํ ๊ฐ๋
๋ถํฐ ํ์คํ๊ฒ ์ดํด๋ฅผ ํด์ผ ์ฌ๋ฐ๋ฅธ Job์ ๊ตฌ์ฑํ๊ณ ํ์ฉํ ์ ์์ต๋๋ค. ๊ฐ ๋๋ฉ์ธ๋ค์ ์ฉ์ด์ ๊ฐ๋
๊ณผ ๋๋ฉ์ธ๋ค๊ฐ์ ๊ด๊ณ๋ฅผ ์ดํดํจ์ผ๋ก์จ ๊ฐ๋จํ Job๋ถํฐ ๋ณต์กํ Job๊น์ง ์ํ๋ Job์ ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ตํ๊ฒ ๋ฉ๋๋ค.
2. ์คํ๋ง ๋ฐฐ์น์ Job, Step, Flow ์ดํด ๋ฐ API ํ์ฉ
์คํ๋ง ๋ฐฐ์น์์ Job์ ๊ตฌ์ฑํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ๋จ์์ ํญ๋ชฉ๋ค์ ๋ํด์ ํ์ตํฉ๋๋ค. Job, Step, Flow์ ๊ธฐ๋ณธ ๊ฐ๋
๊ณผ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ ๊ฐ API ์ ๋ํ ์ค์ ๊ณผ ํ์ฉ๋ฐฉ๋ฒ์ ๋ํด ํ์ตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Job๊ณผ Step์ ์ฌ๋ฌ ์ ํ๋ค์ ๋ํด ์ดํด๋ณด๊ณ Job, Step, Flow๋ฅผ ์กฐํฉํ์ฌ ๋ฐฐ์น์ก์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ํ์ตํจ์ผ๋ก์ ์คํ๋ง ๋ฐฐ์น์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ Job์ ๊ตฌ์ฑ ๋ฐ ํ์ฉ์ ์์ ์์ฌ๋ก ๊ตฌํํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ธฐ๋ฅด๊ฒ ๋ฉ๋๋ค.
3. ์คํ๋ง ๋ฐฐ์น์ ์ฒญํฌ ๊ธฐ๋ฐ ํ๋ก์ธ์ฑ ์ ๋ณต
์คํ๋ง ๋ฐฐ์น์์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๊ธฐ๋ฅ ์ค์ ํ๋๊ฐ ๋ฐ๋ก ์ฒญํฌ ๊ธฐ๋ฐ ํ๋ก์ธ์ฑ์
๋๋ค. Chunk ๊ฐ๋
์ ๋์
ํ์ฌ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ฑ๋ฅ์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋๋ก ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ๋๋ API๊ฐ ItemReader, ItemProcessor, ItemWriter ์
๋๋ค. ์ฒญํฌ ๊ธฐ๋ฐ ํ๋ก์ธ์ฑ์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
๊ณผ ์๋ฆฌ๋ฅผ ํ์ตํ๊ณ ๋ด๋ถ ์ํคํ
์ฒ๊น์ง ํ์
ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ์์ ๋ฅผ ํตํด ์ฒญํฌ ๊ธฐ๋ฐ ํ๋ก์ธ์ฑ์ ํตํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ์ฉ๋ฒ์ ์ ๋ณตํ๊ฒ ๋ฉ๋๋ค.
4. ์คํ๋ง ๋ฐฐ์น์ ๋ฉํฐ ์ค๋ ๋ ํ๋ก์ธ์ฑ ์ ๋ณต
๋์ฉ๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์๊ฐ์ด ๋ง์ด ์์๋๋ ๋ฐฐ์น ์ฒ๋ฆฌ๋ ๋จ์ผ ์ค๋ ๋๊ฐ ์๋ ๋ฉํฐ ์ค๋ ๋๋ก ๊ตฌ์ฑํ์ฌ ๋์์ ๋ณ๋ ฌ์ ์ธ ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ํจ์ผ๋ก์จ ๋์ฑ ํจ์จ์ ์ธ ๋ฐฐ์น ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๋๋ก ํฉ๋๋ค. ์๋ฐ์ ์ค๋ ๋ ๋ชจ๋ธ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
๊ณผ ์คํ๋ง ๋ฐฐ์น์์ ์ ๊ณตํ๋ ๋ฉํฐ ์ค๋ ๋ ๊ด๋ จ๋ ๊ธฐ์ ๋ค์ ๋จผ์ ์ดํดํ๊ณ ์ฌ๋ฌ ๋ฉํฐ ์ค๋ ๋ ์ ํ์ ๋ฐฐ์น์ฒ๋ฆฌ ๊ธฐ์ ๋ค์ ์ตํ๊ฒ ๋ฉ๋๋ค.
5. ์คํ๋ง ๋ฐฐ์น์ ์ค๋ฅ ์ ์ด
๋ฐฐ์น ์คํ์ ์์ด์ ์ค๋ฅ๋ ์์ธ๋ ์ธ์ ๋ ์ง ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ์ด๋ฌํ ์ํฉ์์ ์ค๋ฅ๋ก ์ธํ ์ฅ์ ๋ฅผ ๋ฏธ๋ฆฌ ์์ํ๊ณ ๋๋นํจ์ผ๋ก์จ ๋ฐฐ์น ์๋น์ค๊ฐ ์์ ํ ์ค๋จ๋๋ ๊ฒ์ด ์๋ ์ผ์์ ์ธ ์ค๋จ ํน์ ์์ธ๋ฅผ ๋ฌด์ํ๊ณ ๋ค์ ๋จ๊ณ๋ก ๊ฐ๋ ๋ฑ์ ์ฒ๋ฆฌ๋ฅผ ํจ์ผ๋ก์จ ๋ด๊ฒฐํจ์ฑ์ ๊ฐ์ง ๋ฐฐ์น ์ดํ๋ฆฌ์ผ์ด์
์ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ์ ์๋์ง ํ์ตํ๊ฒ ๋ฉ๋๋ค. ์ด์ ๊ด๋ จ๋ ๊ธฐ์ ์ธ Skip๊ณผ Retry ๊ธฐ๋ฅ์ ๋ํ ์์ธํ ๋ด์ฉ๊ณผ ์ค์ต์ ์งํํฉ๋๋ค.
6. ์ค์ ! ์คํ๋ง ๋ฐฐ์น ์ดํ๋ฆฌ์ผ์ด์
์์
์คํ๋ง ๋ฐฐ์น์ ๊ธฐ์ ์ ์ฌ์ฉํด์ ์ค์ ์์ ์์ฉํ ์ ์๋ ๋ฐฐ์น ์ดํ๋ฆฌ์ผ์ด์
์ ์ ์ํ๋ ์๊ฐ์ ๊ฐ์ง๋๋ค. ์คํ๋ง ๋ฐฐ์น ๊ธฐ๋ฐ ์์์ ๋ฉํฐ ์ค๋ ๋ ๊ตฌ์กฐ๋ก API ์๋ฒ์ ํต์ ํ๋ ๋ฐฐ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๊ตฌํํ๋ ์์ ๋ฅผ ๊ตฌํํด ๋ด์ผ๋ก์จ ์คํ๋ง ๋ฐฐ์น์ ์ ๋ฐ์ ์ธ ๋ด์ฉ์ ์ดํดํจ๊ณผ ๋์์ ์ค๋ฌด์์ ์คํ๋ง ๋ฐฐ์น๋ฅผ ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์ง์ ๋ํ ์๊ฒฌ์ ๋ํ ์ฃผ๋ ์๊ฐ์ด ๋ ๊ฒ์
๋๋ค.
์ด ๊ฐ์๋ฅผ ๋ง๋
์ง์๊ณต์ ์๋ฅผ ์๊ฐํฉ๋๋ค.
์ ์์(leaven)
- ํ์ง ์๋ฐ ๊ฐ๋ฐ์
- SI/SM/์๋ฃจ์
/Mobile/Front&Back-end ์ ๋ค์ํ ํ๋ก์ ํธ ๊ฒฝํ
- Architect/PM/PL ๋ก์ ์ญํ ์ํ
- Github