Spring batch

이민우·2023년 10월 27일
0

오늘은 Spring batch 에 대해서 적어 보려고 한다.

Spring batch

  • Spring 프레임워크의 일부로 배치 처리 프레임워크 이다.
  • 대량의 데이터를 일괄 처리하고 작업을 스케줄링하는데 사용된다.

결론적으로 Spring 기반의 배치 작업을 구성할 수 있는 프레임워크이다.

Spring batch 특징

  • 대용량 데이터 처리
    • 대규모 데이터베이스 작업
    • 데이터 추출 및 변환
    • 데이터 파일 처리
    • 보고서 생성
  • 스케줄링
    • 작업을 예약하고 주지적으로 실행할 수 있는 스케줄링 기능 제공
    • 백그라운드에서 반복적인 작업을 실행
    • Spring Scheduled, Qyartz 와 함께 사용
  • 에러처리
    • 예외 처리 및 재시도 기능을 통해 안전성을 높힘
    • 문제 발생 시 적절한 조치를 취할 수 있다.
  • 장애 복구
    • 일괄 처리 작업 중 시스템 장애 발생 시 중단된 작업을 정확한 지점부터 다시 시작할 수 있다.

스케줄링과 같은 특징은 Spring batch 를 사용할 땐 보통 Scheduled 와 Quartz 를 사용한다고 생각하는게 좋을것 같다,
Spring batch 가 직접 적으로 주기적 실행을 제공하는것 같진 않아서 이다.

에러처리와 장애 복구 관련된 특징은 Spring batch 를 사용할 때 필요한 메타데이터 와 관련된 특징 으로 밑에서 살펴 보도록 하겠다.

일괄처리 방법

스프링 배치 일괄처리 방법은 간단하게 그림으로 살펴 보자면 Step은 하나의 작업이라고 생각하고 이러한 Step 여러개의 한 단위를 Job 이라고 생각하면 될것 같다.

그리고 Step 을 구현하는 방법엔 Tasklet 과 Reader, Writer 을 함께 사용하는 것이 있다.

  • Job
    • 여러 Step 으로 구성
    • Step 을 순차적으로 실행하도록 구성
    • Job 은 최소한 1개 이상의 Step 을 가져야 한다.
  • Step
    • 각 Step 은 특정 작업을 수행한다
    • 데이터 처리 및 비즈니스 로직을 정의 한다.
  • Tasklet
    • Step 의 유형 중 하나
    • 비교적 간단한 로직을 구현할 때 적합하다.
    • 특정 조건을 총족하는 데이터 삭제 등의 단순한 작업을 수행한다.
  • ItemReader, ItemProcessor, ItemWrite
    • Step 의 유형 중 하나
    • ItemReader - 데이터를 읽어온다
    • ItemProcessor - 읽을 데이터를 가공한다.
    • ItemWriter - 가공된 데이터를 저장한다.
    • 복잡한 데이터 변환 및 데이터베이스 와 같은 곳에 데이터 저장 적합
    • 대용량 데이터 처리, 데이터 필터링 등 의 작업에 용이

Spring batch 메타 데이터

  • Spring batch를 사용하기 위해서 필요하다.
  • 이전에 실행한 Job에 대한 데이터
  • 최근 실패한 Batch Parameter가 어떤 것들이 있고, 성공한 Job은 어떤 것들이 있는지
  • 다시 실행한다면 어디서 부터 다시 실행해야하는지
  • 어떤 Job에 어떤 Step이 있는지

메타 데이터는 위와같은 데이터의 정보를 데이터로 가지고 있는 테이블을 말하는데 Spring batch 를 사용하는 이유가 이것 때문인것 같은 생각이 든다.

앞선 내용 중 예외 처리와 장애 복구 내용을 다시 생각해 보면 위의 메타데이터의 어떤 Job, Step 이 있는지 와 이전에 실행한 Job 데이터, 실행된 Job 의 성공 여부 마지막으로 다시 실행 한다면 어디서 부터 실행할지 와 같은 메타 데이터로 로직을 구현할 수 있겠다고 생각 되어진다.

JOB_INSTANCE

  • 배치 작업의 인스턴스 정보가 저장

JOB_EXECUTION

  • 작업 실행에 대한 정보 저장
  • 작업이 시작되고 완료된 시간, 작업 상태

BATCH_STEP_EXECUTION

  • Step 의 실행에 대한 정보 저장
  • Step 의 이름, 상태, 시작 및 종료 시간 등

좀더 자세히 어떤 정보를 담고 있는지 살펴보면 위의 정보와 같다.

Spring batch 구현 코드

해당 코드는 Job 과 Step 을 생성하는 것으로 두개의 Step 을 생성하고 Job 에 배정 하는 과정으로 여기서 JobRepository 는 메타데이터가 저장되어 있는 곳이고 Tasklet 은 해당 Step 의 로직을 작성 하는 곳이다.

다음은 Step 에서 동작할 로직을 Tasklet 방법을 사용해 구현한 것으로 테이블에서 데이터를 불러오고 특정 조건을 총족하는 데이터를 변환하는 작업을 구현할 수 있다.

Tasklet 의 execute 를 오버라이드 해서 구현할 수 있다.

활동을 모집하고 간단한 채팅을 나눌 수 있는 프로젝트를 구현 했을 때 게시글과 채팅방의 활성화를 비활성화 상태로 만들어 줘야하는 상황에 해당 게시글의 시간 데이터와 현재 시간 데이터를 활용해 현재 시간보다 지난 게시글 과 채팅방을 비활성화 함으로 써 사용자들의 접근을 막았다.

마지막으로 해당 Job 을 Spring scheduled 를 사용해 반복 주기를 설정 해주면 Spring batch 는 해당 작업을 설정된 주기 로 반복 실행 한다.

Spring batch 를 사용하는 이유

  • 메타 데이터를 활용 할 수 있다.
  • 데이터 처리 작업을 효율적으로 짜고 처리 한다.
  • 데이터 처리 상태를 추적 할 수있다.

Spring batch 를 적용한다고 해서 쿼리 성능이 빨리지는 것은 아닌것 같고 이해도에 따른 효율적인 작업 처리 로직에 따라 데이터 처리의 성능이 달린것 같다.
하지만 데이터 처리에 대한 구조를 제공해 줌으로 해당 구조를 깊게 이해하고 사용한다면 대용량 데이터 처리 로직을 효율적으로 구현할 수 있을것 같고 메타데이터를 활용한 데이터 처리 상태를 추적해서 상태에 맞는 처리가 가능한 로직을 구현한다면 좋은 기술 스택이 될것 같다

마무리
Spring batch의 한 부분인 Tasklet 을 사용한 간단한 데이터 처리 로직으로 사용 했지만 계속 이해하며 ItemReader, ItemProcessor, ItemWrite 를 활용한 대용량 데이터 처리 로직을 구현해볼 예정이다.

profile
개린이

0개의 댓글

관련 채용 정보