지나공 : 지식을 나누는 공간

[1] Spring Batch 개요와 아키텍처 본문

Tech/Batch

[1] Spring Batch 개요와 아키텍처

해리리_ 2022. 3. 17. 01:35

개요

1. Spring Batch 탄생 배경 간략히

자바에는 I/O 기술, 네트워크(tcp, udp 등) 기술, 스레드(병렬처리 가능) 기술, jdbc 기술 등이 표준으로 정의되어 있다.

하지만 배치 처리에서 요구하는 재사용 가능한 자바 기반의 배치 아키텍처는 없었어서 이에 대한 필요성으로 탄생했다.

 

2. 배치 핵심 패턴

  • Read : 데이터베이스나 파일이나 큐에서 다량의 데이터를 조회
  • Process : 특정한 방법으로 데이터를 가공
  • Write : 데이터를 수정된 양식으로 다시 저장
데이터베이스의 ETL ( Extract 추출하다 - Read, Transform 변형하다 - Process, Load 적재하다 - Write)와 매칭되는 개념인데 배치에서 쓰이는 용어는 Read, Process, Write이다.

 

3. 배치 시나리오

  • 배치 프로세스를 주기적으로 커밋할 수 있다. 
    • 대용량의 데이터를 가지고 DB에 쓰기 작업을 한다고 할 때 하나의 큰 덩어리 데이터를 한번에 저장한다면 메모리에 부담이 크고 리스크가 클 것이다. 그래서 어떤 단위로 데이터를 쪼개서 커밋을 할 건지 커밋 전략을 세우는 게 중요하다. 최소한의 자원으로 최대 성능을 내기 위한 전략이 필요한데 스프링 배치에서는 이런 전략을 제공한다.

 

  • 동시 다발적인 Job의 배치 처리, 대용량 병렬 처리를 지원한다.
    • Job간에는 서로 영향을 주지 않아야 하고, 대용량일 경우 병렬 처리를 제공해야 한다. 즉 하나의 스레드가 아닌 멀티스레드로 Job을 처리하는 것이다. 용량이 큰 데이터를 여러 개의 스레드가 동시에 병렬적으로 처리하면 성능도 높아지고 시간도 많이 줄어들겠지? 이 기능도 스프링 배치가 제공한다.

 

  • 실패 후 수동 또는 스케줄링에 의한 재시작이 필요할 때
    • 얼마나 빨리 실패와 오류에 대해 대비하는지가 중요한데 스프링 배치는 이렇게 재시작할 수 있는 기능을 제공한다.

 

  • 의존 관계가 있는 step 여러 개를 순차적으로 처리할 수 있다.
    • 배치 Job은 여러 개의 Step으로 구성되어 있는데, Step1,2,3처럼 단계로 순차 처리되는 모델이 제공된다.

 

  • 조건적인 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성이 필요할 때
    • Step1을 처리한 뒤 일반적으로는 Step2를 실행하겠지만 어떤 조건에 따라 참이면 Step3를 먼저 실행하고 거짓이면 Step2를 먼저 실행하는 시나리오를 생각할 수 있다. 이렇게 조건에 따라 유연하게 대처하는 Flow라는 기능도 제공한다.

 

  • 반복적인 실행이 필요하고 재시도도 필요할 때
    • 원격으로 서버와의 통신이 있다가 잠깐 네트워크 장애가 있었을 때 배치가 중단되어버리면 문제가 생길 것이다. 그래서 잠깐동안의 네트워크 장애에서는 복구되는 즉시 이어서 실행되도록 배치 재시도를 할 수 있어야 한다. 이런 기능도 제공한다.
    • 그리고 별일 아닌 예외는 예외라 할지라도 그냥 skip할 수도 있다. 그 예외 땜에 실제 Job이 종료되어버리지 않게.

 

아키텍처

3개의 Layer가 있다. Application, Batch Core, Batch Infrastructure.

 

 

Application 

개발자는 업무 로직 구현에만 집중하고 공통적인 기반 기술은 프레임워크가 담당하게 한다. 이 부분은 개발자가 만든 모든 배치 Job과 커스텀 코드를 가진다.

 

Batch Core

Job 명세서의 역할이다. '내가 뭘 어떻게 실행하거다' 라는 내용이 담긴 게 이 Batch Core에 있는 Job, Step, Flow 같은 클래스다.

이 Layer는 Job을 실행시키고 모니터링하고 관리하는 API들로 구성되어 있다. JobLauncher, Job, Step, Flow 등의 클래스 Batch Core에 포함되어있다.

 

batch core 내부에 job 패키지가 보인다.

Batch Infrastructure

Aplicaiton, Core 모두 공통 Infrastrucure 위에서 만들어지고 빌드되는데 여기서는 Job의 실행과 흐름과 처리를 위한 틀을 제공한다. Batch Core를 통해 설정한 각각의 단위, 뭐 Job이든 Step이든, 앞서서 설정을 해놨을 것이다. 이 Layer에서는 해당 설정에 따라서 어떻게 Job을 실행시키고 그 단계마다의 데이터를 어떻게 핸들링할건지, 그리고 데이터를 어떻게 처리할건지 등의 실질적인 뒤처리와 실행을 위한 클래스들을 가진다. Reader, Processor, Writer 등이 있고 Kafka와 같이 데이터 처리할 수 있는 것들도 있다. Batch Core의 Job 명세서들을 실제로 처리하고 핸들링하는 클래스들이 모여있는 Layer다.

 

batch.infrastructure-4.3.3.jar 내부에 Item이 보인다.
Item 패키지 안에는 ItemReader, ItemWriter가 있고 kafka, json 패키지도 있다.

 

728x90

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

Spring Batch의 도메인 이해  (0) 2023.12.24
[2] Spring Batch 프로젝트 구성  (0) 2022.03.20
[0] Spring Batch, Scheduler 카테고리를 여는 글  (2) 2022.03.16
Comments