1. Spring Batch??
스프링 배치는 한마디로 이야기 하자면 개발자가 정의한 작업을 일괄처리를 지원하는 모듈을 의미한다. 일정 주기로 실행하는 로직을 별도의 어플리케이션을 적용함으로써 하나의 어플리케이션의 부하를 분산시키고 비즈니스 로직에 집중할 수 있는 장점이 있다. 그리고 스프링에서 제공하는 Spring-Batch-Docs 에서는 아래와 같이 배치가 필요한 경우에 대한 예시를 정의하고 있다.
- 특정 유저와의 상호작용이 없는 대용량 자동화 프로세스, 주로 시간 기반 이벤트(월말 정산 처리)가 필요한 경우
- 대용량 데이터 셋을 반복, 주기적으로 프로세싱하는 어플리케이션의 경우 (보험 혜택을 정하거나 보험료를 조정하는 일)
- 내 / 외부 시스템으로 부터 받은 정보를 통합하는 일. 이 내용에는 포맷팅, 유효성 검사, 트랜잭션 방식의 처리를 필요로 하는 경우도 포함한다
2. Batch? Schedular?
배치와 스케줄러는 상호보완적인 역할을 한다. 배치는 대용량 데이터를 일괄처리하는 비즈니스 위한 목적으로 사용하는 모듈이고, 스케줄러는 일정 시간에 지정한 동작을 하는 것을 말한다. 스케줄러 Quartz는 일정 시간에 특정 동작을 수행하도록 하지만 대용량 배치 처리에 관한 기능은 없다.
3. Spring Batch Architecture
스프링 배치 아키텍처는 Application, Batch Core, Batch Infrastructure 로 구성되어 있다.
- Application : 개발자가 Spring Batch를 사용하여 작성한 모든 배치 작업과 사용자 정의 코드가 포함되어 있다.
- Batch Core : 배치 작업을 시작하고 제어하는 데 필요한 JobLauncher, Job 및 Step 와 같은 런타임 클래스가 포함하고 있다.
- Batch Infrastructure : 개발자가 모두 사용하는 공통 읽기 및 쓰기 및 서비스(e.g. RetryTemplate)를 포함되어 있다.
4. 스프링 배치 메타 데이터
스프링 배치의 실행, 관리를 위한 목적의 여러 도메인 정보들을 저장, 업데이트, 조회할 수 있는 스키마 제공한다. 별도의 스프링 배치 메타 데이터를 DB 유형별로 제공하며, 프로퍼티를 통해 스키마 생성을 설정할 수 있다.
- 스프링 배치 메타 데이터 위치
- /org/springframework/batch/core/schema-*.sql
- 스키마 생성 설정 (spring.batch.jdbc.initialize-schema)
- ALWAYS : 스크립트 항상 실행
- EMBEDDED : 내장 DB 일 경우에만 실행 (default)
- NEVER : 스크립트 항상 실행 안함 (운영 환경에서 권장)
Job 관련 테이블
- BATCH_JOB_INSTANCE
- Job 이 실행될 때 JobInstance 정보를 저장한다.
- job_name과 job_key를 키로 하여 하나의 데이터가 저장하므로 동일한 job_name 과 job_key 로 중복 저장될 수 없다.
- BATCH_JOB_EXECUTION_PARAMS
- Job과 함께 실행되는 JobParameter 정보를 저장한다.
- BATCH_JOB_EXECUTION
- JobExecution 관련 데이터가 저장되며 Job 생성, 시작, 종료 시간, 실행상태, 메시지 등을 관리한다.
- BATCH_JOB_EXECUTION_CONTEXT
- Job 의 실행동안 여러가지 상태정보, 공유 데이터를 직렬화 (Json 형식) 해서 저장한다.
- Step 간 서로 공유할 수 있다.
Step 관련 테이블
- BATCH_STEP_EXECUTION
- Step 의 실행정보가 저장되며 생성, 시작, 종료 시간, 실행상태, 메시지 등을 관리한다.
- BATCH_STEP_EXECUTION_CONTEXT
- Step 의 실행동안 여러가지 상태정보, 공유 데이터를 직렬화 (Json 형식) 해서 저장한다.
- Step 별로 저장되며 Step 간 서로 공유할 수 없다.
Reference
- https://docs.spring.io/spring-batch/docs/current/reference/html/spring-batch-intro.html#spring-batch-intro
- https://docs.spring.io/spring-batch/reference/schema-appendix.html#metaDataSchema
- https://docs.spring.io/spring-batch/reference/spring-batch-architecture.html
- https://docs.spring.io/spring-batch/reference/spring-batch-architecture.html
- https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard
'spring > summary' 카테고리의 다른 글
Spring Batch 기반 회원 삭제 배치 삽질 기록 (0) | 2024.09.03 |
---|---|
[Spring Batch] Job 실행 프로퍼티, JobParameter, Scope (0) | 2024.08.26 |
hibernate.query.in_clause_parameter_padding = true ? (1) | 2024.03.06 |
JPA 에 UUID version 7 적용하기 (0) | 2024.03.04 |
[Spring] Spring AOP 동작 알아보기 (0) | 2024.03.04 |