[Spring Batch] 2. ์Šคํ”„๋ง ๋ฐฐ์น˜ ์‹œ์ž‘

 

1. ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ๋ฐ ์˜์กด์„ฑ ์„ค์ •

1) ์Šคํ”„๋ง๋ถ€ํŠธ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

- maven ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

- docker๋ฅผ ํ†ตํ•ด mysql

- spring batch ์˜์กด์„ฑ ์ถ”๊ฐ€

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=test1234 -d -p 3306:3306 mysql:latest

 

์ž๋ฃŒ : https://github.com/onjsdnjs/spring-batch-lecture

 

 

2) ์Šคํ”„๋ง ๋ฐฐ์น˜ ํ™œ์„ฑํ™”

- @EnableBatchProcessing

@SpringBootApplication
@EnableBatchProcessing
public class SpringbatchApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbatchApplication.class, args);
    }

}

- ์ด 4๊ฐœ์˜ ์„ค์ • ํด๋ž˜์Šค ์‹คํ–‰ (์Šคํ”„๋ง ๋ฐฐ์น˜ ๋ชจ๋“  ์ดˆ๊ธฐํ™” ๋ฐ ์‹คํ–‰ ๊ตฌ์„ฑ ์‹คํ–‰)

- ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ ๋ชจ๋“  Job์„ ๋“ฑ๋ก (๋ชจ๋“  Job ๊ฒ€์ƒ‰ ๋ฐ ์‹คํ–‰ ์‹œํ‚ด)

 

* ์Šคํ”„๋ง ๋ฐฐ์น˜ ์ดˆ๊ธฐํ™” ์„ค์ • ํด๋ž˜์Šค

1) BatchAutoConfiguration

- ์Šคํ”„๋ง ๋ฐฐ์น˜๊ฐ€ ์ดˆ๊ธฐํ™” ๋  ๋•Œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์„ค์ • ํด๋ž˜์Šค

- Job์„ ์ˆ˜ํ–‰ํ•˜๋Š” JobLauncherApplicationRunner ๋นˆ์„ ์ƒ์„ฑ (์ž๋™์œผ๋กœ Job ์‹คํ–‰๋˜๋Š” ๋นˆ)

 

2) SimpleBatchConfiguration

- JobBuilderFactory์™€ StepBuilderFactory ์ƒ์„ฑ (๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง€๊ณ  Job๊ณผ Step ์ƒ์„ฑ)

- ์Šคํ”„๋ง ๋ฐฐ์น˜์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ ์ƒ์„ฑ - ํ”„๋ก์‹œ ๊ฐ์ฒด๋กœ ์ƒ์„ฑ๋จ

 

3) BatchConfigurerConfiguration

    a) BasicBatchConfigurer

         - SimpleBatchConfiguration์—์„œ ์ƒ์„ฑํ•œ ํ”„๋ก์‹œ ๊ฐ์ฒด์˜ ์‹ค์ œ ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์„ค์ • ํด๋ž˜์Šค

         - ๋นˆ์œผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐ›์•„์„œ ์ฃผ์š” ๊ฐ์ฒด๋“ค์„ ์ฐธ์กฐํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    b) JpaBatchConfigurer

         - JPA ๊ด€๋ จ ๊ฐ์ฒด๋“ค ์ƒ์„ฑํ•˜๋Š” ์„ค์ • ํด๋ž˜์Šค  

 

-> ๋‘๊ฐœ์˜ ํด๋ž˜์Šค๋Š” ์‚ฌ์šฉ์ž ์ •์˜ BatchConfigurer ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

 

์ˆœ์„œ

 

 


2. Hello Spring Batch ์‹œ์ž‘ํ•˜๊ธฐ

- ๊ธฐ๋ณธํ™˜๊ฒฝ (ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ / ์˜์กด์„ฑ / ์–ด๋…ธํ…Œ์ด์…˜) ์ค€๋น„๋จ

- ์šฉ์–ด

1) @Configuration ์„ ์–ธ

- ํ•˜๋‚˜์˜ ๋ฐฐ์น˜ Job์„ ์ •์˜ํ•˜๊ณ  ๋นˆ ์„ค์ •

- Job ์ •์˜ : Job ์‹คํ–‰ ๋‹จ์œ„/๋‚ด์šฉ ์„ค์ •ํ•˜๊ณ  ๊ตฌ์„ฑํ•œ๋‹ค๋Š” ์˜๋ฏธ

 

------------------------

์Šคํ”„๋ง ๋ฐฐ์น˜๊ฐ€ ์ œ๊ณตํ•˜๋Š” Job ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํ‹ธ์„ฑ ํด๋ž˜์Šค ์ œ๊ณต (์˜์กด์„ฑ ์ฃผ์ž… ๋ฐ›์•„์„œ ์„ ์–ธ)

2) JobBuilderFactory

- Job์„ ์ƒ์„ฑํ•˜๋Š” ๋นŒ๋” ํŒฉํ† ๋ฆฌ


3) StepBuilderFactory

- Step์„ ์ƒ์„ฑํ•˜๋Š” ๋นŒ๋” ํŒฉํ† ๋ฆฌ

------------------------


4) Job

- helloJob ์ด๋ฆ„์œผ๋กœ Job ์ƒ์„ฑ (Step ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋„˜๊ฒจ์คŒ)

 

5) Step

- helloStep ์ด๋ฆ„์œผ๋กœ Step ์ƒ์„ฑ

 

6) Tasklet

- Step ์•ˆ์—์„œ ๋‹จ์ผ ํ…Œ์Šคํฌ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๋กœ์ง ๊ตฌํ˜„

 

์ˆœ์„œ

[ Job ๊ตฌ๋™ ->  Step ์‹คํ–‰ ->  Tasklet ์‹คํ–‰ ]

Job์ด ๊ตฌ๋™๋˜๋ฉด Step์„ ์‹คํ–‰ํ•˜๊ณ  Step์ด ๊ตฌ๋™๋˜๋ฉด Tasklet์„ ์‹คํ–‰ํ•˜๋„๋ก ์„ค์ •

(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด Tasklet์— ์ €์žฅ๋ผ์žˆ์Œ)

 

๊ตฌํ˜„

@RequiredArgsConstructor

- ์ƒ์„ฑ์ž๋กœ ๊ฐ์ฒด ์„ ์–ธํ•˜๋ฉด ์Šคํ”„๋ง์ด ์˜์กด์„ฑ ์ฃผ์ž…ํ•ด์ฃผ๋„๋ก ํ•ด์คŒ

- ์ƒ์„ฑ์ž ์ง์ ‘ ์•ˆ๋งŒ๋“ค์–ด๋„ ์˜์กด์„ฑ ์ฃผ์ž… ๋ผ๋„๋ก ํ•˜๋Š” Annotation

 

* ์ง€๊ธˆ ๊ฐ•์˜์—์„œ ์‚ฌ์šฉ๋œ BuilderFactory ๊ฐ€ jobReposirtory๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋กœ Deprecated๊ฐ€ ๋จ 

ํ•ด๊ฒฐ) Builder์—์„œ JobRepository๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์„ค์ •๋œ๋‹ค

 

spring batch v5

package io.springbatch.springbatch;

import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;

@RequiredArgsConstructor
@Configuration
public class HelloJobConfiguration {

    @Bean
    public Job helloJob(JobRepository jobRepository, Step step){
        return new JobBuilder("helloJob", jobRepository)
                .start(step)
                .build();
    }

    @Bean
    public Tasklet helloTasklet(){
        return ((contribution, chunkContext) -> {
            return RepeatStatus.FINISHED;
        });
    }

    @Bean
    public Step helloStep(JobRepository jobRepository, Tasklet helloTasklet, PlatformTransactionManager transactionManager) {
        return new StepBuilder("helloStep", jobRepository)
                .tasklet(helloTasklet, transactionManager)
                .build();
    }

}

3. DB ์Šคํ‚ค๋งˆ ์ƒ์„ฑ ๋ฐ ์ดํ•ด

1) ์Šคํ”„๋ง ๋ฐฐ์น˜ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ

- ์Šคํ”„๋ง ๋ฐฐ์น˜์˜ ์‹คํ–‰ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ๋“ค(Job, Step, JobParameters...)์˜ ์ •๋ณด๋“ค์„ ์ €์žฅ/์—…๋ฐ์ดํŠธ/์กฐํšŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํ‚ค๋งˆ ์ œ๊ณต

- ๊ณผ๊ฑฐ, ํ˜„์žฌ์˜ ์‹คํ–‰์— ๋Œ€ํ•œ ์„ธ์„ธํ•œ ์ •๋ณด, ์‹คํ–‰์— ๋Œ€ํ•œ ์„ฑ๊ณต๊ณผ ์‹คํŒจ ์—ฌ๋ถ€ ๋“ฑ์„ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ๋ฐฐ์น˜ ์šด์šฉ์— ์žˆ์–ด ๋ฆฌ์Šคํฌ ๋ฐœ์ƒ ์‹œ ๋น ๋ฅธ ๋Œ€์ฒ˜ ๊ฐ€๋Šฅ

- DB์™€ ์—ฐ๋™ํ•  ๊ฒฝ์šฐ ํ•„์ˆ˜์ ์œผ๋กœ ๋ฉ”ํƒ€ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ ๋˜์–ด์•ผํ•จ

 

2) DB ์Šคํ‚ค๋งˆ ์ œ๊ณต

- ํŒŒ์ผ ์œ„์น˜ : /org/springframework/batch/core/schema-*.sql

- DB ์œ ํ˜•๋ณ„๋กœ ์ œ๊ณต

 

3) ์Šคํ‚ค๋งˆ ์ƒ์„ฑ ์„ค์ •

- ์ˆ˜๋™ ์ƒ์„ฑ : ์ฟผ๋ฆฌ ๋ณต์‚ฌ ํ›„ ์ง์ ‘ ์‹คํ–‰

- ์ž๋™ ์ƒ์„ฑ : spring.batch.jdbc.initialize-schema ์„ค์ • (properties ํŒŒ์ผ์— ์„ค์ •)

ALWAYS : ์Šคํฌ๋ฆฝํŠธ ํ•ญ์ƒ ์‹คํ–‰ / RDBMS ์„ค์ •์ด ๋˜์–ด์žˆ์„ ๊ฒฝ์šฐ ๋‚ด์žฅ DB๋ณด๋‹ค ์šฐ์„ ์ ์œผ๋กœ ์‹คํ–‰
EMBEDDED : ๋‚ด์žฅ DB์ผ ๋•Œ๋งŒ ์‹คํ–‰๋˜๋ฉฐ ์Šคํ‚ค๋งˆ๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋จ (๊ธฐ๋ณธ๊ฐ’)
NEVER : ์Šคํฌ๋ฆฝํŠธ ํ•ญ์ƒ ์‹คํ–‰ ์•ˆํ•จ / ๋‚ด์žฅ DB์ผ ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ƒ์„ฑ์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜ ๋ฐœ์ƒ
             : ๋‚ด์žฅ DB์ผ ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ƒ์„ฑ์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜ ๋ฐœ์ƒ
             : ์šด์˜์—์„œ ์ˆ˜๋™์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ ํ›„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ

 

- batch core library -> db ๋ณ„๋กœ sql ์„ค์ • ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œ๊ณต

- ์ธํ…”๋ฆฌ์ œ์ด db ๊ด€๋ฆฌ ํˆด ์‚ฌ์šฉํ•ด์„œ ๊ด€๋ฆฌ

- ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ•์˜ ๊ทธ๋Œ€๋กœ

- schema ํƒญ ์ฒดํฌ 

- ์ฟผ๋ฆฌ์ฐฝ ์—ด๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ณต์‚ฌํ•œ sql ๋ณต๋ถ™ํ•ด์„œ ์‹คํ–‰

- db ์ƒ์„ฑ

 

mysql ์˜์กด์„ฑ ์ถ”๊ฐ€

 

application.properties

spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springbatch
spring.datasource.username=root
spring.datasource.password=

spring.profiles.active=dev
spring.batch.jdbc.initialize-schema=never
spring.batch.job.enabled=true

- initialize-schema ์—์„œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ž๋™ ์„ค์ •

 

DBJobConfiguration

package io.springbatch.springbatch;

import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.transaction.PlatformTransactionManager;

@Configuration
@RequiredArgsConstructor
public class DBJobConfiguration {

    @Bean
    public Job newJob(JobRepository jobRepository, Step step1, Step step2){
        return new JobBuilder("newJob", jobRepository)
                .start(step1)
                .next(step2)
                .build();
    }

    @Bean
    public Step step1(JobRepository jobRepository, Tasklet tasklet1, PlatformTransactionManager transactionManager) {
        return new StepBuilder("step1", jobRepository)
                .tasklet(tasklet1, transactionManager)
                .allowStartIfComplete(true)
                .build();
    }

    @Bean
    public Step step2(JobRepository jobRepository, Tasklet tasklet2, PlatformTransactionManager transactionManager) {
        return new StepBuilder("step2", jobRepository)
                .tasklet(tasklet2, transactionManager)
                .allowStartIfComplete(true)
                .build();
    }

    @Bean
    public Tasklet tasklet1(){
        return ((contribution, chunkContext) -> {
            System.out.println("step1 was executed");
            return RepeatStatus.FINISHED;
        });
    }

    @Bean
    public Tasklet tasklet2(){
        return ((contribution, chunkContext) -> {
            System.out.println("step2 was executed");
            return RepeatStatus.FINISHED;
        });
    }
}

* spring5 ์—์„œ๋Š” @EnableBatchProcessing ํ•˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค... (๋””ํดํŠธ ์„ค์ •์ด ๋ผ์žˆ๋Š”๋“ฏ)

* annotation ๋ฐฉ์‹์œผ๋กœ ๋ฐฐ์น˜ profile ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‚˜๋ด„

 

5) Job ๊ด€๋ จ ํ…Œ์ด๋ธ”

 

[Job ๊ด€๋ จ ํ…Œ์ด๋ธ”]

1. BATCH_JOB_INSTANCE

ใ„ด Job์ด ์‹คํ–‰๋  ๋•Œ JobInstance ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋ฉฐ job_name๊ณผ job_key๋ฅผ ํ‚ค๋กœํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ
ใ„ด ๋™์ผํ•œ job_name๊ณผ job_key๋กœ ์ค‘๋ณต X


2. BATCH_JOB_EXECUTION

ใ„ด Job์˜ ์‹คํ–‰์ •๋ณด๊ฐ€ ์ €์žฅ
ใ„ด ์ƒ์„ฑ,์‹œ์ž‘,์ข…๋ฃŒ ์‹œ๊ฐ„ / ์‹คํ–‰ ์ƒํƒœ / ๋ฉ”์‹œ์ง€ ๋“ฑ์„ ๊ด€๋ฆฌ


3. BATCH_JOB_EXECUTION_PARAMS

ใ„ด Job๊ณผ ํ•จ๊ป˜ ์‹คํ–‰๋˜๋Š” JobParameter ์ •๋ณด ์ €์žฅ


4. BATCH_JOB_EXECUTION_CONTEXT

ใ„ด Job์˜ ์‹คํ–‰๋™์•ˆ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒํƒœ์ •๋ณด, ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™” (JSON ํ˜•์‹) ํ•ด์„œ ์ €์žฅ
ใ„ด Step ๊ฐ„ ์„œ๋กœ ๊ณต์œ  ๊ฐ€๋Šฅ

 

[Step ๊ด€๋ จ ํ…Œ์ด๋ธ”]

1. BATCH_STEP_EXECUTION

ใ„ด Step์˜ ์‹คํ–‰์ •๋ณด๊ฐ€ ์ €์žฅ
ใ„ด ์ƒ์„ฑ,์‹œ์ž‘,์ข…๋ฃŒ ์‹œ๊ฐ„ / ์‹คํ–‰์ƒํƒœ / ๋ฉ”์‹œ์ง€ ๋“ฑ์„ ๊ด€๋ฆฌ


2. BATCH_STEP_EXECUTION_CONTEXT

ใ„ด Step์˜ ์‹คํ–‰๋™์•ˆ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒํƒœ์ •๋ณด, ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”(JSONํ˜•์‹)์—์„œ ์ €์žฅ
ใ„ด Step ๋ณ„๋กœ ์ €์žฅ๋˜๋ฉฐ Step ๊ฐ„ ์„œ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์—†์Œ

 

 

[Job ๊ด€๋ จ ํ…Œ์ด๋ธ” ์ƒ์„ธ]

1. BATCH_JOB_INSTANCE

- JOB_INSTANCE_ID     : ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธํ‚ค
- VERSION                      : ์—…๋ฐ์ดํŠธ ๋  ๋•Œ๋งˆ๋‹ค 1์”ฉ ์ฆ๊ฐ€
- JOB_NAME                  : Job์„ ๊ตฌ์„ฑํ•  ๋•Œ ๋ถ€์—ฌํ•˜๋Š” Job์˜ ์ด๋ฆ„
- JOB_KEY                      : job_name๊ณผ jobParameter๋ฅผ ํ•ฉ์ณ ํ•ด์‹ฑํ•œ ๊ฐ’์„ ์ €์žฅ


2. BATCH_JOB_EXECUTION

- JOB_EXECUTION_ID   : JobExecution์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ํ‚ค, JOB_INSTANCE์™€ ์ผ๋Œ€๋‹ค ๊ด€๊ณ„
- VERSION                       : ์—…๋ฐ์ดํŠธ ๋  ๋•Œ๋งˆ๋‹ค 1์”ฉ ์ฆ๊ฐ€
- JOB_INSTANCE_ID      : JOB_INSTANCE์˜ ํ‚ค ์ €์žฅ
- CREATE_TIME               : ์‹คํ–‰์ด ์ƒ์„ฑ๋œ ์‹œ์ ์„ TimeStamp ํ˜•์‹์œผ๋กœ ๊ธฐ๋ก
- START_TIME                  : ์‹คํ–‰์ด ์‹œ์ž‘๋œ ์‹œ์ ์„ TimeStamp ํ˜•์‹์œผ๋กœ ๊ธฐ๋ก
- END_TIME                      : ์‹คํ–‰์ด ์ข…๋ฃŒ๋œ ์‹œ์ ์„ TimeStamp ํ˜•์‹์œผ๋กœ ๊ธฐ๋ก
                                             -์‹คํ–‰ ๋„์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒํ•ด์„œ Job์ด ์ค‘๋‹จ๋œ ๊ฒฝ์šฐ ๊ฐ’์ด ์ €์žฅ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ (NULL)
- STATUS                          : ์‹คํ–‰ ์ƒํƒœ(BatchStatus)๋ฅผ ์ €์žฅ [COMPLETED / FAILED / STOPPED...]
- EXIT_CODE                    : ์‹คํ–‰ ์ข…๋ฃŒ์ฝ”๋“œ(ExitStatus)๋ฅผ ์ €์žฅ[COMPLETED / FAILED...]
- EXIT_MESSAGE             : Status๊ฐ€ ์‹คํŒจ์ผ ๊ฒฝ์šฐ ์‹คํŒจ ์›์ธ ๋“ฑ์˜ ๋‚ด์šฉ์„ ์ €์žฅ
- LAST_UPDATED             : ๋งˆ์ง€๋ง‰ ์‹คํ–‰์‹œ์ ์„ TimeStamp ํ˜•์‹์œผ๋กœ ๊ธฐ๋ก

3. BATCH_JOB_EXECUTION_PARAMS

- JOB_EXECUTION_ID   : JobExecution์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ํ‚ค, JOB_INSTANCE์™€ ์ผ๋Œ€๋‹ค ๊ด€๊ณ„
- TYPE_CD                       : STRING, LONG, DATE, DOUBLE ํƒ€์ž…์ •๋ณด
- KEY_NAME                    : ํŒŒ๋ผ๋ฏธํ„ฐ ํ‚ค ๊ฐ’
- STRING_VAL                 : ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฌธ์ž ๊ฐ’
- DATE_VAL                      : ํŒŒ๋ผ๋ฏธํ„ฐ ๋‚ ์งœ ๊ฐ’
- LONG_VAL                     : ํŒŒ๋ผ๋ฏธํ„ฐ LONG ๊ฐ’
- DOUBLE_VAL                 : ํŒŒ๋ผ๋ฏธํ„ฐ DOUBLE ๊ฐ’
- IDENTIFYING                  : ์‹๋ณ„์—ฌ๋ถ€ (TRUE, FALSE)

4. BATCH_JOB_EXECUTION_CONTEXT
- JOB_EXECUTION_ID   : JobExecution์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ํ‚ค, JOB_EXECUTION ๋งˆ๋‹ค ์ƒ์„ฑ
- SHORT_CONTEXT        : Job์˜ ์‹คํ–‰ ์ƒํƒœ์ •๋ณด, ๊ณต์œ ๋ฐ์ดํ„ฐ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ €์žฅ
- SERIALIZED_CONTEXT: ์ง๋ ฌํ™”(serialized)๋œ ์ „์ฒด ์ปจํ…์ŠคํŠธ

 

[Step ๊ด€๋ จ ํ…Œ์ด๋ธ” ์ƒ์„ธ]

1. BATCH_STEP_EXECUTION
- STEP_EXECUTION_ID   : Step์˜ ์‹คํ–‰์ •๋ณด๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ํ‚ค
- VERSION                         : ์—…๋ฐ์ดํŠธ ๋  ๋•Œ๋งˆ๋‹ค 1์”ฉ ์ฆ๊ฐ€
- STEP_NAME                    : Step์„ ๊ตฌ์„ฑํ•  ๋•Œ ๋ถ€์—ฌํ•˜๋Š” Step ์ด๋ฆ„
- JOB_EXECUTION_ID     : JobExecution ๊ธฐ๋ณธํ‚ค, JobExecution๊ณผ๋Š” ์ผ๋Œ€ ๋‹ค ๊ด€๊ณ„
- START_TIME                   : ์‹คํ–‰์ด ์‹œ์ž‘๋œ ์‹œ์ ์„ TimeStamp ํ˜•์‹์œผ๋กœ ๊ธฐ๋ก
- END_TIME                       : ์‹คํ–‰์ด ์ข…๋ฃŒ๋œ ์‹œ์ ์„ TimeStamp ํ˜•์‹์œผ๋กœ ๊ธฐ๋ก
                                              - Job ์‹คํ–‰ ๋„์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์„œ Job์ด ์ค‘๋‹จ๋œ ๊ฒฝ์šฐ ๊ฐ’์ด ์ง€์ •๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ
- STATUS                            : ์‹คํ–‰ ์ƒํƒœ(BatchStatus)๋ฅผ ์ €์žฅ [COMLETED / FAILED / STOPPED]
- COMMIT_COUNT            : ํŠธ๋žœ์žญ์…˜ ๋‹น ์ปค๋ฐ‹๋˜๋Š” ์ˆ˜๋ฅผ ๊ธฐ๋ก
- READ_COUNT                  : ์‹คํ–‰์‹œ์ ์— Readํ•œ Item ์ˆ˜๋ฅผ ๊ธฐ๋ก
- FILTER_COUNT                : ์‹คํ–‰๋„์ค‘ ํ•„ํ„ฐ๋ง๋œ Item ์ˆ˜๋ฅผ ๊ธฐ๋ก
- WRITE_COUNT                : ์‹คํ–‰๋„์ค‘ ์ €์žฅ๋˜๊ณ  ์ปค๋ฐ‹๋œ Item ์ˆ˜๋ฅผ ๊ธฐ๋ก
- PROCESS_SKIP_COUNT : ์‹คํ–‰๋„์ค‘ Process๊ฐ€ Skip๋œ Item ์ˆ˜๋ฅผ ๊ธฐ๋ก
- ROLLBACK_COUNT         : ์‹คํ–‰๋„์ค‘ rollback์ด ์ผ์–ด๋‚œ ์ˆ˜๋ฅผ ๊ธฐ๋ก
- EXIT_CODE                        : ์‹คํ–‰ ์ข…๋ฃŒ์ฝ”๋“œ(ExitStatus)๋ฅผ ์ €์žฅ [COMPLETED / FAILED]
- EXIT_MESSAGE                 : Status๊ฐ€ ์‹คํŒจ์ผ ๊ฒฝ์šฐ ์‹คํŒจ ์›์ธ ๋“ฑ์˜ ๋‚ด์šฉ์„ ์ €์žฅ
- LAST_UPDATED                : ๋งˆ์ง€๋ง‰ ์‹คํ–‰(Execution) ์‹œ์ ์„ TimeStamp ํ˜•์‹์œผ๋กœ ๊ธฐ๋ก

2. BATCH_STEP_EXECUTION_CONTEXT
- STEP_EXECUTION_ID   : StepExecution ์‹๋ณ„ํ‚ค, STEP_EXECUTION๋งˆ๋‹ค ์ƒ์„ฑ
- SHORT_CONTEXT         : STEP์˜ ์‹คํ–‰ ์ƒํƒœ์ •๋ณด, ๊ณต์œ ๋ฐ์ดํ„ฐ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ €์žฅ
- SERIALIZED_CONTEXT : ์ง๋ ฌํ™”(serialized)๋œ ์ „์ฒด ์ปจํ…์ŠคํŠธ

 

 

  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ