Ahea Team Spring batch
-
Upload
sunghyun-roh -
Category
Software
-
view
142 -
download
8
Transcript of Ahea Team Spring batch
SPRING BATCHAHEA 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 LAUNCHERSPRING BATCH DOMAIN
JobInstance = job + jobParametersJobExecution 은 한번 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/scheduling.html
스프링 배치와 전자전부 프레임워크 : http://open.egovframe.go.kr/nforges/information/filearchive/6179/.do
스프링 배치 이점 : https://groups.google.com/forum/#!topic/ksug/9FMlJaE-zKU
스프링 배치 vs DB 프로시저 : https://groups.google.com/forum/#!topic/ksug/vznlOZarb3s
대규모 배치시스템 성공적인 구축 전략 : https://www.kodb.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=135&dbnum=128484&mode=detail&type=techreport