SlideShare una empresa de Scribd logo
1 de 35
SPRING
AHEA STUDY
LEGACY BATCH PROBLEM
[A]개발자의 배치 개발 일상.
배치 통계를 위한 변수를
할당하는 코드 추가
트래픽 증
배치 개발 개발중 에러발생 - 로그
추가
[A]씨의 일을 인수인계 받은 [B] 개발자
로직이 어디있
지?
새벽에 도는 배치가
실패
LEGACY BATCH PROBLEM
기존 배치 개발의 문제점
1. 읽어오는 데이터 형태의 변화에 대응하기 힘들다. (CSV -> DB)
2. DB에 한꺼번에 COMMIT되는 건수가 너무 많았다.(트래픽 증가)
3. 배치 통계를 위한 변수를 할당하고 로깅 하는 코드 추가.
4. 유지보수가 힘들다. (비지니스 로직 어디있는거지?)
5. 실패 했을때 후 처리가 부족했다.(B씨 새벽에 배치가 실패)
LEGACY BATCH PROBLEM
ABOUT SPRING BATCH
SPRING BATCH != QUARTZ
Simple
ABOUT SPRING BATCH
BATCH란
Batch 는 일괄 처리를 뜻하는
용어.
Spring Framework
사용 편의성 기반.
스프링 배치는 스케줄러를 포함
하지 않고 스케줄러 와 함께 작
동.
SPRING BATCH HISTORY
Spring batch 는 컨설팅 회사인 엑센츄어
(Accenture)의 실무 경험을 바탕으로
Spring IO 팀과 함께 개발을 했으며, 이미
많은 회사에서 안정적으로 사용 중
Spring Batch는 로깅 / 추적, 트랜잭션 관리, 작업 처리
통계, 작업 재시작, 건너 뛰기 및 자원 관리를 포함
ABOUT SPRING BATCH
SPRING BATCH DOMAIN
JOB
JOB LAUNCHER
SPRING BATCH DOMAIN
JobInstance = job + jobParameters
JobExecution은 한번 instance가 시도 되는 job개념.
SPRING BATCH DOMAIN
SPRING BATCH DOMAIN
SPRING BATCH - TABLE
BATCH TABLE
SPRING BATCH - TABLE
TABLE - SAMPLE DATA
SPRING BATCH - TABLE
SPRING BATCH - TABLE
SPRING BATCH - DEMO
BATCH - SAMPLE DATA
SPRING BATCH - DEMO
@ENABLEBATCHPROCESSING
- jobBuilderFactory와 stepBuilderFactory 빈을 제공
- 생성 되는 TransactionManager 는 DataSourceTransactionManager 사용
SPRING BATCH - DEMO
firstName 과 lastname을 대문자로 만들어주는 PersionItemProcessor
Item 처리할 데이터의 가장 작은 구성 요소
SPRING BATCH - DEMO
PROCESSOR - BUSSINESS LOGIC
SPRING BATCH - CHUNK
CHUNK란
Chunk oriented processing refers to reading the data one at a time, and
creating 'chunks' that will be written out, within a transaction boundary.
One item is read in from an ItemReader, handed to an ItemProcessor, and
aggregated.
Once the number of items read equals the commit interval, the entire chunk
is written out via the ItemWriter, and then the transaction is committed.
하나의 TRANSACTION안에서 처리할 ITEM의 덩어리.
CHUNK 의 역할
Reader - Item 하나씩
Writer - chunk에 설정한 개수만큼
SPRING BATCH - CHUNK
CHUNK 개수에 따른 속도 변화
chunk 10일때
수행시간 : 1초
chunk 100일때
수행시간 : 0.1초
SPRING BATCH - CHUNK
CHUNK와 TRANSACTION
SPRING BATCH - CHUNK
CHUNK 의 동작방식 정리
if> chunk 의 commit interval = 2
SPRING BATCH - CHUNK
READER, WRITER 설정
SPRING BATCH - READER, WRITER
JDBCPAGING READER
paging을 사용해서 대량의 데이터를 짤라 읽는 방식
SPRING BATCH - READER, WRITER
pageSize 를 10으로 set 후 sortKey 에 따라서 쿼리를 질의.
RepeatTemplate에 chunk만큼 저장 후 Insert
if> chunk 의 commit interval = 5
SPRING BATCH - READER, WRITER
이미 가져온 10개중 5개가 남아서 read로 읽어오고 chunk에 쌓고 5개 되면 insert
sortKey에 따라서 order 를 걸고 그 다음부터 쿼리 질의.
SPRING BATCH - READER, WRITER
1.Reader 에 pageSize만큼 쿼리 해온다.
2.reader가 한 건씩 처리.
3.chunk에 세팅한 만큼 쌓이면 write
JDBCPAGING READER - 정리
SPRING BATCH - READER, WRITER
SPRING BATCH LISTENER
JOBEXECUTIONLISTENER
SPRING BATCH DOMAIN
정리
SPRING BATCH SOLUTION
BATCH 를 통해 해결.
1. 읽어오는 데이터 형태의 변화에 대응하기 힘들다. (CSV -> DB)
-> ITEMREADER라는 인터페이스를 통해 비교적 쉬운 방식으로 접근 가
능
2. DB에 한꺼번에 COMMIT되는 건수가 너무 많았다.
-> CHUNK ORIENTED PROCESSING 으로 COMMIT 되는 양을 조절 할
수 있다.
3. 배치 통계를 위한 변수를 할당하고 로깅 하는 코드 추가.
-> BATCH TABLE 에 통계에 필요한 값들이 알아서 저장된다.
4. 유지보수가 힘들다. (비지니스 로직 어디있는거지?)
-> PRECESS, READ, WRITER를 보면 어떻게 되있는지 쉽게 찾을 수 있
다.
5. 실패 했을때 후 처리가 부족했다.
-> EXECUTIONCONTEXT 라는 저장 공간에 저장된 정보를 활용해서 처
리.
ETC
추가 - 대용량 배치 처리 병렬 수행
1. 멀티쓰레드(Multi-threaded Step)
2. Parallel Steps.
3. 파티셔닝(Partitioning)
SPRING BATCH SOLUTION
AHEA STUDY 를 준비하면서…..
>https://docs.spring.io/spring/docs/current/spring-framework-reference/html/schedu
스프링 배치와 전자전부 프레임워크 : http://open.egovframe.go.kr/nforges/informat
스프링 배치 이점 : https://groups.google.com/forum/#!topic/ksug/9FMlJaE-zKU
스프링 배치 vs DB 프로시저 : https://groups.google.com/forum/#!topic/ksug/vznlOZ
대규모 배치시스템 성공적인 구축 전략 : https://www.kodb.or.kr/info/info_04_view.h

Más contenido relacionado

La actualidad más candente

장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debuggingJongwon Han
 
spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례Daehwan Lee
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기flashscope
 
Python server-101
Python server-101Python server-101
Python server-101Huey Park
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅Keesun Baik
 
다함께, FluxUtils 한바퀴!
다함께, FluxUtils 한바퀴!다함께, FluxUtils 한바퀴!
다함께, FluxUtils 한바퀴!우영 주
 
Pinpoint spring_camp 2015
Pinpoint spring_camp 2015Pinpoint spring_camp 2015
Pinpoint spring_camp 2015Woonduk-Kang
 
iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptCheolhee Han
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기Taegon Kim
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들Kivol
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance TuningJi-Woong Choi
 
500.JBoss Troubleshooting Essential
500.JBoss Troubleshooting Essential500.JBoss Troubleshooting Essential
500.JBoss Troubleshooting EssentialOpennaru, inc.
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. InfinispanHyeonSeok Choi
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Jemin Huh
 
Share some development
Share some developmentShare some development
Share some developmentJi Heon Kim
 

La actualidad más candente (20)

장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 
spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
Python server-101
Python server-101Python server-101
Python server-101
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
 
다함께, FluxUtils 한바퀴!
다함께, FluxUtils 한바퀴!다함께, FluxUtils 한바퀴!
다함께, FluxUtils 한바퀴!
 
Pinpoint spring_camp 2015
Pinpoint spring_camp 2015Pinpoint spring_camp 2015
Pinpoint spring_camp 2015
 
iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScript
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
 
500.JBoss Troubleshooting Essential
500.JBoss Troubleshooting Essential500.JBoss Troubleshooting Essential
500.JBoss Troubleshooting Essential
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 
Share some development
Share some developmentShare some development
Share some development
 

Similar a Ahea Team Spring batch

[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습smartstudy_official
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스WebFrameworks
 
쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유NAVER SHOPPING
 
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015Goonoo Kim
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220Seomgi Han
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션흥배 최
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기Yeonhee Kim
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea Strike
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석smartstudy_official
 
추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)AWSKRUG - AWS한국사용자모임
 
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...Amazon Web Services Korea
 
Webservice cache strategy
Webservice cache strategyWebservice cache strategy
Webservice cache strategyDaeMyung Kang
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드cranbe95
 
The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습Hyun-woo Park
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 

Similar a Ahea Team Spring batch (20)

Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스
 
Showroom 2019-react
Showroom 2019-reactShowroom 2019-react
Showroom 2019-react
 
쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유
 
Place site Design
Place site DesignPlace site Design
Place site Design
 
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
 
추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)
 
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
 
Webservice cache strategy
Webservice cache strategyWebservice cache strategy
Webservice cache strategy
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 

Ahea Team Spring batch

  • 2. LEGACY BATCH PROBLEM [A]개발자의 배치 개발 일상. 배치 통계를 위한 변수를 할당하는 코드 추가 트래픽 증 배치 개발 개발중 에러발생 - 로그 추가
  • 3. [A]씨의 일을 인수인계 받은 [B] 개발자 로직이 어디있 지? 새벽에 도는 배치가 실패 LEGACY BATCH PROBLEM
  • 4. 기존 배치 개발의 문제점 1. 읽어오는 데이터 형태의 변화에 대응하기 힘들다. (CSV -> DB) 2. DB에 한꺼번에 COMMIT되는 건수가 너무 많았다.(트래픽 증가) 3. 배치 통계를 위한 변수를 할당하고 로깅 하는 코드 추가. 4. 유지보수가 힘들다. (비지니스 로직 어디있는거지?) 5. 실패 했을때 후 처리가 부족했다.(B씨 새벽에 배치가 실패) LEGACY BATCH PROBLEM
  • 5. ABOUT SPRING BATCH SPRING BATCH != QUARTZ Simple
  • 6. ABOUT SPRING BATCH BATCH란 Batch 는 일괄 처리를 뜻하는 용어. Spring Framework 사용 편의성 기반. 스프링 배치는 스케줄러를 포함 하지 않고 스케줄러 와 함께 작 동.
  • 7. SPRING BATCH HISTORY Spring batch 는 컨설팅 회사인 엑센츄어 (Accenture)의 실무 경험을 바탕으로 Spring IO 팀과 함께 개발을 했으며, 이미 많은 회사에서 안정적으로 사용 중 Spring Batch는 로깅 / 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너 뛰기 및 자원 관리를 포함 ABOUT SPRING BATCH
  • 10. JobInstance = job + jobParameters JobExecution은 한번 instance가 시도 되는 job개념. SPRING BATCH DOMAIN
  • 12. SPRING BATCH - TABLE BATCH TABLE
  • 13. SPRING BATCH - TABLE TABLE - SAMPLE DATA
  • 14. SPRING BATCH - TABLE
  • 15. SPRING BATCH - TABLE
  • 16. SPRING BATCH - DEMO BATCH - SAMPLE DATA
  • 17. SPRING BATCH - DEMO @ENABLEBATCHPROCESSING - jobBuilderFactory와 stepBuilderFactory 빈을 제공 - 생성 되는 TransactionManager 는 DataSourceTransactionManager 사용
  • 19. firstName 과 lastname을 대문자로 만들어주는 PersionItemProcessor Item 처리할 데이터의 가장 작은 구성 요소 SPRING BATCH - DEMO PROCESSOR - BUSSINESS LOGIC
  • 20. SPRING BATCH - CHUNK CHUNK란 Chunk oriented processing refers to reading the data one at a time, and creating 'chunks' that will be written out, within a transaction boundary. One item is read in from an ItemReader, handed to an ItemProcessor, and aggregated. Once the number of items read equals the commit interval, the entire chunk is written out via the ItemWriter, and then the transaction is committed. 하나의 TRANSACTION안에서 처리할 ITEM의 덩어리.
  • 21. CHUNK 의 역할 Reader - Item 하나씩 Writer - chunk에 설정한 개수만큼 SPRING BATCH - CHUNK
  • 22. CHUNK 개수에 따른 속도 변화 chunk 10일때 수행시간 : 1초 chunk 100일때 수행시간 : 0.1초 SPRING BATCH - CHUNK
  • 24. CHUNK 의 동작방식 정리 if> chunk 의 commit interval = 2 SPRING BATCH - CHUNK
  • 25. READER, WRITER 설정 SPRING BATCH - READER, WRITER
  • 26. JDBCPAGING READER paging을 사용해서 대량의 데이터를 짤라 읽는 방식 SPRING BATCH - READER, WRITER
  • 27. pageSize 를 10으로 set 후 sortKey 에 따라서 쿼리를 질의. RepeatTemplate에 chunk만큼 저장 후 Insert if> chunk 의 commit interval = 5 SPRING BATCH - READER, WRITER
  • 28. 이미 가져온 10개중 5개가 남아서 read로 읽어오고 chunk에 쌓고 5개 되면 insert sortKey에 따라서 order 를 걸고 그 다음부터 쿼리 질의. SPRING BATCH - READER, WRITER
  • 29. 1.Reader 에 pageSize만큼 쿼리 해온다. 2.reader가 한 건씩 처리. 3.chunk에 세팅한 만큼 쌓이면 write JDBCPAGING READER - 정리 SPRING BATCH - READER, WRITER
  • 32. SPRING BATCH SOLUTION BATCH 를 통해 해결. 1. 읽어오는 데이터 형태의 변화에 대응하기 힘들다. (CSV -> DB) -> ITEMREADER라는 인터페이스를 통해 비교적 쉬운 방식으로 접근 가 능 2. DB에 한꺼번에 COMMIT되는 건수가 너무 많았다. -> CHUNK ORIENTED PROCESSING 으로 COMMIT 되는 양을 조절 할 수 있다. 3. 배치 통계를 위한 변수를 할당하고 로깅 하는 코드 추가. -> BATCH TABLE 에 통계에 필요한 값들이 알아서 저장된다. 4. 유지보수가 힘들다. (비지니스 로직 어디있는거지?) -> PRECESS, READ, WRITER를 보면 어떻게 되있는지 쉽게 찾을 수 있 다. 5. 실패 했을때 후 처리가 부족했다. -> EXECUTIONCONTEXT 라는 저장 공간에 저장된 정보를 활용해서 처 리.
  • 33. ETC 추가 - 대용량 배치 처리 병렬 수행 1. 멀티쓰레드(Multi-threaded Step) 2. Parallel Steps. 3. 파티셔닝(Partitioning)
  • 34. SPRING BATCH SOLUTION AHEA STUDY 를 준비하면서…..
  • 35. >https://docs.spring.io/spring/docs/current/spring-framework-reference/html/schedu 스프링 배치와 전자전부 프레임워크 : http://open.egovframe.go.kr/nforges/informat 스프링 배치 이점 : https://groups.google.com/forum/#!topic/ksug/9FMlJaE-zKU 스프링 배치 vs DB 프로시저 : https://groups.google.com/forum/#!topic/ksug/vznlOZ 대규모 배치시스템 성공적인 구축 전략 : https://www.kodb.or.kr/info/info_04_view.h

Notas del editor

  1. 두번째 발표자 -> 알서포트 백앤드 -> 스터디 주제를 배치 -> -스터디 주제 정할때 자유주제 > 일하면서 많이 들음 -> 그러나 정확히 먼지 모름. -> 마침 도입해야함. -> 스터디를 준비하면서 배치를 접해보지 않거나
  2. 기존 배치 프로그램의 문제를 하나의 상황을 예를 들어 어떤문제가 있었는지 알아보자 -> A씨는 배치 개발 요청 -> 요구사항중 하나는 csv 에서 읽어오는 방식 -> 개발 과정에서 갑자기 이유없이 배치가 정지되는 상황. -> 확인 결과 한꺼번에 많은 양이 몰려서 발생한 에러-> 이를 대비하기 위해 통계페이지를 추가하기로 하였고 A씨는 배치 통계를 위한 변수를 할당하고 로깅 하는 코드 추가
  3. 현업에서 배치프로그램을 쓰다가 수정요청사항이 와서 A씨의 후임 개발자 B씨가 배치 프로그램을 수정해야 하는 상황이 발생했다. 수정요청사항 -> sql -> 로직이 어디 -> 야근을함 -> 집에갔는데 새벽에 배치가 실패 -> 저녁이 없는 삶이라고 불평불만 -> 역시 개발자는 3d
  4. 기존배치는 이런문제점 -> 스프링 배치는 이를 해결함 -> 배치가 이 점을 어떻게 해결하는지 하나하나 보여줌.
  5. 자료를 찾다 인터넷에 재미있는글 -> 배치와 쿼츠는 다름 -> 알면 참 쉬움
  6. Job 은 배치 프로세스에서 캡슐화 되있는 entity이고 단순히 Step을 위한 컨테이너 JobLauncher로 작업을 실행
  7. 동기, 비동기 방식.
  8. JobInstance 다이어그램의 ‘EndOfDay’작업과 같이 하루가 끝날 때 한 번 실행해야하는 배치 작업을 생각해보면, 하루에 하나의 ‘EndOfDay’작업이 존재하고, 이것은 1 월 1 일 및 1 월 2 일이 실행됩니다. JobInstance는 실패했을때 여러번 돌릴 수 있으며, 성공시 생명주기가 끝나게 됩니다. EndOfDay 을 예로 들면 만약 01-01-2008에 돌리는 Job을 실패했을때, 같은 파라미터(01-01-2008 )로  돌리면 새로운 JobExecution 가 생성
  9. JobExecution 의 코드를 보면 상태, 시작시간, 종료시간이 있고 기타 필요한것들이 들어 있습니다. 정리하면 Job과 JobParameter가 JobInstance를 만들고 이게 실행되는데 실행되는 시도가 JobExecution1 입니다. 이때 JobInstance가 실패해서 한번 더 시도 하면 JobExecution2 가 생기고 JobExecution에 위에와 같은 메타 정보가 저장  모든 Job은 하나 이상의 단계로 이루어져 있습니다. Step에는 실제 배치 처리를 정의하고 제어하는 데 필요한 모든 정보가 들어 있습니다. Step Execution 하나의 step을 실행하는 한번의 시도. 시작시간, 종료시간,상태, 종료상태, commitCount, itemCount 의 속성을 가지고, Job 과 Step 그 연관관계와 개념
  10. Job execution 을 보고 예시와 내용들은 링크. 에러났을때 db에 저장됨 - 2번해결
  11. 이제 실제 Batch job을 돌려봅시다. Spring batch는 개발자가 비지니스 로직에 집중할수 있도록 많은 유틸리티 클래스를 제공합니다. EnableBatchProcessing은 jobBuilderFactory와 stepBuilderFactory 빈을 제공합니다.
  12. Job은 step 으로 이루어져 있고 Step은 reader, processor, writer로 이루어져 있습니다. JobInstance 는 Job + Job Parameter이기 때문에 Job Parameter를 자동으로 Increment 하기 위해서 사용합니다. Step에서는 한번에 쓸 데이터 양을 정의 합니다. 이 경우에는 한번에 최대 10개 item의 record를 기록합니다.”chunk”의 입력 및 출력 유형을 나타내며, ItemReader<~>및 ItemWriter<~> 와 일치합니다.
  13. chunk 트렌젝션 단위 - Chunk 중심 처리는 한번에 하나씩 데이터를 읽는 것이며, 트랜잭션 경계 내에서 작성되는 'chunks'를 생성하는 것을 의미합니다 - 하나의 item은 ItemReader에서 읽어지고, ItemProcessor에 처리되고, 집계된다.  - 읽은 항목의 수가 commit interval과 일치하는 경우에는, chunk을 거쳐 ItemWriter를 통해 쓰여지고, 트랜잭션이 커밋 됩니다.
  14. Step은 items를 읽고 쓰는데 있어서 트랜잭션 매니져를 이용해 주기적으로 커밋을 수행한다. Commit-interval이 1이라면 하나의 아이템들은 개별적으로 커밋이 수행될 것이다. 그러나 많은 상황에서 트랜잭션을 열고 커밋을 수행하는 비용은 비싸다 출처: http://opennote46.tistory.com/82 [욱'S 노트]
  15. reader   –   sample-data에 있는 csv파일을 읽어서 하는 부분
  16. 1번단점 Reader csv-> db 해결
  17. 사진 수정 count 1 도 있어야함.
  18. job 에 걸린 listener를 보면 끝난 상태를 체크하는 부분을 JobExecution에서 status 를 가져오는것을 알수 있습니다.
  19. Job 은 배치 프로세스에서 캡슐화 되있는 entity이고 단순히 Step을 위한 컨테이너 projet에서 job은 xml이나 java base 컨피그 설정을 할 수 있습니다. JobLauncher로 작업을 실행하고 현재 실행중인 프로세스에 대한 메타 데이터를 JobRepository에 저장
  20. 1. Step 구성으로 수행한 결과 각 청크단위의 reading, processing, writing 과정이 분리된 쓰레드에서 수행된다. 즉, 처리시 순서를 보장하지 않으며 Chunk는 단일 쓰레드 수행과 비교해 item 들이 연속적이지 않다. 2. 스텝을 병렬로 수행. 3.병렬로 chunk 단위(각 slave들)을 동시에 수행 파티 셔닝에 대한 예제와 정확 이론. 멀티쓰레드로 돌아도 트렌젝션의 범위. 멀티스레드 환경의 트렌젝션 트렌젝션의 범위가 chunk이나 아니냐. 스레드가 job 단위로 도냐 step로 도냐 - 스레드가 job 단위로 돔 Parallel Step은 Job이 여러 Step으로 구성되어 있을 때 독립적으로 진행되어도 무관한 Step을 병렬처리 출처: http://marobiana.tistory.com/131 [Take Action]