Spring Batch

jin·2026년 3월 29일

Spring Batch

대용량 레코드 처리를 위한 가볍고 포괄적인 배치 프레임워크.
수백만 건의 데이터를 안정적으로 읽고, 가공하고, 저장하는 작업을 자동화하고 관리해주는 도구

왜 Batch를 쓰는가

  1. 시스템 자원의 효율적 사용
    사용자가 몰리는 낮 시간대에 무거운 데이터 계산 작업을 수행하면 서버가 느려지거나 멈출 수 있다. 실시간 서비스에 영향을 주지 않도록, 트래픽이 적은 심야 시간대에 자원을 집중해서 처리한다. 또한 DB 커넥션을 맺고 끊는 과정을 수만 번 반복하는 대신, 한 번 연결해서 대량의 데이터를 쏟아붓는 방식이 훨씬 빠르다.

  2. 데이터 무결성과 안정성
    Spring Batch는 어디까지 처리했는지 DB에 기록한다. 서버가 뻗어도 처음부터 다시 하지 않아도 된다.
    1000개 단위로 묶어 처리하면, 중간에 오류가 나도 해당 덩어리만 롤백하고 나머지는 안전하게 저장할 수 있다.

  3. 사용자 경험 분리
    사용자가 즉시 결과를 알 필요가 없는 작업(포인트 정산, 대량 메일 발송)은 백그라운드 배치로 돌리고 사용자에게는 '접수되었습니다'라는 응답만 즉시 보낸다.

페이징 기반 배치(Paging-based Batch)

데이터 베이스의 Offset과 Limit을 사용하여 데이터를 페이지 단위로 끊어서 조회하는 방식이다.

  • 작동 원리: 1번 페이지(1~10번), 2번 페이지(11~20번)와 같이 게시판의 페이징과 유사하게 데이터를 읽어온다.
  • 특징
    - 상태 비저장(Stateless): 각 페이지를 조회할 때마다 새로운 쿼리를 실행하므로, DB커넥션을 오래 유지하지 않는다.
    -병렬 처리 유리: 페이지 번호만 지정하면 여러 스레드가 서로 다른 페이지를 동시에 처리하기 쉽다.

    단, 처리 도중 데이터가 추가되거나 삭제되면 Offset이 밀리면서 특정 데이터를 건너뛰거나 중복 조회할 위험이 있다.

커서 기반 배치(Cursor-based Batch)

DB 서버에 커서를 열어두고, 한 번에 하나씩 일정 묶음(Chunk)씩 데이터를 스트리밍하듯 가져오는 방식이다.

  • 작동 원리: DB서버와 연결을 유지한 채로 '다음 데이터'를 가리키는 포인터를 이동시키며 데이터를 읽는다.
  • 특징
    - 성능 일관성: 페이징 방식은 뒤로 갈수록 Offset 계산 비용이 커지지만, 커서는 현재 위치에서 다음데이터만 가져오므로 대용량 처리에 성능 저하가 적다.
    - 데이터 무결성: 한번 열린 커서 범위 내에서 데이터를 읽으므로, 처리 중 데이터 변화에 영향을 덜 받는다.

    단 조회 시간이 너무 길어지면 DB커넥션을 오래 점유하게 되어 타임아웃이 발생하거나 DB 부하가 생길 수 있다.

profile
성장중

0개의 댓글