SlideShare una empresa de Scribd logo
1 de 22
Spring Batch 알아보기
1편
Batch 프로그램이란
• 일련의 작업들을 하나의 작업 단위로 묶어
연속적으로 일괄 처리하는 것
특징
• 사용자와의 상호작용 없이
• 일련의 작업들을 묶어
• 대량의 데이터를 처리하는
• 정기적으로 반복 수행하거나
• 정해진 규칙에 따라 자동으로 수행
Spring Batch 백그라운드
기존 Java 기반 배치 처리 아키텍처 프레임워크에 기술 부재
자사 소유의 배치 아키텍처
및 기술적 노하우 기증
깊이 있는 기술 경험과
스프링 프로그래밍 모델 제공
Spring Batch 특징
• 대량의 데이터를 일괄처리하는데 특화
• Spring Batch는 스케줄링 프레임워크가 아니다.
스케줄러와 함께 작동하도록 설계됐다.
• 로깅 및 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작,
건너뛰기 및 리소스 관리를 포함하여 대량의 레코드를
처리하는 데 필수적인 재사용 가능한 기능을 제공
• 최적화 및 파티셔닝 기술을 통해 매우 높은 볼륨 및 고성능
배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공
Spring Batch 비즈니스 시나리오
• 배치 프로세스를 주기적으로 커밋
• 동시 다발적인 Job 의 배치 처리, 대용량 병렬 처리
• 실패 후 수동 또는 스케줄링에 의한 재시작
• 의존관계가 있는 step 여러 개를 순차적으로 처리
• 조건적 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성
• 반복, 재시도, Skip 처리
Spring Batch 도메인 이해
Spring Batch 메타데이터 스키마
Spring Batch 메타데이터 스키마
JOB 관련 테이블
BATCH_JOB_INSTANCE
• Job이 실행될 때 JobInstance 정보가 저장.
• job_name과 job_key를 키로 하나의 데이터가
저장
BATCH_JOB_EXECUTION
• Job의 실행정보가 저장되며 Job생성/시작/종료
시간, 실행상태, 메시지 등을 관리
BATCH_JOB_EXECUTION_PARAMS
• Job과 함께 실행되는 JobParameter 정보를 저장
BATCH_JOB_EXECUTION_CONTEXT
• Job 실행동안의 여러가지 상태정보, 공유
데이터를 직렬화 (Json 형식)하여 저장
• Step 간 서로 공유 가능함
Spring Batch 메타데이터 스키마
STEP 관련 테이블
BATCH_STEP_EXECUTION
• Step의 실행정보가 저장
• 생성, 시작, 종료 시간, 실행상태, 메시지 등을
관리
BATCH_STEP_EXECUTION_CONTEXT
• Step 의 실행동안 여러가지 상태정보, 공유
데이터를 직렬화 (Json 형식) 해서 저장
• Step 별로 저장되며 Step 간 서로 공유할 수
없음
요약
• Accenture가 기증하여 SpringSource과 협력으로 탄생
• 대량의 데이터를 처리하는데 특화
• 배치가 실패하더라도 강력한 retry 기능 제공
• 메타데이터 저장을 위한 스키마 존재
• Job, Step, Tasklet이라는 도매인으로 구성
Job의 구성
• Job
• JobInstance
• JobParameters
• JobExecution
Spring Batch 도메인 Job
• 배치 계층 구조에서 가장 상위에 있는 개념으로서 하나의 배치작업 자체를 의미
• Job Configuration 을 통해 생성되는 객체 단위로서 배치작업을 어떻게 구성하고 실행할 것인지
전체적으로 설정하고 명세해 놓은 객체
• 배치 Job 을 구성하기 위한 최상위 인터페이스이며 스프링 배치가 기본 구현체를 제공
• 여러 Step 을 포함하고 있는 컨테이너로서 반드시 한 개 이상의 Step으로 구성해야 함
Spring Batch 도메인 Job
Spring Batch 도메인 JobInstance
• Job 이 실행될 때 생성되는 Job 의 논리적 실행 단위 객체로서 고유하게 식별 가능한 작업 실행을 나타냄
• Job 의 설정과 구성은 동일하지만 Job 이 실행되는 시점에 처리하는 내용은 다르기 때문에 Job 의 실행을 구분해야 함
• JobInstance 생성 및 실행
• 처음 시작하는 Job + JobParameter 일 경우 새로운 JobInstance 생성
• 이전과 동일한 Job + JobParameter 으로 실행 할 경우 이미 존재하는 JobInstance 리턴
• 내부적으로 JobName + jobKey (jobParametes의 해시값) 를 가지고 JobInstance 객체를 얻음
• Job 과는 1:M 관계
BATCH_JOB_INSTANCE 테이블과 매핑
• JOB_NAME (Job) 과 JOB_KEY (JobParameter 해시값) 가 동일한 데이터는 중복해서 저장할 수 없음
Spring Batch 도메인 JobInstance
Spring Batch 도메인 JobParameter
• Job을 실행할 때 함께 포함되어 사용되는 파라미터를 가진 도메인 객체
• 하나의 Job에 존재할 수 있는 여러개의 JobInstance를 구분하기 위한 용도
• JobParameters와 JobInstance는 1:1 관계
생성 및 바인딩
• 어플리케이션 실행 시 주입
• Java -jar LogBatch.jar requestDate=20210101
• 코드로 생성
• JobParameterBuilder, DefaultJobParametersConverter
• SpEL 이용
• @Value(“#{jobParameter[requestDate]}”), @JobScope, @StepScope 선언 필수
Spring Batch 도메인 JobParameter
Spring Batch 도메인 JobExecution
• JobInstance 에 대한 한번의 시도를 의미하는 객체로서 Job 실행 중에 발생한 정보들을 저장하고 있는 객체
• 시작시간, 종료시간, 상태(시작됨,완료,실패), 종료상태의 속성을 가짐
• JobIstance 과의 관계
• JobExecution은 'FAILED' 또는 'COMPLETED‘ 등의 Job의 실행 결과 상태를 가지고 있음
• JobExecution 의 실행 상태 결과가 'COMPLETED’ 면 JobInstance 실행이 완료된 것으로 간주해서 재 실행이 불가함
• JobExecution 의 실행 상태 결과가 'FAILED’ 면 JobInstance 실행이 완료되지 않은 것으로 간주해서 재실행이 가능함
• JobParameter 가 동일한 값으로 Job 을 실행할지라도 JobInstance 를 계속 실행할 수 있음
• JobExecution 의 실행 상태 결과가 'COMPLETED’ 될 때까지 하나의 JobInstance 내에서 여러 번의 시도가 생길 수 있음
BATCH_JOB_EXECUTION 테이블과 매핑
• JobInstance 와 JobExecution 는 1:M 의 관계로서 JobInstance 에 대한 성공/실패의 내역을 가지고 있음
Spring Batch 도메인 JobExecution
Spring Batch 도메인 JobExecution
출처: toptal
Spring Batch
Reference
인프런: 스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch

Más contenido relacionado

Similar a 스프링 배치

Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피ssuser776e2d
 
오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유knight1128
 
Ahea Team Spring batch
Ahea Team Spring batchAhea Team Spring batch
Ahea Team Spring batchSunghyun Roh
 
Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring bootChloeChoi23
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바NeoClova
 
Software Architect day - 웹 프레임워크 종결 - metaworks3
Software Architect day - 웹 프레임워크 종결 -  metaworks3Software Architect day - 웹 프레임워크 종결 -  metaworks3
Software Architect day - 웹 프레임워크 종결 - metaworks3uEngine Solutions
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)DK Lee
 
Presto User & Admin Guide
Presto User & Admin GuidePresto User & Admin Guide
Presto User & Admin GuideJEONGPHIL HAN
 
Jsp 기본요소
Jsp 기본요소Jsp 기본요소
Jsp 기본요소cooddy
 
엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육준일 엄
 
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable FunctionsJongin Lee
 
E government framework
E government frameworkE government framework
E government frameworkHyungKuIm
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료beom kyun choi
 
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)NAVER D2
 
201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나JeongHwan Kim
 
Introduction to Apache Tajo
Introduction to Apache TajoIntroduction to Apache Tajo
Introduction to Apache TajoGruter
 

Similar a 스프링 배치 (20)

Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 
오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유
 
Ahea Team Spring batch
Ahea Team Spring batchAhea Team Spring batch
Ahea Team Spring batch
 
Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring boot
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바
 
Software Architect day - 웹 프레임워크 종결 - metaworks3
Software Architect day - 웹 프레임워크 종결 -  metaworks3Software Architect day - 웹 프레임워크 종결 -  metaworks3
Software Architect day - 웹 프레임워크 종결 - metaworks3
 
Spring portfolio2
Spring portfolio2Spring portfolio2
Spring portfolio2
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
Uml 세미나
Uml 세미나Uml 세미나
Uml 세미나
 
Presto User & Admin Guide
Presto User & Admin GuidePresto User & Admin Guide
Presto User & Admin Guide
 
Jsp 기본요소
Jsp 기본요소Jsp 기본요소
Jsp 기본요소
 
Html5
Html5 Html5
Html5
 
엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육
 
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
 
Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
E government framework
E government frameworkE government framework
E government framework
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
 
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
 
201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나
 
Introduction to Apache Tajo
Introduction to Apache TajoIntroduction to Apache Tajo
Introduction to Apache Tajo
 

Más de Wonjun Hwang

This (Kitworks Team Study 김한솔 발표자료 2024.4.22)
This (Kitworks Team Study 김한솔 발표자료 2024.4.22)This (Kitworks Team Study 김한솔 발표자료 2024.4.22)
This (Kitworks Team Study 김한솔 발표자료 2024.4.22)Wonjun Hwang
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
스토리북(Storybook, Kitworks Team Study 우아라 발표)
스토리북(Storybook, Kitworks Team Study 우아라 발표)스토리북(Storybook, Kitworks Team Study 우아라 발표)
스토리북(Storybook, Kitworks Team Study 우아라 발표)Wonjun Hwang
 
mysql8 전환기 (Kitworks Team Study 김천규 발표자료)
mysql8 전환기 (Kitworks Team Study 김천규 발표자료)mysql8 전환기 (Kitworks Team Study 김천규 발표자료)
mysql8 전환기 (Kitworks Team Study 김천규 발표자료)Wonjun Hwang
 
Open AI SORA (키트웍스 팀스터디 발표자료 박준기 240315)
Open AI SORA  (키트웍스 팀스터디 발표자료 박준기 240315)Open AI SORA  (키트웍스 팀스터디 발표자료 박준기 240315)
Open AI SORA (키트웍스 팀스터디 발표자료 박준기 240315)Wonjun Hwang
 
Nest JS (Kitworks Team Study 이본훈 발표 240315)
Nest JS (Kitworks Team Study 이본훈 발표 240315)Nest JS (Kitworks Team Study 이본훈 발표 240315)
Nest JS (Kitworks Team Study 이본훈 발표 240315)Wonjun Hwang
 
JS Event Loop (Kitworks Team Study 김동현 발표)
JS Event Loop (Kitworks Team Study 김동현 발표)JS Event Loop (Kitworks Team Study 김동현 발표)
JS Event Loop (Kitworks Team Study 김동현 발표)Wonjun Hwang
 
Java Optional (Kitworks Team Study 김성호 발표)
Java Optional (Kitworks Team Study 김성호 발표)Java Optional (Kitworks Team Study 김성호 발표)
Java Optional (Kitworks Team Study 김성호 발표)Wonjun Hwang
 
XSS(Cross site scripting) - Kitworks Team Study
XSS(Cross site scripting) - Kitworks Team StudyXSS(Cross site scripting) - Kitworks Team Study
XSS(Cross site scripting) - Kitworks Team StudyWonjun Hwang
 
Flutter & Firebase (2) Kitworks Team Study
Flutter & Firebase (2) Kitworks Team StudyFlutter & Firebase (2) Kitworks Team Study
Flutter & Firebase (2) Kitworks Team StudyWonjun Hwang
 
얕은복사,깊은복사
얕은복사,깊은복사얕은복사,깊은복사
얕은복사,깊은복사Wonjun Hwang
 
Go언어로 디스코드 봇 만들기
Go언어로 디스코드 봇 만들기Go언어로 디스코드 봇 만들기
Go언어로 디스코드 봇 만들기Wonjun Hwang
 
완전 유용한 CSS 모음
완전 유용한 CSS 모음완전 유용한 CSS 모음
완전 유용한 CSS 모음Wonjun Hwang
 
2024 개발 트렌드
2024 개발 트렌드2024 개발 트렌드
2024 개발 트렌드Wonjun Hwang
 
디바운싱과 쓰로틀링
디바운싱과 쓰로틀링디바운싱과 쓰로틀링
디바운싱과 쓰로틀링Wonjun Hwang
 
스마트한 팀 협업
스마트한 팀 협업스마트한 팀 협업
스마트한 팀 협업Wonjun Hwang
 

Más de Wonjun Hwang (20)

This (Kitworks Team Study 김한솔 발표자료 2024.4.22)
This (Kitworks Team Study 김한솔 발표자료 2024.4.22)This (Kitworks Team Study 김한솔 발표자료 2024.4.22)
This (Kitworks Team Study 김한솔 발표자료 2024.4.22)
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
스토리북(Storybook, Kitworks Team Study 우아라 발표)
스토리북(Storybook, Kitworks Team Study 우아라 발표)스토리북(Storybook, Kitworks Team Study 우아라 발표)
스토리북(Storybook, Kitworks Team Study 우아라 발표)
 
mysql8 전환기 (Kitworks Team Study 김천규 발표자료)
mysql8 전환기 (Kitworks Team Study 김천규 발표자료)mysql8 전환기 (Kitworks Team Study 김천규 발표자료)
mysql8 전환기 (Kitworks Team Study 김천규 발표자료)
 
Open AI SORA (키트웍스 팀스터디 발표자료 박준기 240315)
Open AI SORA  (키트웍스 팀스터디 발표자료 박준기 240315)Open AI SORA  (키트웍스 팀스터디 발표자료 박준기 240315)
Open AI SORA (키트웍스 팀스터디 발표자료 박준기 240315)
 
Nest JS (Kitworks Team Study 이본훈 발표 240315)
Nest JS (Kitworks Team Study 이본훈 발표 240315)Nest JS (Kitworks Team Study 이본훈 발표 240315)
Nest JS (Kitworks Team Study 이본훈 발표 240315)
 
JS Event Loop (Kitworks Team Study 김동현 발표)
JS Event Loop (Kitworks Team Study 김동현 발표)JS Event Loop (Kitworks Team Study 김동현 발표)
JS Event Loop (Kitworks Team Study 김동현 발표)
 
Java Optional (Kitworks Team Study 김성호 발표)
Java Optional (Kitworks Team Study 김성호 발표)Java Optional (Kitworks Team Study 김성호 발표)
Java Optional (Kitworks Team Study 김성호 발표)
 
XSS(Cross site scripting) - Kitworks Team Study
XSS(Cross site scripting) - Kitworks Team StudyXSS(Cross site scripting) - Kitworks Team Study
XSS(Cross site scripting) - Kitworks Team Study
 
Flutter & Firebase (2) Kitworks Team Study
Flutter & Firebase (2) Kitworks Team StudyFlutter & Firebase (2) Kitworks Team Study
Flutter & Firebase (2) Kitworks Team Study
 
PWA
PWAPWA
PWA
 
얕은복사,깊은복사
얕은복사,깊은복사얕은복사,깊은복사
얕은복사,깊은복사
 
Go언어로 디스코드 봇 만들기
Go언어로 디스코드 봇 만들기Go언어로 디스코드 봇 만들기
Go언어로 디스코드 봇 만들기
 
완전 유용한 CSS 모음
완전 유용한 CSS 모음완전 유용한 CSS 모음
완전 유용한 CSS 모음
 
2024 개발 트렌드
2024 개발 트렌드2024 개발 트렌드
2024 개발 트렌드
 
디바운싱과 쓰로틀링
디바운싱과 쓰로틀링디바운싱과 쓰로틀링
디바운싱과 쓰로틀링
 
Passkey
PasskeyPasskey
Passkey
 
스마트한 팀 협업
스마트한 팀 협업스마트한 팀 협업
스마트한 팀 협업
 
AI News '23.12
AI News '23.12AI News '23.12
AI News '23.12
 
Google Analytics
Google AnalyticsGoogle Analytics
Google Analytics
 

스프링 배치

  • 2. Batch 프로그램이란 • 일련의 작업들을 하나의 작업 단위로 묶어 연속적으로 일괄 처리하는 것 특징 • 사용자와의 상호작용 없이 • 일련의 작업들을 묶어 • 대량의 데이터를 처리하는 • 정기적으로 반복 수행하거나 • 정해진 규칙에 따라 자동으로 수행
  • 3. Spring Batch 백그라운드 기존 Java 기반 배치 처리 아키텍처 프레임워크에 기술 부재 자사 소유의 배치 아키텍처 및 기술적 노하우 기증 깊이 있는 기술 경험과 스프링 프로그래밍 모델 제공
  • 4. Spring Batch 특징 • 대량의 데이터를 일괄처리하는데 특화 • Spring Batch는 스케줄링 프레임워크가 아니다. 스케줄러와 함께 작동하도록 설계됐다. • 로깅 및 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기 및 리소스 관리를 포함하여 대량의 레코드를 처리하는 데 필수적인 재사용 가능한 기능을 제공 • 최적화 및 파티셔닝 기술을 통해 매우 높은 볼륨 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공
  • 5. Spring Batch 비즈니스 시나리오 • 배치 프로세스를 주기적으로 커밋 • 동시 다발적인 Job 의 배치 처리, 대용량 병렬 처리 • 실패 후 수동 또는 스케줄링에 의한 재시작 • 의존관계가 있는 step 여러 개를 순차적으로 처리 • 조건적 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성 • 반복, 재시도, Skip 처리
  • 8. Spring Batch 메타데이터 스키마 JOB 관련 테이블 BATCH_JOB_INSTANCE • Job이 실행될 때 JobInstance 정보가 저장. • job_name과 job_key를 키로 하나의 데이터가 저장 BATCH_JOB_EXECUTION • Job의 실행정보가 저장되며 Job생성/시작/종료 시간, 실행상태, 메시지 등을 관리 BATCH_JOB_EXECUTION_PARAMS • Job과 함께 실행되는 JobParameter 정보를 저장 BATCH_JOB_EXECUTION_CONTEXT • Job 실행동안의 여러가지 상태정보, 공유 데이터를 직렬화 (Json 형식)하여 저장 • Step 간 서로 공유 가능함
  • 9. Spring Batch 메타데이터 스키마 STEP 관련 테이블 BATCH_STEP_EXECUTION • Step의 실행정보가 저장 • 생성, 시작, 종료 시간, 실행상태, 메시지 등을 관리 BATCH_STEP_EXECUTION_CONTEXT • Step 의 실행동안 여러가지 상태정보, 공유 데이터를 직렬화 (Json 형식) 해서 저장 • Step 별로 저장되며 Step 간 서로 공유할 수 없음
  • 10. 요약 • Accenture가 기증하여 SpringSource과 협력으로 탄생 • 대량의 데이터를 처리하는데 특화 • 배치가 실패하더라도 강력한 retry 기능 제공 • 메타데이터 저장을 위한 스키마 존재 • Job, Step, Tasklet이라는 도매인으로 구성
  • 11. Job의 구성 • Job • JobInstance • JobParameters • JobExecution
  • 12. Spring Batch 도메인 Job • 배치 계층 구조에서 가장 상위에 있는 개념으로서 하나의 배치작업 자체를 의미 • Job Configuration 을 통해 생성되는 객체 단위로서 배치작업을 어떻게 구성하고 실행할 것인지 전체적으로 설정하고 명세해 놓은 객체 • 배치 Job 을 구성하기 위한 최상위 인터페이스이며 스프링 배치가 기본 구현체를 제공 • 여러 Step 을 포함하고 있는 컨테이너로서 반드시 한 개 이상의 Step으로 구성해야 함
  • 14. Spring Batch 도메인 JobInstance • Job 이 실행될 때 생성되는 Job 의 논리적 실행 단위 객체로서 고유하게 식별 가능한 작업 실행을 나타냄 • Job 의 설정과 구성은 동일하지만 Job 이 실행되는 시점에 처리하는 내용은 다르기 때문에 Job 의 실행을 구분해야 함 • JobInstance 생성 및 실행 • 처음 시작하는 Job + JobParameter 일 경우 새로운 JobInstance 생성 • 이전과 동일한 Job + JobParameter 으로 실행 할 경우 이미 존재하는 JobInstance 리턴 • 내부적으로 JobName + jobKey (jobParametes의 해시값) 를 가지고 JobInstance 객체를 얻음 • Job 과는 1:M 관계 BATCH_JOB_INSTANCE 테이블과 매핑 • JOB_NAME (Job) 과 JOB_KEY (JobParameter 해시값) 가 동일한 데이터는 중복해서 저장할 수 없음
  • 15. Spring Batch 도메인 JobInstance
  • 16. Spring Batch 도메인 JobParameter • Job을 실행할 때 함께 포함되어 사용되는 파라미터를 가진 도메인 객체 • 하나의 Job에 존재할 수 있는 여러개의 JobInstance를 구분하기 위한 용도 • JobParameters와 JobInstance는 1:1 관계 생성 및 바인딩 • 어플리케이션 실행 시 주입 • Java -jar LogBatch.jar requestDate=20210101 • 코드로 생성 • JobParameterBuilder, DefaultJobParametersConverter • SpEL 이용 • @Value(“#{jobParameter[requestDate]}”), @JobScope, @StepScope 선언 필수
  • 17. Spring Batch 도메인 JobParameter
  • 18. Spring Batch 도메인 JobExecution • JobInstance 에 대한 한번의 시도를 의미하는 객체로서 Job 실행 중에 발생한 정보들을 저장하고 있는 객체 • 시작시간, 종료시간, 상태(시작됨,완료,실패), 종료상태의 속성을 가짐 • JobIstance 과의 관계 • JobExecution은 'FAILED' 또는 'COMPLETED‘ 등의 Job의 실행 결과 상태를 가지고 있음 • JobExecution 의 실행 상태 결과가 'COMPLETED’ 면 JobInstance 실행이 완료된 것으로 간주해서 재 실행이 불가함 • JobExecution 의 실행 상태 결과가 'FAILED’ 면 JobInstance 실행이 완료되지 않은 것으로 간주해서 재실행이 가능함 • JobParameter 가 동일한 값으로 Job 을 실행할지라도 JobInstance 를 계속 실행할 수 있음 • JobExecution 의 실행 상태 결과가 'COMPLETED’ 될 때까지 하나의 JobInstance 내에서 여러 번의 시도가 생길 수 있음 BATCH_JOB_EXECUTION 테이블과 매핑 • JobInstance 와 JobExecution 는 1:M 의 관계로서 JobInstance 에 대한 성공/실패의 내역을 가지고 있음
  • 19. Spring Batch 도메인 JobExecution
  • 20. Spring Batch 도메인 JobExecution 출처: toptal
  • 22. Reference 인프런: 스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch

Notas del editor

  1. 안녕하세요. 오늘은 “스프링 배치 알아보기” 라는 주제로 스터디를 준비해보았습니다. 회사 업무를 통해 간단한 배치 수정 작업을 하다보니 자연스럽게 관심이 갔었고 언젠가 하나의 배치 프로세스를 완성하는 것을 목표로 미리 공부하여 준비해 놓으면 좋겠다 라는 취지로 준비하게 되었습니다. 최근에 저는 스프링 배치 관련 업무를 유지보수하게 되었습니다. 이 경험을 통해 실무에서 활용 가능한 능력을 키워 나아가고자, 직접 배치 프로그램을 설계하고 구현해보는 도전에 나서기로 했습니다. 이를 위해 스터디를 시작하였습니다.
  2. 일반적으로 배치(Batch) 프로그램이라 하면, 일련의 작업들을 하나의 작업 단위로 묶어 연속적으로 일괄 처리하는 것을 말합니다. 배치가 아닌, 일반적인 프로그램에도 여러 작업을 묶어 처리하는 경우가 있는데, 둘의 차이점은 사용자와의 상호작용(Interaction) 여부라고 합니다. 배치의 특징으로는 사용자와의 상호작용이 없어야 하고, 일련의 작업들을 묶고, 대량의 데이터를 처리하는데 특화되어 있고, 정기적으로 반복 수행하고, 정해진 규칙에 따라 자동으로 수행한다는 특징이 있습니다.
  3. 스프링 배치는 자바 기반의 배치 아키텍처입니다. 스프링 배치의 특이한 점은 Accenture(액센츄어)라는 한 회사의 기증으로부터 탄생하게 되었다는 것입니다. 기존 Java 기반 오픈소스 프로젝트나 커뮤니티는 웹 및 마이크로서비스 기반 아키텍처 프레임워크에 많은 관심을 기울여 왔지만, 배치 처리 요구를 수용하기 위한 재사용 가능한 아키텍처 프레임워크에 대한 관심은 현저히 부족했습니다. 이런 문제를 개선하기 위해 바꾸기 위해 SpringSource(현 Vmware)와 Accenture(액센츄어)가 협력하였고 액센츄어는 자사의 기술적인 경험과 노하우가 담인 배치 처리 아키텍처 프레임워크를 Spring Batch 프로젝트에 기증하고, SpringSource에 의해 스프링 프레임워크에 접목시키며 현재의 스프링배치가 탄생하였습니다.
  4. 스프링 배치는 대량의 데이터를 일괄처리하는데 특화되어 있습니다. 로깅, 트랜잭션 관리, 데이터 이식 작업, 일/월/년 매출 통계 등등 대량의 데이터를 다루는 데에 최적화된 프레임워크라고 보시면 됩니다. 스프링 배치는 파티셔닝 기술을 통해 대량의 데이터를 분산처리 하거나, 작업 도중 시스템에러 발생 시 성공한 기존 작업은 건너뛰고 실패한 지점부터 재 시작하는 등의 배치 작업을 보다 쉽고 안정적으로 사용할 수 있도록 만들어 놓은 프레임워크입니다. 스프링 배치는 특이하게 스케줄링 프레임워크가 아니다 라고 강조하고 있는데요. 아마 사용자들이 배치 프로그램이라고 하면 일반적으로 스케줄링 프로그램을 가장 먼저 연상시키다보니 스프링 배치는 데이터 처리에 특화된 프레임워크다 라는 걸 강조하는 것 같습니다.
  5. 스프링 배치를 다음과 같은 업무에 활용할 수 있다고 소개하고 있습니다.
  6. 스프링 배치는 크게 Job, Step, Tasklet이라는 도메인으로 구성되어 있고 각 도메인이 순서대로 실행됩니다. JOB은 “일 매출 통계”와 같은 업무 그 자체를 의미합니다. STEP Job을 어떻게 구성하고 실행할 것인지 명세해 놓은 정보를 가지고 있는 도메인 객체입니다. TASKLET Step내에서 실행되는 도메인 객체로서 실제 작업을 처리하는 도매인 객체로 Tasklet기반과 Chunk기반이있습니다.
  7. Spring Batch에는 배치 작업에 대한 메타데이터를 저장하는 데이터베이스 스키마를 제공합니다. 또 다양한 RDBMS에 맞는 쿼리를 자체적으로 미리 제공하고 있습니다. 이 메타데이터에는 각 작업의 시작 및 종료 시간, 각 작업의 상태, 각 작업에서 처리한 레코드 수와 같은 정보가 포함됩니다. 데이터베이스 스키마는 각 작업에서 실행되는 단계에 대한 정보도 저장합니다. 이 정보는 배치 작업의 진행 상황을 모니터링하고 문제를 해결하는 데 사용할 수 있습니다.
  8. Job에 대해서 더 자세히 알아보도록 하겠습니다. Job은 Job, JobInstance, JobParatemers, JobExecution 세부 도메인으로 구성되어 있습니다.
  9. Job은 배치 작업을 설정하고 명세해 놓은 객체로 “일 매출 통계”와 같은 하나의 배치작업 자체를 의미합니다. 반드시 한 개 이상의 Step이 포함되어 있어야합니다.
  10. Job의 실행과정을 살펴보겠습니다. Job과 Job이 필요로 하는 JobParameters를 매개변수로 제공해주게 되면 JobLauncher에 의해 실행되게 됩니다. 이후에 Job이 가지고 있는 각 Step들을 실행시키는 흐름입니다.