본문 바로가기
Spring

Spring Batch

by wjdtmdgjs 2024. 11. 20.

구분 Spring Batch Spring Boot

배치 처리 배치 처리에 최적화된 프레임워크로, 대량의 데이터 처리에 적합 일반적인 웹 애플리케이션 로직에 적합
Chunk 기반 처리 데이터를 청크 단위로 나누어 처리하여 메모리 사용을 최소화함 단일 요청-응답 사이클에서 처리됨
작업 관리 Job, Step으로 구성되어 작업의 흐름을 관리하고 재시작 및 실패 복구를 지원 작업 관리 기능이 없음
트랜잭션 관리 각 Step마다 트랜잭션 관리 가능, 데이터 일관성을 보장함 전체 프로세스의 트랜잭션 관리는 수동으로 처리해야 함
스케줄링 Spring Batch Job Scheduler를 통해 정기적으로 실행 가능 스케줄링 기능을 따로 구현해야 함
메타데이터 관리 Job 실행 이력 및 메타데이터 관리 기능 내장 별도의 메타데이터 관리 필요
결정 O  

Spring Batch Meta Data

  • spring batch는 meta data를 제공한다. 이는 batch 작업의 진행 상황 시간 등을 기록하여주는 data이다. 이를 통해 batch작업의 진행 단계와 상황을 정확하게 파악할 수 있습니다. 이러한 정보를 토대로 실패시 행동을 지정 할 수 있습니다.

  1. ItemReader와 ItemProcessor, ItemWriter의 역할의 차이
    1. ItemReader - 이름 그대로 데이터를 읽어오는 과정입니다. 한번에 한가지의 item을 chunksize를 지정하여 읽어올 수 있습니다.
    2. ItemProcessor - Reader에서 읽어오는 item을 처리하는 과정입니다.
    3. ItemWriter - 처리가 완료된 item을 저장해 주는 과정입니다.
  • ItemReader
    • itemReader는 데이터를 읽어오는 과정이고, 종류또한 여러가지가 있습니다. db에 method형식으로 읽어오는 기본적인 itemreader뿐 아니라 customitemreader를 원하는 형식으로 지정하여 사용할 수 있습니다.
      • Chunk
      Spring Batch에서의 Chunk란 데이터 덩어리로 작업 할 때 각 커밋 사이에 처리되는 row 수를 얘기합니다.여기서 트랜잭션이라는게 중요한데요.Chunk 지향 처리가 결국 Chunk 단위로 데이터를 처리한다는 의미이기 때문에 그림으로 표현하면 아래와 같습니다.
    • Chunk 단위로 트랜잭션을 수행하기 때문에 실패할 경우엔 해당 Chunk 만큼만 롤백이 되고, 이전에 커밋된 트랜잭션 범위까지는 반영이 된다는 것입니다.
    • 즉, Chunk 지향 처리란 한 번에 하나씩 데이터를 읽어 Chunk라는 덩어리를 만든 뒤, Chunk 단위로 트랜잭션을 다루는 것을 의미합니다.
    •  

  • ItemProcessoritemprocessor 또한 다양한 종류가 있습니다.
  • itemprocessor는 필수가 아닙니다. 기본적으로 reader에서 읽어온 정보를 처리하는 과정을 가집니다. 그러나 이 과정은 writer에서 처리할 수도 있기에 processor는 필수가 아닙니다. 하지만 processor를 둠으로써 역활에 따라 분리 시킬 수 있습니다.
  • ItemWriterhttps://jojoldu.tistory.com/339
  • itemwriter도 역활에 따라 여러종류가 있습니다.
  • partitioning
  •  

  • 파티셔닝은 매니저 (마스터) Step이 대량의 데이터 처리를 위해 지정된 수의 작업자 (Worker) Step으로 일감을 분할 처리하는 방식을 이야기 합니다.
  • 멀티쓰레드 Step은 단일 Step을 Chunk 단위로 쓰레드를 생성해 분할 처리 하게 됩니다.
    • 어떤 쓰레드에서 어떤 데이터들을 처리하게 할지 세밀한 조정이 불가능합니다.
    • 또한, 해당 Step의 ItemReader/ItemWriter 등이 멀티쓰레드 환경을 지원하는지 유무가 굉장히 중요합니다.
  • 반면 파티셔닝 (Partitioning)의 독립적인 Step (Worker Step)을 구성하고, 그에 따른 각각 별도의 StepExecution 파라미터 환경을 가지게 하여 처리 합니다.
    • (Local로 실행할 경우) 멀티쓰레드으로 작동하나, 멀티쓰레드 Step과는 별개로 ItemReader/ItemWriter의 멀티쓰레드 환경 지원 여부가 중요하지 않습니다

'Spring' 카테고리의 다른 글

Spring Batch란 ??  (1) 2024.10.26
SET의 위험성!  (0) 2024.09.13
TestCode  (0) 2024.09.12
웹개발 필수지식 정리  (1) 2024.08.28
JWT  (0) 2024.08.21