스프링 배치(Batch)와 스케줄러(Scheduler) 차이
아직 내가 일을 시작한지 얼마 안됐을 때 배치 관련 지식이 없을 때 헷갈리고 흥미로웠던 부분이라서
겸사로 포스팅도 써야하지만 마땅히 없어서 끄적여 보는거다 하지만 적당히 떼울 생각은 아니고
차후에 간단한 소스도 포함할 수 있도록 좀 더 보완할 예정이다
- 배치와 스케줄러는 다르다 -
위는 결론으로써 나 같은 초보를 위해 적어놓은 키 포인트다
둘은 뗄 수가 없는 사이로 각자의 역할을 해줘야 사용하는 의미가 생긴다
- 배치 -
배치는 뜻 그대로 일괄 처리, 작업에 관련한 묶음, 일련의 처리, 특정 업무의 기능으로 말할 수 있으며
보편적으로 대용량 처리를 기반으로 수집, 동기화, 적재, 검증, 집계 등의 작업으로 많이 쓰인다
배치의 요소로 잡과 스텝이 있으며 1 : N 으로 구성되어있다
Job은 하나의 기능으로써 다양한 역할의 스텝을 정해진 순서대로 묶어주는 역할이다
Step은 간단히 말하자면 하나의 기능을 놓고 봤을 때 특정 역할을 수행하는 작업이다
예를 들자면 자바의 메소드나 스크립트의 펑션같은 느낌으로
객체 지향 관점에서 여러 함수를 모아서 하나의 기능을 만들듯이 하나의 조각이다
또한 스텝은 크게 두 가지 형태가 있는데 Tasklet과 Chunk가 있다
태스클릿은 하나의 작업만 수행해서 단순하게 생겼고 만들기도 쉽다
청크는 작업을 세 가지의 단위로 나누는데 Reader, Processor, Writer로 구성되며
직접 써보진 않았지만 특정 단위마다 트랜잭션을 나눠 작업을 할 수 있기에
서버에 무리가 갈 수 있는 단위의 작업을 할 경우 추천한다
물론 트랜잭션도 그렇고 만들기 나름이긴 하지만 제공한대로 쓰는게 바람직하다고 본다
- 스케줄러 -
스케줄러는 배치를 실행 시켜주는 트리거 역할을 한다
배치는 보통 오류가 났을 때를 제외하고는 직접 실행시키거나 개입하지 않는다
그럴 경우 누군가는 자동으로 배치를 특정 시간이나 주기를 설정하여 실행해야 하는데
그 역할이 바로 스케줄러이다
스케줄러는 쓰임새에 따라 다양한 종류가 있으며
간단한 작업은 스프링에서 제공하는 Spring Scheduler가 존재하며
다양한 기능과 성능이 좋은 Quartz, 리눅스의 crontab
유료 솔루션인 Control-M 등이 있다
배치를 하면서 너무 재밌었던 기억으로 좋은 사람들과 경험을 통해 많은 것을 느끼고
아키텍처에 흥미가 생긴 계기이기도 하다 그니까 분발해야지 ㅅㄱ