[Spring Batch 5.x] 배치를 사용하기 위한 환경 설정

2024. 12. 11. 03:28·Spring/Batch
728x90
반응형
SMALL

배치는 점검시간에 이뤄지는 작업과 유사하다

배치란?

배치는 일정 시간 동안 대량의 데이터를 한 번에 처리하는 방식이다. 대량 데이터를 복잡한 쿼리를 통해 이동시키는 도중 프로그램이 멈추면 처음부터 다시 시작해야 하는 문제가 생길 수 있다. 이를 방지하기 위해 작업 중간 지점을 기록하는 메커니즘을 활용한다. 이렇게 함으로써 중단된 지점에서 다시 작업을 이어갈 수 있다.

배치는 일반적으로 반복적이고 스케줄 기반으로 실행된다. 예를 들어, 매일 새벽 특정 데이터를 처리하거나 정기적으로 보고서를 생성하는 작업이 이에 해당한다.

현재 Batch는 5.x 버전이 나오면서 이전에 사용했던 방식과 많은 변화가 있어 문서를 학습하고 실제로 사용해보지 않으면 쓰기 힘들다고 느꼈다. 계속 박치기?를 하면서 성공한 나의 환경 설정을 공유해보려 한다.


Spring Batch의 핵심 기능

Spring Batch는 단순한 데이터 처리를 넘어 다양한 기능을 제공한다.

  1. 체계적인 작업 관리
    • Job, Step, Chunk 단위로 작업을 나눠 세밀하게 관리한다.
    • Job 내부에서 여러 Step을 정의할 수 있고, 각 Step은 "읽기 -> 처리 -> 쓰기"를 반복한다.
  2. 트랜잭션 관리
    • 배치 작업 중 데이터 처리의 신뢰성을 보장하기 위해 트랜잭션 기반으로 작업을 처리한다.
    • 실패 시 특정 지점에서 작업을 재시작할 수 있다.
  3. 스케줄링 및 재시도
    • Spring Scheduler나 Quartz와 같은 스케줄링 도구와 연동 가능하다.
    • 작업 실패 시 재시도와 복구를 지원한다.
  4. 페이징 및 청크 처리
    • 대량 데이터를 한 번에 처리하지 않고, 청크(Chunk) 단위로 나눠 반복 작업을 수행한다.
    • 이를 통해 메모리 사용량을 줄이고 성능을 최적화한다.
  5. 다양한 데이터 소스 지원
    • 데이터베이스, 파일 시스템, 웹 API 등 여러 소스와의 유연한 연동이 가능하다.
    • 이로 인해 다양한 형태의 데이터를 처리할 수 있다.
  6. 병렬 처리 및 분산 처리
    • 병렬 실행과 분산 작업을 통해 대량 데이터를 더 빠르게 처리할 수 있다.
    • 예를 들어, 멀티스레드 방식이나 클러스터 환경에서 작업을 분배할 수 있다.
  7. 메타 데이터 관리
    • 배치 작업의 상태, 실행 이력, 오류 기록 등을 관리하는 메타 테이블을 제공한다.
    • 이를 통해 작업 진행 상황을 모니터링하고 분석할 수 있다.

메타 테이블

Spring Batch는 데이터 처리 정보를 저장하는 메타 테이블을 제공한다. 이는 배치 작업의 상태와 이력을 관리하는 데 사용된다. 메타 테이블은 기본적으로 다음 정보를 포함한다.

  • 작업 이름, 실행 시간, 실행 상태
  • 각 Step의 처리 상태 및 오류 정보
  • 재시작을 위한 체크포인트 정보

이를 활용하면 테이블 간 데이터 이동, 엑셀 파일 변환, 웹 API 호출 등 다양한 데이터 작업을 효율적으로 수행할 수 있다.


배치 작업의 동작 방식

Spring Batch의 기본 동작 방식은 다음과 같다.

  1. 데이터를 읽어온다 (Item Reader).
  2. 데이터를 처리한다 (Item Processor).
  3. 처리된 데이터를 저장한다 (Item Writer).

 

Chunk 기반 처리

Spring Batch는 데이터를 Chunk 단위로 나눠 처리한다. 청크는 메모리 사용량을 제어하고, 작업 중 실패 시 체크포인트에서 다시 시작할 수 있도록 돕는다. 예를 들어, 청크 크기를 100으로 설정하면 100개의 데이터를 읽고 처리한 후 한 번에 저장한다.


배치 활용 사례

배치 작업은 다음과 같은 다양한 분야에서 활용된다.

  • 은행 업무: 매일 자정 전일 데이터를 기반으로 이자 계산
  • 회원 관리: 주기적인 회원 상태 확인
  • 급여 처리: 정기적으로 급여 계산 및 지급
  • 보고서 생성: 매주 또는 매월 데이터를 기반으로 보고서 작성
  • 데이터 정리: 오래된 데이터를 삭제하거나 백업

Spring Batch의 아키텍처

Spring Batch의 주요 구성 요소는 다음과 같다.

  • Job Launcher: 배치 작업을 실행하는 시작점
  • Job: 읽기, 처리, 쓰기 과정을 정의한 작업 단위
  • Step: Job 내부에서 실행되는 하나의 단위 작업
  • Item Reader: 데이터를 읽는 역할
  • Item Processor: 데이터를 처리하는 역할
  • Item Writer: 처리된 데이터를 저장하는 역할

Spring Batch는 또한 병렬 처리와 분산 처리를 지원하며, 대규모 데이터 처리를 더 효율적으로 수행할 수 있다. 아래 그림은 Spring Batch의 기본 아키텍처를 나타낸다.


Spring Batch에서 두 개의 DB 연결

Spring Batch 작업에서는 메타데이터 저장용 DB와 배치 데이터 처리용 DB를 별도로 구성할 수 있다. 이를 구현하기 위한 환경과 설정 방법은 다음과 같다.

환경

  • Java 17
  • Spring Framework 3.x
  • Spring JPA
  • Spring Batch
  • Lombok
  • MySQL

application.yaml 설정

두 데이터 소스를 설정하고 충돌 방지를 위해 하나의 데이터 소스를 기본값으로 지정한다.

spring:
  batch:
    job:
      enabled: false
  datasource-data:
    url: jdbc:mysql://localhost:3306/스키마1?serverTimezone=Asia/Seoul
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: 아이디
    password: 비밀번호
  datasource-meta:
    url: jdbc:mysql://localhost:3306/스키마2?serverTimezone=Asia/Seoul
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: 아이디
    password: 비밀번호

 

위 내용은 아래 깃허브에서도 확인이 가능하다!

잘 읽었다면 댓글 또는 링크에 들어와서 별하나만 눌러주고 가주면 감사하겠다...ㅎ

https://github.com/Sunro1994/TIL/tree/main/spring/batch

 

TIL/spring/batch at main · Sunro1994/TIL

배운 개념들만 정리하는 공간. Contribute to Sunro1994/TIL development by creating an account on GitHub.

github.com

 

728x90
반응형
SMALL

'Spring > Batch' 카테고리의 다른 글

[Spring Batch5] Batch를 사용해서 추가정보 미 등록 유저 삭제하기  (2) 2024.12.24
'Spring/Batch' 카테고리의 다른 글
  • [Spring Batch5] Batch를 사용해서 추가정보 미 등록 유저 삭제하기
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (313)
      • 면접 준비 (35)
        • OS (6)
        • Spring Security (0)
        • Java (1)
        • DB (9)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      JSP
      redis
      JS
      리눅스
      Til
      jsp request
      자바기초
      jsp기초
      JavaScript
      자바 알고리즘
      자바스크립트
      redis 채팅
      리눅스마스터2급
      스프링프레임워크
      자바 반복문
      springsecurity
      Spring
      레디스
      백준
      spring redis
      java
      자바 면접질문
      Springframework
      자바
      HTML
      리눅스마스터2급정리
      CSS
      Spring Data Redis
      프로그래머스
      자바 면접
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [Spring Batch 5.x] 배치를 사용하기 위한 환경 설정
    상단으로

    티스토리툴바