Ahea Team Spring batch
-
Upload
sunghyun-roh -
Category
Software
-
view
152 -
download
8
Transcript of Ahea Team Spring batch
![Page 1: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/1.jpg)
SPRING BATCHAHEA STUDY
![Page 2: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/2.jpg)
LEGACY BATCH PROBLEM
[A] 개발자의 배치 개발 일상 .
배치 통계를 위한 변수를 할당하는 코드 추가
트래픽 증가
배치 개발 개발중 에러발생 - 로그추가
![Page 3: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/3.jpg)
[A] 씨의 일을 인수인계 받은 [B] 개발자
로직이 어디있지 ?
새벽에 도는 배치가 실패
LEGACY BATCH PROBLEM
![Page 4: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/4.jpg)
기존 배치 개발의 문제점 1. 읽 어 오 는 데 이 터 형 태 의 변 화 에 대 응 하 기 힘 들 다 . (CSV -> DB)2. DB 에 한 꺼 번 에 COMMIT 되 는 건 수 가 너 무 많 았 다 .( 트 래 픽 증 가 )3. 배 치 통 계 를 위 한 변 수 를 할 당 하 고 로 깅 하 는 코 드 추 가 .4. 유 지 보 수 가 힘 들 다 . ( 비 지 니 스 로 직 어 디 있 는 거 지 ?)5. 실패 했을때 후 처리가 부족했다 .(B 씨 새벽에 배치가 실패 )
LEGACY BATCH PROBLEM
![Page 5: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/5.jpg)
ABOUT SPRING BATCH
SPRING BATCH != QUARTZ
Simple
![Page 6: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/6.jpg)
ABOUT SPRING BATCH
BATCH 란
Batch 는 일괄 처리를 뜻하는 용어 . Spring Framework 사용 편의성 기반 .스프링 배치는 스케줄러를 포함하지 않고 스케줄러 와 함께 작동 .
![Page 7: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/7.jpg)
SPRING BATCH HISTORY
Spring batch 는 컨설팅 회사인 엑센츄어(Accenture) 의 실무 경험을 바탕으로 Spring IO 팀과 함께 개발을 했으며 , 이미 많은 회사에서 안정적으로 사용 중
Spring Batch 는 로깅 / 추적 , 트랜잭션 관리 , 작업 처리 통계 , 작업 재시작 , 건너 뛰기 및 자원 관리를 포함
ABOUT SPRING BATCH
![Page 8: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/8.jpg)
SPRING BATCH DOMAIN
JOB
![Page 9: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/9.jpg)
JOB LAUNCHERSPRING BATCH DOMAIN
![Page 10: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/10.jpg)
JobInstance = job + jobParametersJobExecution 은 한번 instance 가 시도 되는 job 개념 .
SPRING BATCH DOMAIN
![Page 11: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/11.jpg)
SPRING BATCH DOMAIN
![Page 12: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/12.jpg)
SPRING BATCH - TABLE
BATCH TABLE
![Page 13: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/13.jpg)
SPRING BATCH - TABLE
TABLE - SAMPLE DATA
![Page 14: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/14.jpg)
SPRING BATCH - TABLE
![Page 15: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/15.jpg)
SPRING BATCH - TABLE
![Page 16: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/16.jpg)
SPRING BATCH - DEMO
BATCH - SAMPLE DATA
![Page 17: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/17.jpg)
SPRING BATCH - DEMO
@ENABLEBATCHPROCESSING
- jobBuilderFactory 와 stepBuilderFactory 빈을 제공
- 생성 되는 TransactionManager 는 DataSourceTransactionManager 사용
![Page 18: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/18.jpg)
SPRING BATCH - DEMO
![Page 19: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/19.jpg)
firstName 과 lastname 을 대문자로 만들어주는 PersionItemProcessor
Item 처리할 데이터의 가장 작은 구성 요소
SPRING BATCH - DEMO
PROCESSOR - BUSSINESS LOGIC
![Page 20: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/20.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/21.jpg)
CHUNK 의 역할
Reader - Item 하나씩Writer - chunk 에 설정한 개수만큼
SPRING BATCH - CHUNK
![Page 22: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/22.jpg)
CHUNK 개수에 따른 속도 변화
chunk 10 일때수행시간 : 1 초
chunk 100 일때수행시간 : 0.1 초
SPRING BATCH - CHUNK
![Page 23: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/23.jpg)
CHUNK 와 TRANSACTION
SPRING BATCH - CHUNK
![Page 24: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/24.jpg)
CHUNK 의 동작방식 정리if> chunk 의 commit interval = 2
SPRING BATCH - CHUNK
![Page 25: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/25.jpg)
READER, WRITER 설정SPRING BATCH - READER, WRITER
![Page 26: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/26.jpg)
JDBCPAGING READER
paging 을 사용해서 대량의 데이터를 짤라 읽는 방식
SPRING BATCH - READER, WRITER
![Page 27: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/27.jpg)
pageSize 를 10 으로 set 후 sortKey 에 따라서 쿼리를 질의 .
RepeatTemplate 에 chunk 만큼 저장 후 Insert
if> chunk 의 commit interval = 5
SPRING BATCH - READER, WRITER
![Page 28: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/28.jpg)
이미 가져온 10 개중 5 개가 남아서 read 로 읽어오고 chunk 에 쌓고 5 개 되면 insert.
sortKey 에 따라서 order 를 걸고 그 다음부터 쿼리 질의 .
SPRING BATCH - READER, WRITER
![Page 29: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/29.jpg)
1.Reader 에 pageSize 만큼 쿼리 해온다 .2.reader 가 한 건씩 처리 .3.chunk 에 세팅한 만큼 쌓이면 write
JDBCPAGING READER - 정리SPRING BATCH - READER, WRITER
![Page 30: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/30.jpg)
SPRING BATCH LISTENER
JOBEXECUTIONLISTENER
![Page 31: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/31.jpg)
SPRING BATCH DOMAIN
정리
![Page 32: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/32.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/33.jpg)
ETC
추가 - 대용량 배치 처리 병렬 수행
1. 멀티쓰레드 (Multi-threaded Step)2. Parallel Steps.3. 파티셔닝 (Partitioning)
![Page 34: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/34.jpg)
SPRING BATCH SOLUTION
AHEA STUDY 를 준비하면서… ..
![Page 35: Ahea Team Spring batch](https://reader036.fdocuments.net/reader036/viewer/2022062412/58ee35a51a28ab9e478b4603/html5/thumbnails/35.jpg)
>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