Ahea Team Spring batch

35
SPRING BATCH AHEA STUDY

Transcript of Ahea Team Spring batch

Page 1: Ahea Team Spring batch

SPRING BATCHAHEA STUDY

Page 2: Ahea Team Spring batch

LEGACY BATCH PROBLEM

[A] 개발자의 배치 개발 일상 .

배치 통계를 위한 변수를 할당하는 코드 추가

트래픽 증가

배치 개발 개발중 에러발생 - 로그추가

Page 3: Ahea Team Spring batch

[A] 씨의 일을 인수인계 받은 [B] 개발자

로직이 어디있지 ?

새벽에 도는 배치가 실패

LEGACY BATCH PROBLEM

Page 4: Ahea Team Spring batch

기존 배치 개발의 문제점 1. 읽 어 오 는 데 이 터 형 태 의 변 화 에 대 응 하 기 힘 들 다 . (CSV -> DB)2. DB 에 한 꺼 번 에 COMMIT 되 는 건 수 가 너 무 많 았 다 .( 트 래 픽 증 가 )3. 배 치 통 계 를 위 한 변 수 를 할 당 하 고 로 깅 하 는 코 드 추 가 .4. 유 지 보 수 가 힘 들 다 . ( 비 지 니 스 로 직 어 디 있 는 거 지 ?)5. 실패 했을때 후 처리가 부족했다 .(B 씨 새벽에 배치가 실패 )

LEGACY BATCH PROBLEM

Page 5: Ahea Team Spring batch

ABOUT SPRING BATCH

SPRING BATCH != QUARTZ

Simple

Page 6: Ahea Team Spring batch

ABOUT SPRING BATCH

BATCH 란

Batch 는 일괄 처리를 뜻하는 용어 . Spring Framework 사용 편의성 기반 .스프링 배치는 스케줄러를 포함하지 않고 스케줄러 와 함께 작동 . 

Page 7: Ahea Team Spring batch

SPRING BATCH HISTORY

Spring batch 는 컨설팅 회사인 엑센츄어(Accenture) 의 실무 경험을 바탕으로 Spring IO 팀과 함께 개발을 했으며 , 이미 많은 회사에서 안정적으로 사용 중

Spring Batch 는 로깅 / 추적 , 트랜잭션 관리 , 작업 처리 통계 , 작업 재시작 , 건너 뛰기 및 자원 관리를 포함

ABOUT SPRING BATCH

Page 8: Ahea Team Spring batch

SPRING BATCH DOMAIN

JOB

Page 9: Ahea Team Spring batch

JOB LAUNCHERSPRING BATCH DOMAIN

Page 10: Ahea Team Spring batch

JobInstance = job + jobParametersJobExecution 은 한번 instance 가 시도 되는 job 개념 .

SPRING BATCH DOMAIN

Page 11: Ahea Team Spring batch

SPRING BATCH DOMAIN

Page 12: Ahea Team Spring batch

SPRING BATCH - TABLE

BATCH TABLE

Page 13: Ahea Team Spring batch

SPRING BATCH - TABLE

TABLE - SAMPLE DATA

Page 14: Ahea Team Spring batch

SPRING BATCH - TABLE

Page 15: Ahea Team Spring batch

SPRING BATCH - TABLE

Page 16: Ahea Team Spring batch

SPRING BATCH - DEMO

BATCH - SAMPLE DATA

Page 17: Ahea Team Spring batch

SPRING BATCH - DEMO

@ENABLEBATCHPROCESSING

- jobBuilderFactory 와 stepBuilderFactory 빈을 제공

- 생성 되는 TransactionManager 는 DataSourceTransactionManager 사용

Page 18: Ahea Team Spring batch

SPRING BATCH - DEMO

Page 19: Ahea Team Spring batch

firstName 과 lastname 을 대문자로 만들어주는 PersionItemProcessor

Item 처리할 데이터의 가장 작은 구성 요소

SPRING BATCH - DEMO

PROCESSOR - BUSSINESS LOGIC

Page 20: Ahea Team Spring batch

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 의 덩어리 .

Page 21: Ahea Team Spring batch

CHUNK 의 역할

Reader - Item 하나씩Writer - chunk 에 설정한 개수만큼

SPRING BATCH - CHUNK

Page 22: Ahea Team Spring batch

CHUNK 개수에 따른 속도 변화

chunk 10 일때수행시간 : 1 초

chunk 100 일때수행시간 : 0.1 초

SPRING BATCH - CHUNK

Page 23: Ahea Team Spring batch

CHUNK 와 TRANSACTION

SPRING BATCH - CHUNK

Page 24: Ahea Team Spring batch

CHUNK 의 동작방식 정리if> chunk 의 commit interval = 2

SPRING BATCH - CHUNK

Page 25: Ahea Team Spring batch

READER, WRITER 설정SPRING BATCH - READER, WRITER

Page 26: Ahea Team Spring batch

JDBCPAGING READER

paging 을 사용해서 대량의 데이터를 짤라 읽는 방식

SPRING BATCH - READER, WRITER

Page 27: Ahea Team Spring batch

pageSize 를 10 으로 set 후 sortKey 에 따라서 쿼리를 질의 .

RepeatTemplate 에 chunk 만큼 저장 후 Insert

if> chunk 의 commit interval = 5

SPRING BATCH - READER, WRITER

Page 28: Ahea Team Spring batch

이미 가져온 10 개중 5 개가 남아서 read 로 읽어오고 chunk 에 쌓고 5 개 되면 insert.

sortKey 에 따라서 order 를 걸고 그 다음부터 쿼리 질의 .

SPRING BATCH - READER, WRITER

Page 29: Ahea Team Spring batch

1.Reader 에 pageSize 만큼 쿼리 해온다 .2.reader 가 한 건씩 처리 .3.chunk 에 세팅한 만큼 쌓이면 write

JDBCPAGING READER - 정리SPRING BATCH - READER, WRITER

Page 30: Ahea Team Spring batch

SPRING BATCH LISTENER

JOBEXECUTIONLISTENER

Page 31: Ahea Team Spring batch

SPRING BATCH DOMAIN

정리

Page 32: Ahea Team Spring batch

SPRING BATCH SOLUTION

BATCH 를 통해 해결 .

1. 읽 어 오 는 데 이 터 형 태 의 변 화 에 대 응 하 기 힘 들 다 . (CSV -> DB)-> ITEMREADER 라는 인터페이스를 통해 비교적 쉬운 방식으로 접근 가능

2. DB 에 한 꺼 번 에 COMMIT 되 는 건 수 가 너 무 많 았 다 .-> CHUNK ORIENTED PROCESSING 으로 COMMIT 되는 양을 조절 할 수 있 다 .

3. 배 치 통 계 를 위 한 변 수 를 할 당 하 고 로 깅 하 는 코 드 추 가 .-> BATCH TABLE 에 통 계 에 필 요 한 값 들 이 알 아 서 저 장 된 다 .

4. 유 지 보 수 가 힘 들 다 . ( 비 지 니 스 로 직 어 디 있 는 거 지 ?)-> PRECESS, READ, WRITER 를 보면 어떻게 되있는지 쉽게 찾을 수 있다 .

5. 실 패 했 을 때 후 처 리 가 부 족 했 다 .-> EXECUTIONCONTEXT 라는 저장 공간에 저장된 정보를 활용해서 처리 .

Page 33: Ahea Team Spring batch

ETC

추가 - 대용량 배치 처리 병렬 수행

1. 멀티쓰레드 (Multi-threaded Step)2. Parallel Steps.3. 파티셔닝 (Partitioning)

Page 34: Ahea Team Spring batch

SPRING BATCH SOLUTION

AHEA STUDY 를 준비하면서… ..

Page 35: Ahea Team Spring batch

>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