이 페이지에서
1. JobRepository 개요
Spring Batch는 엔터프라이즈급 배치 처리를 위한 강 력하고 유연한 프레임워크입니다.
배치 작업의 실행 정보를 효과적으로 관리하고 추적하는 것은 매우 중요한데, 이를 위해 Spring Batch에서는 JobRepository를 제공합니다.
JobRepository는 배치 작업의 실행에 관한 모든 정보를 저장하고 관리하는 핵심 구성 요소입니다.
1.1 JobRepository의 필요성
데몬처럼 끝없이 실행되는 작업이 아닌 언젠가 종료되는 처리를 UI 없이 독립 실행형으로 동작하도록 개발하는 것은 어렵지 않습니다.
CommandLineRunner를 사용하여 비즈니스 로직이 포함된 단일 기능을 실행한 뒤 종료되는 스프링 부트 애플리케이션을 만들 수 있습니다.
이정도 작업에는 스프링 배치가 필요하지 않습니다.
그러나 문제는 진행 중인 작업의 상태를 추적하고, 실패한 작업을 재시작하며, 작업 실행 이력을 관리하는 것입니다.
엔터프라이즈 환경에서는 매우 중요한 요구사항입니다.
잡의 상태 관리 기능은 스프링 배치가 제공하는 주요 기능 중 하나입니다.
잡의 상태는 JobRepository에 저장되며, 이를 통해 배치 작업의 실행 이력을 관리할 수 있습니다.
1.2 JobRepository의 의미
스프링 배치에서 JobRepository 는 두 가지 의미를 가집니다.
JobRepository 인터페이스: 배치 작업의 실행 정보를 저장하고 관리하는 역할을 정의합니다.
JobRepository 구현체: JobRepository 인터페이스를 구현한 클래스는 실제로 데이터베이스에 작업 실행 정보를 저장하고 조회하는 기능을 제공합니다.
개발자는 JobRepository 인터페이스를 직접 다루는 일이 거의 없으므로 구현체에 집중하게 됩니다.
1.3 관계형 데이터베이스 지원
JobRepository는 일반적으로 관계형 데이터베이스에 작업 실행 정보를 저장합니다.
스프링 배치가 제공하는 여러 데이터베이스 테이블을 사용해 배치 메타데이터를 저장합니다.
2. JobRepository의 역할
2.1 주요 기능
Job 및 Step 실행 정보 저장
JobRepository는 JobExecution, StepExecution 등의 객체를 생성하고 관련 정보를 데이터베이스에 저장합니다.
이를 통해 배치 작업의 실행 상태, 시작/종료 시간, 처리한 레코드 수 등을 추적할 수 있습니다.
ExecutionContext 관리
ExecutionContext는 Job이나 Step의 실행 중 상태 정보를 저장하는 데 사용됩니다.
JobRepository는 이러한 ExecutionContext를 데이터베이스에 저장하고 필요할 때 조회할 수 있도록 합니다.
재시작 지원
JobRepository에 저장된 실행 정보를 바탕으로 실패한 배치 작업을 재시작할 수 있습니다.
이때 이전 실행에서 성공한 Step은 건너뛰고, 실패한 Step부터 다시 시작할 수 있습니다.
3. 메타데이터 스키마 구조
3.1 도메인 객체와 테이블 매핑
Spring Batch의 메타데이터 테이블은 Java 도메인 객체와 밀접하게 매핑됩니다.
예를 들어, JobInstance, JobExecution, JobParameters, StepExecution은 각각 BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION,
BATCH_JOB_EXECUTION_PARAMS, BATCH_STEP_EXECUTION 테이블에 매핑됩니다.
ExecutionContext는 BATCH_JOB_EXECUTION_CONTEXT와 BATCH_STEP_EXECUTION_CONTEXT 테이블 모두에 매핑됩니다.
JobRepository는 각 Java 객체를 올바른 테이블에 저장하고 관리하는 역할을 담당합니다.
3.2 DDL 스크립트