카테고리 없음

Spring Batch ?

slown 2024. 12. 25. 21:21

 

목차 

1. Spring Batch?

2. Spring Batch의 특징

3.Spring Batch의 구조

 

 

1. Spring Batch?

spring batch는 대용량 데이터 처리를 효율적으로 수행하기 위해 만들어진 배치 처리 프레임워크입니다. 주로 대규모 데이터를 주기적으로 처리하거나, 데이터를 변환하여 적재하는 작업에서 사용됩니다.

2. Spring Batch의 특징

1. 대규모 데이터 처리

  • Spring Batch는 대량의 데이터를 읽고, 처리하고, 저장하는 작업을 안정적으로 처리합니다.
  • 데이터 소스(파일, 데이터베이스, API 등)로부터 데이터를 효율적으로 가져와 변환하고 저장할 수 있는 기능을 제공합니다.

2. 청크 기반 처리 (Chunk-Oriented Processing)

  • 데이터를 작은 단위(청크)로 나누어 읽고, 처리하고, 저장하는 방식.
  • 예를 들어, 데이터베이스에서 1만 개의 레코드를 한 번에 처리하지 않고, 100개씩 청크로 나누어 처리하여 성능을 최적화합니다.
    • ItemReader: 데이터를 읽어옴.
    • ItemProcessor: 데이터를 변환하거나 필터링.
    • ItemWriter: 데이터를 저장.

3. 재시작 가능성 (Restartability)

  • Spring Batch는 배치 작업 중 실패가 발생했을 때 중단된 지점에서 작업을 다시 시작할 수 있습니다.
  • JobRepository에 작업 상태와 이력이 저장되어, 실패한 배치를 특정 시점부터 재실행 가능.

4. 병렬 처리 및 확장성

  • 병렬 처리 기능을 통해 작업을 동시에 실행하여 처리 속도를 향상할 수 있습니다.
  • 멀티스레드, 멀티프로세스, 파티셔닝(partitioning), 분산 처리 등 다양한 확장 방식 제공.
    • 예: 여러 파일을 동시에 처리하거나, 대량 데이터를 여러 노드에서 병렬로 처리.

5. 트랜잭션 관리

  • Spring Batch는 트랜잭션 관리 기능을 내장하여 데이터의 무결성을 보장합니다.
  • 각 Step은 트랜잭션으로 처리되며, 오류 발생 시 롤백하여 이전 상태로 복구 가능합니다.

6. 다양한 데이터 소스 지원

  • 여러 종류의 데이터 소스와 상호작용할 수 있습니다.
    • 파일: CSV, XML, JSON 등.
    • 데이터베이스: JDBC, JPA, Hibernate.
    • 외부 API: REST, SOAP.
    • 메시지 큐: RabbitMQ, Kafka.

7. 유연한 설계

  • JobStep을 조합하여 배치 프로세스를 유연하게 설계 가능.
  • 다양한 배치 시나리오를 구성할 수 있는 API와 DSL(도메인 특정 언어)을 제공합니다.

8. 메타데이터 관리

  • Spring Batch는 JobRepository를 통해 실행된 Job과 Step의 메타데이터(실행 상태, 실패 원인, 성공 여부 등)를 관리합니다.
  • 이 데이터를 기반으로 실행 로그를 분석하거나 작업 상태를 추적할 수 있습니다.

9. 스케줄러와 통합 가능

  • Spring Batch는 독립적으로 실행될 수 있지만, Quartz, Spring Scheduler 등과 통합하여 작업을 주기적으로 실행할 수 있습니다.

10. 오류 및 예외 처리

  • 작업 실패 시 적절한 예외 처리와 복구 로직을 제공.
  • 특정 레코드에서 실패해도 전체 작업이 중단되지 않도록 설정 가능(Skip 기능).

11. 반복적이고 안정적인 작업 수행

  • 배치 작업은 주로 반복적으로 실행되므로 안정성과 신뢰성이 중요합니다.
  • Spring Batch는 이러한 요구사항을 충족하며, 복잡한 작업을 간단하게 구현할 수 있도록 지원합니다.

3. Spring Batch의 구조

Spring Batch의 구조

 

Spring Batch는 Job, Step, 그리고 다양한 지원 클래스로 구성됩니다. 

1.Job

  • 정의: 하나의 배치 작업 단위를 의미합니다.
    • Job은 실행 가능한 배치 프로세스를 정의하며, 여러 Step으로 구성됩니다.
    • Job 실행은 JobLauncher가 담당합니다.
  • 구성 요소:
    • JobInstance: 특정 Job의 실행 인스턴스. 같은 Job이라도 매 실행마다 고유한 실행 정보가 생성됩니다.
    • JobExecution: JobInstance의 실행 상태(성공, 실패 등)를 관리하는 객체.

2. Step

  • 정의: Job을 구성하는 단위 작업입니다.
    • 하나의 Step은 ItemReader, ItemProcessor, ItemWriter로 구성됩니다.
    • 각 Step은 독립적으로 실행되며, Step 간의 흐름을 정의할 수 있습니다.
  • 구성 요소:
    • Tasklet: Step에서 하나의 작업을 정의할 때 사용됩니다. (e.g., 파일 읽기, 데이터베이스 처리)
    • Chunk-Oriented Processing: 데이터를 청크(Chunk) 단위로 처리하는 방식.
      • 한 번에 여러 데이터를 읽고, 처리하고, 저장하여 성능을 최적화합니다.

3. ItemReader, ItemProcessor, ItemWriter

이 세 가지는 Step에서 데이터를 읽고, 처리하고, 저장하는 주요 구성 요소입니다.

(1) ItemReader

  • 데이터를 읽어오는 역할.
  • 데이터 소스는 파일(CSV, XML 등), 데이터베이스, API 등 다양한 형태를 지원.
  • 예시: FlatFileItemReader, JdbcPagingItemReader

(2) ItemProcessor

  • 읽어온 데이터를 가공(변환, 검증, 필터링)하는 역할.
  • 비즈니스 로직을 적용하는 핵심 부분.
  • 입력 데이터가 적합하지 않다면 필터링하여 제외 가능.

(3) ItemWriter

  • 가공된 데이터를 저장하는 역할.
  • 데이터베이스, 파일, 메시지 큐 등 다양한 대상에 저장 가능.
  • 예시: JdbcBatchItemWriter, FlatFileItemWriter

4. JobRepository

  • 역할: Job 실행 및 Step 실행의 메타데이터(이력) 저장.
  • 실행 중인 Job의 상태를 추적하고 복구를 지원.

5. JobLauncher

  • 역할: Job을 실행하는 객체.
  • 개발자는 JobLauncher를 통해 Job을 실행하며, 필요한 JobParameters를 전달합니다.

6. ExecutionContext

  • Job 또는 Step 실행 중에 데이터를 공유하거나 상태를 저장하는 데 사용됩니다.
  • 실패 시 ExecutionContext에 저장된 상태를 기반으로 재시작이 가능합니다.

Spring Batch 실행 흐름

  1. JobLauncher가 Job 실행 요청.
  2. Job은 순차적으로 Step을 실행.
  3. 각 Step은 데이터를 읽고(Reader), 처리하고(Processor), 저장(Writer).
  4. 실행 결과는 JobRepository를 통해 메타 테이블에 저장.
  5. 실행 완료 또는 실패 시 결과를 반환.

Spring Batch의 메타 테이블

Spring Batch는 배치 작업의 실행 상태를 추적하고 복구를 지원하기 위해 **메타 데이터 테이블(Meta Tables)**을 사용합니다. 이러한 테이블은 자동으로 생성되며, 실행 정보와 상태를 관리합니다.

(1) 주요 메타 테이블

1) BATCH_JOB_INSTANCE

  • JobInstance를 저장.
  • 동일한 Job 이름과 JobParameters로 실행된 작업은 동일한 JobInstance로 간주.

컬럼 이름설명

JOB_INSTANCE_ID JobInstance의 고유 ID.
JOB_NAME Job의 이름.
JOB_KEY JobParameters의 해시 값.

2) BATCH_JOB_EXECUTION

  • JobExecution 상태를 저장.
  • JobInstance의 각 실행 정보를 관리.

컬럼 이름설명

JOB_EXECUTION_ID JobExecution의 고유 ID.
JOB_INSTANCE_ID 관련된 JobInstance의 ID.
START_TIME 실행 시작 시간.
END_TIME 실행 종료 시간.
STATUS 실행 상태 (COMPLETED, FAILED 등).
EXIT_CODE 종료 코드.
EXIT_MESSAGE 실행 중 발생한 메시지.

3) BATCH_JOB_EXECUTION_PARAMS

  • Job 실행 시 사용된 JobParameters를 저장.

컬럼 이름설명

JOB_EXECUTION_ID 관련된 JobExecution의 ID.
TYPE_CD 파라미터 유형 (String, Date 등).
KEY_NAME 파라미터 키 이름.
STRING_VAL 파라미터 값.

4) BATCH_STEP_EXECUTION

  • StepExecution 상태를 저장.
  • 각 Step의 실행 결과를 추적.

컬럼 이름설명

STEP_EXECUTION_ID StepExecution의 고유 ID.
JOB_EXECUTION_ID 관련된 JobExecution의 ID.
STEP_NAME Step의 이름.
START_TIME 실행 시작 시간.
END_TIME 실행 종료 시간.
STATUS 실행 상태.
READ_COUNT 읽은 데이터 수.
WRITE_COUNT 처리한 데이터 수.

5) BATCH_JOB_EXECUTION_CONTEXT & BATCH_STEP_EXECUTION_CONTEXT

  • ExecutionContext를 저장.
  • Job/Step 실행 간 공유 데이터 및 상태를 관리.

컬럼 이름설명

EXECUTION_ID 관련된 JobExecution 또는 StepExecution ID.
SHORT_CONTEXT 컨텍스트 데이터(요약).
SERIALIZED_CONTEXT 컨텍스트 데이터(전체 데이터).

3. 구조와 메타 테이블 간의 연결

Spring Batch 구성 요소메타 테이블연결 역할

JobInstance BATCH_JOB_INSTANCE Job의 실행 단위를 저장. JobParameters를 기반으로 중복 실행 방지.
JobExecution BATCH_JOB_EXECUTION Job 실행 상태 및 결과를 저장.
JobParameters BATCH_JOB_EXECUTION_PARAMS 실행 시 전달된 파라미터를 기록.
StepExecution BATCH_STEP_EXECUTION Step 실행 상태 및 처리 데이터를 관리.
ExecutionContext BATCH_JOB_EXECUTION_CONTEXT,
BATCH_STEP_EXECUTION_CONTEXT
실행 중 상태 정보 및 재시작에 필요한 데이터를 저장.

Spring Batch는 구조적으로 Job과 Step을 분리하여 작업 단위를 명확히 정의하고, 메타 테이블을 통해 실행 상태와 결과를 추적하여 안정성과 신뢰성을 보장합니다.