[Spring Batch] 스프링 배치 강좌 2. Metadata와 JobRepository 알아보기

스프링 배치 강좌 목록: https://www.fwantastic.com/p/spring-batch.html


이전 글 다시 보기: [Spring Batch] 스프링 배치 강좌 1. 프로그래밍의 꽃. 스프링 배치 Hello World!


재미없는 이론 공부가 돌아왔다. Intro때 잠깐 살펴보았던 JobRepository를 파헤쳐보자.





Spring Batch Meta-Data ERD
스프링 배치 메타 데이터 ERD
이미지 출처: https://docs.spring.io/spring-batch/docs/current/reference/html/schema-appendix.html


스프링 배치 프레임워크는 위의 6개 테이블 사용해 작동된다. 


BATCH_JOB_INSTANCE

Job이 실행되면 BATCH_JOB_INSTANCE새로운 row를 만든다. Job의 이름과 Job이 시작될때 넘겨받은 파라미터를 Serialize (직렬화) 해서 저장한다. 

Jobflow (high level):
-> 시작
-> BATCH_JOB_INSTANCE에 동일한 JOB_NAME과 JOB_KEY를 가진 row가 있는지 확인. 찾으면  JobInstance must not already exist  에러 메세지 출력 후 종료
-> BATCH_JOB_INSTANCE에 row 생성
-> BATCH_JOB_EXECUTION에 BATCH_JOB_INSTANCE_ID를 가진 가장 마지막 row가 있는지 확인. 
-> 찾으면 Completed 상태가 아닐 경우에만 재시작. 그 외엔 이미 끝난 작업을 다시 시작하려고 하는거니까 에러 메세지 출력 후 종료
-> 못 찾으면 BATCH_JOB_EXECUTION에 row 생성
-> Step들 실행
-> 종료


두 번째 설명대로 동일한 Job을 동일한 JOB_KEY로 실행하면 이미 작업이 끝난 상태라서 실행이 불가하다. 그래서 Job을 재사용하기 위해서 Job 파라미터에 현재 시간같이 그때그때마다 달라지는 값을 넣는다.




BATCH_JOB_EXECUTION

Job 실행 내용을 담고 있다. Job실패 + 성공 횟수만큼 row가 생성된다. 

BATCH_JOB_EXECUTION_PARAMS

Job 파라미터가 여기에 저장된다. IDENTIFYING 컬럼은 BATCH_JOB_INSTANCE.JOB_KEY에 포함이 될지 말지를 결정한다. 

BATCH_JOB_EXECUTION_CONTEXT

Job 안에 있는 컴포넌트들 (tasklet, step 등) 이 정보를 교환해야 할 때가 있다. 그럴 때 JOB_EXECUTION_CONTEXT를 사용해 정보를 넣거나 빼올 수가 있다. 그런 정보들이 저장되는 테이블이다. 





BATCH_STEP_EXECUTION

Step 실행 내용을 담고 있다. JOB_EXECUTION과 마찬가지로 Step실패 + 성공 횟수만큼 row가 생성된다.

BATCH_STEP_EXECUTION_CONTEXT

Step 안에 있는 컴포넌트들 (reader, processor, writer 등) 이 정보를 교환 할 때 해당 테이블에 저장된다. 






DDL (테이블 생성) 스크립트

이클립스에서 
Maven Dependencies
-> spring-batch-core-4.2.1.RELEASE.jar
-> org.springframework.batch.core
패키지 안에 보면 디비 종류별로 스크립트들이 만들어져 있다. 내용을 복사해서 직접 테이블을 만들어 사용할 수도 있다.










최대한 짧으면서 중요한 컨셉들을 쉽게 이해할 수 있도록 적으려고 노력했다. 아직 초반 단계인 만큼 용어들이 생소할 거다. 


더 많은 디테일을 알고싶다면 공식 문서를 참조하자.




다음 글