배치(Batch) 프로그램이란?

이도형·2025년 2월 16일

개념적 의미

배치 프로그램은 일괄적으로 처리하는 것을 의미합니다.

유사한 작업을 그룹화하여 특정 시간에 자동으로 수행하는 정기적 발생하는 자동화된 프로세스를 배치 작업이라고 합니다.

특징

  • 자동 실행 : 사용자 개입 없이 정해진 시간이나 조건에 따라 자동으로 실행됩니다.

  • 대량 처리 : 대량의 데이터 혹은 반복적인 작업을 수행하여 효율적인 처리를 합니다.

  • 순차적 처리 : 작업들이 미리 정의된 순서대로 차례차례 실행됩니다. 즉, 한 작업이 완료되어야 다음 작업이 수행합니다.

  • 장애 복구 : 장애 발생 시 작업 재시작을 위한 체크포인트와 복구 매커니즘을 제공합니다. 또한 수행한 작업에 대한 로그도 남깁니다.

  • 리소스 최적화 : 예약을 통해 시스템 리소스가 여유로운 시간에 실행가능하여 시스템을 최적화할 수 있습니다.

주요 구성 요소

  • 스케줄러 : 배치 작업의 실행 시점 제어, 작업 자동 시작 예약
    ex.
    Spring Batch : Spring사의 오픈 프레임워크
    Quartz : Spring 프레임워크로 개발되는 응용 프로그램 오픈 소스 라이브러리
    Cron : Linux의 스케줄러 도구 (crontab)

  • 작업 (Job) : 배치 처리의 전체 단위, 하나의 배치 프로그램은 하나 이상의 작업으로 구성
    ex. 은행 일일 정산 작업, 플랫폼 주문 집계 작업

  • 작업 단계 (Step) : 하나의 작업은 여러 개의 작업 단계로 나누어지고, 각 단계는 읽기, 처리, 쓰기 등 특정 기능을 수행합니다.
    ex.
    Spring Batch : 각 Step이 ItemReader, ItemProcessor, ItemWriter 로 구성
    Quartz : Job내부에서 단계 구현 or Spring Batch 연동 (JobDetail, Trigger를 통해 Job 예약)
    Cron : 여러 명령어를 통해 Step 구현 가능 (복잡한 Step은 불가능)

  • 입출력(IO) 처리 : 파일, 데이터베이스, 메시지 큐 등 다양한 소스로부터 데이터를 읽은 후 결과를 저장합니다.

  • 트랜잭션 관리 및 처리 오류 : 일관성/신뢰성 확보를 위해 트랜잭션을 관리하고 로그를 기록합니다.

금융 업계에서 활용 예시

금융 배치 프로그램의 특징

  • 대규모 데이터 처리 : 금융 기관 특성 상 다량의 거래와 고객 데이터를 처리합니다.
  • 규제 준수 : 전자금융감독규정에 따라 보안과 접근이 통제되는 등 엄격한 규제를 받습니다.
  • 자동화된 일괄 처리 : 위 내용을 중심으로 다양한 작업을 자동으로 수행합니다.

활용 사례

  • 카카오뱅크 - Airflow : 카카오뱅크의 Airflow 오픈소스는 펀드 배치 시스템을 통해 펀드 관련 작업의 자동화와 효율적인 관리를 이끌었습니다.

  • 일일 결산 및 정산 : 하루 동안 발생한 거래 내역 (계좌 잔액, 이자 계산, 수수료 처리 등)을 모아 일일 결산을 수행합니다.

  • 보고서 생성 및 리스크 관리 : 거래 데이터를 기반으로 주간/월간/분기별 리포트를 작성합니다. 또한 리스크 평가와 규제 준수에 대비한 데이터 분석 작업을 자동화합니다.

  • 데이터 백업 및 복구 : 고객 및 거래 정보의 안전성/신뢰성 확보를 위한 정기적 데이터 백업/복구 작업은 배치 프로그램을 통해 자동화합니다.

단점

  • 오류 처리 : 대랴의 데이터 처리를 통한 오류가 발생하고 이에 대한 파악이 어렵습니다.

  • 긴 실행 시간 및 리소스 점유 : 배치 작업이 길어지면 리스소를 점유해 다른 업무의 영향을 줍니다.

  • 모니터링 및 디버깅 : 배치 작업은 주로 백그라운드에 실행되어 실시간 모니터링이 어렵습니다. 로그와 실행 결과가 어느정도 역할은 하지만 상대적 디버깅이 어렵습니다.

  • 확장성 : 데이터베이스에 종속적인 배치 로직의 경우 확장성 문제가 발생합니다.

끝으로

배치 프로그램은 우리가 컴퓨터를 사용하는 중요한 이유와 이어진다고 생각합니다.
일괄적 처리로 인한 편리성, 안정성이 바로 그것입니다.
그만큼 오류에 대한 관리와 효율적인 설계를 통한 실행 시간 개선이 중요하다고 생각합니다.
또한 배치 프로그램을 전적으로 믿고 결과를 무시하며 대용량 처리를 지속한다면 문제도 그만큼 커질 것입니다.

그렇기 때문에 개발자로 성장하기 위해서는 배치 프로그램에 대한 이해와 활용이 중요하다고 생각합니다.

profile
열심히 살고 싶습니다! 일하고 싶습니다 :)

0개의 댓글