Batch란 무엇인가?

goodev·2024년 6월 21일

Spring Batch

목록 보기
1/1

요즘 많이 사용하고 있는 Spring Batch에 대해서 개인적으로 공부하려고 한다.
공부하기 앞서 배치란 무엇인지 간단한 개념을 알아보자.

Batch

Batch는 집단, 무리 한 회분, 일괄적인 처리를 위해 함께 묶다 라는 의미가 있다.

Batch 작업, 프로그램

Batch 작업은 사용자에게 빠른 응답이 필요하지 않은 서비스에 적용할 수 있다.
실행한 특정 시간 이후에는 자원을 거의 소비하지 않는 것이 특징이다.

  • 정기 배치 : 정해진 시간(주로 야간)에 실행
  • 이벤트성 배치 : 사전에 정의해 둔 조건이 충족되면 자동으로 실행
  • On-Demand 배치 : 사용자가 명시적으로 요구가 있을 때마다 실행

Batch Processing

배치는 일괄처리 란 뜻을 갖고 있다.
즉 어떠한 요청이 있을 때마다 데이터를 실시간으로 처리하는게 아니라(사용자와 상호작용이 없이) 프로그램 흐름에 따라 일괄적으로 대량의 데이터를 순차적으로 처리하는 것을 의미한다.

즉 Batch의 특징은
1. 대량건의 데이터를 처리하고
2. 특정 시간에 실행 되며
3. 일괄적으로 처리한다.

Batch 사용하는 이유?

Batch를 사용하는 이유는 업무의 효율성을 위함이다.
비효율적인 시스템의 과부하를 줄이고, 시스템 부하가 많이 발생할 수 있는 시간대를 피해, 지속적으로 실행되기만 하면 되는 Process나 Data를 묶어 처리하는 하기 때문이다.

Batch 프로그램 사용방식

과거에는 야간에 배치를 수행하고 업무시간에 활용하는 방식 등의 일단위 또는 월단위 배치가 많은 편이었다. 현재는 시간 단위로 수행되는 배치가 증가했고 분단위도 존재한다.
배치 전용 서버 또는 인스턴스가 있기도 하다.

Web(온라인) vs Batch(배치)

Batch는 기존의 웹 애플리케이션을 제작하던 방식과는 다른 관점으로 바라봐야한다.
사용자와의 인터랙션이 없으며, 대량의 데이터, 복잡한 프로세스, 반복적이고 주기적인 프로세스를 갖고 있다.
그래서 이벤트성 메일 또는 문자 발송하기, 월 마감 정산/통계 작업, 은행 점검 등의 업무의 프로세스를 batch로 구축한다.

또한 온라인 프로그램은 전체 처리속도 최적화, 최초 응답속도 최적화가 중요하다.
반면 배치 프로그램은 전체 처리속도 최적화가 중요하다.

같은 의미에서 배치 프로그램은 전체적인 자원 사용량을 확인해야 한다. 병렬도를 높게 해서 빨리 처리하는 것보다 차라리 parallel없이 오래 수행하는게 나을 수도 있다.
동시간에 수많은 프로그램이 수행 될 경우 자원(CPI, 메모리, 디스크 등)과 Latch 포함한 Lock 발생할 수 있고 DB DML도 Exclusive 모드 테이블 Lock이 걸리기 때문에 트랜잭션이 활발한 업무시간에는 사용하지 않다로고 주의해야한다.
DB에서 DML(INSERT/DELETE/UPDATE) 하는 경우 작업이 많이 발새생 할 수 있으므로 적절한 Commit 사이즈도 설정해야한다.(수행하다가 에러가 발생할 경우 1건 단위로 롤백이 가능해야 함)
배치는 데이터를 구성하는 것이 쉽지 않아 테스트하기 힘들기 때문에 반드시 테스트 코드를 작성 해야한다.

  • Web: 실시간 처리 / 상대적인 속도 / QA 용이성
  • Batch: 후속 처리 / 절대적인 속도 / QA 복잡성

이러한 단발성으로 대용량 데이터를 처리하는 어플리케이션을 배치 어플리케이션이라고 한다.

profile
개발 기록

0개의 댓글