대용량 레코드 처리를 위한 가볍고 포괄적인 배치 프레임워크.
수백만 건의 데이터를 안정적으로 읽고, 가공하고, 저장하는 작업을 자동화하고 관리해주는 도구
시스템 자원의 효율적 사용
사용자가 몰리는 낮 시간대에 무거운 데이터 계산 작업을 수행하면 서버가 느려지거나 멈출 수 있다. 실시간 서비스에 영향을 주지 않도록, 트래픽이 적은 심야 시간대에 자원을 집중해서 처리한다. 또한 DB 커넥션을 맺고 끊는 과정을 수만 번 반복하는 대신, 한 번 연결해서 대량의 데이터를 쏟아붓는 방식이 훨씬 빠르다.
데이터 무결성과 안정성
Spring Batch는 어디까지 처리했는지 DB에 기록한다. 서버가 뻗어도 처음부터 다시 하지 않아도 된다.
1000개 단위로 묶어 처리하면, 중간에 오류가 나도 해당 덩어리만 롤백하고 나머지는 안전하게 저장할 수 있다.
사용자 경험 분리
사용자가 즉시 결과를 알 필요가 없는 작업(포인트 정산, 대량 메일 발송)은 백그라운드 배치로 돌리고 사용자에게는 '접수되었습니다'라는 응답만 즉시 보낸다.
데이터 베이스의 Offset과 Limit을 사용하여 데이터를 페이지 단위로 끊어서 조회하는 방식이다.
단, 처리 도중 데이터가 추가되거나 삭제되면 Offset이 밀리면서 특정 데이터를 건너뛰거나 중복 조회할 위험이 있다.
DB 서버에 커서를 열어두고, 한 번에 하나씩 일정 묶음(Chunk)씩 데이터를 스트리밍하듯 가져오는 방식이다.
단 조회 시간이 너무 길어지면 DB커넥션을 오래 점유하게 되어 타임아웃이 발생하거나 DB 부하가 생길 수 있다.