SlideShare a Scribd company logo
Spring Batch와 
함께 하는 
TDD 
정상혁 , KSUG 
(www.ksug.org)
목차 
1. 왜 Batch와 TDD인가? 
2. Spring Batch는 무엇을 해 주는가? 
3. 어떻게 응용했는가?
1. 왜 Batch와 TDD인가? 
1.1 발표 동기 
1.2 TDD 
1.3 Batch 
1.4 Batch + TDD
4 
1.1 발표 동기 
급하게 준비 
사진 출처 : http://blog.naver.com/khg2120/104069215
5 
1.1 발표 동기 
그리고 통합 주제에 대한 동경
6 
1.2 TDD 
나는 왜 TDD를 하는가? 
 재미, 집중 
 디버깅 시간을 줄이려고 
사진 출처 : http://www.flickr.com/photos/titicat/2986232393/ 
참고 : 내가 생각하는 TDD 
http://benelog.egloos.com/2766714
7 
1.2 TDD 
웹개발 TDD는 늘 아쉬웠다 
 Java 이외의 언어 부분은 검증 비용이 크다 
 SQL, javascript 
 UI 테스트는 어렵다 
 Java입장에서 html, javascript는 그냥 문자열이다 
 실행코드와 검증코드의 거리가 멀어 지기 쉽다 
 플래쉬, 브라우저 호환성등까지 검증하려면... 
 많은 오류는 javascript 같이 검증하기 어려운 곳에서 발생한다.
8 
1.3 Batch 
Batch 모듈은 
 복잡도가 높은 코드(super method가 흔함) 
 결과 확인과 재현에 큰 비용 
 오류 복구에 큰 비용 
 테스트 환경 구성의 어려움 
 결국 부분적인 테스트가 더욱 중요
9 
1.3 Batch 
어떤 Batch의 테스트 경험 
사진 출처 : http://www.imageafter.com/
10 
1.4 Batch + TDD 
Batch를 TDD로 개발한다면? 
 전체 코드를 돌리기 전에 더 일찍 오류 발견 
 덜 기다린다! 
 Java 테스트 코드만으로도 더 많은 영역을 검증 
 Testable한 구조로 만들다 보면 
 알아보기 쉬워 지고 
 변경에 유연 해짐 
 다양한 조건의 데이터를 쉽게 검증
2. Spring Batch는 무엇을 해 주는가? 
2.1 문제 해결 주제 
2.2 개별 작업 영역 
2.3 작업 처리 인프라 
2.4 활용예
12 
2.1 문제 해결 주제 
Batch 개발에서 이런 목소리가 들린다면? 
 XML을 읽는데 힙메모리가 모자라요 
 DB에 있는 건들을 메모리에 다 올릴 수가 없어요 
 배치가 도는 동안 테이블에 락이 걸려요 
 배치 실행 이력을 관리하고 싶어요 
 실패한 처리는 중간부터 다시 돌리고 싶어요 
 운영 환경에 올리기 전에는 테스트할 수 없어요
13 
2.1 문제 해결 주제 
Spring Batch 제공 기능 
 대용량 처리에 적합한 구조 
 Jdbc cursor, Jdbc batchUpdate 
 Stax, Stream방식의 파일 처리 
 구조 추상화 
 이력 관리 
 이벤트 처리 
 구성요소의 역할이 구분되어 있어서 테스트 코드 짜리에 좋다!
14 
2.2 개별 작업 영역 
Pipe & Filters 
 Bulk data processing을 위한 구조 
 Chunk 단위로 운반하면서 흘려 보냄
15 
2.2 개별 작업 영역 
구성 요소 
 Job 
 Step 
 Tasklet 
 ItemReader (Extract) 
 ItemProcessor (Transform) 
 ItemWriter (Load)
16 
2.2 개별 작업 영역 
처리 흐름 
 ItemProcessor는 선택적
17 
2.2 개별 작업 영역 
대표적인 ItemReader, ItemWriter 
 DB, XML, FlatFile 
자원 reader writer 
DB JdbcCursorItemReader JdbcBatchItemWriter 
Flat file FlatFileItemReader FlatFileItemWriter 
Xml file StaxEventItemReader StaxEventItemWriter
18 
2.2 개별 작업 영역 
대표적인 ItemReader, ItemWriter 
 DB, XML, FlatFile 
자원 종류 read/writer 자원 위치 
지정 
Raw data <-> Object 
DB 
JdbcCursorItemRead 
er 
datasource sql rowMapper 
JdbcBatchItemWriter datasource sql itemSqlSourceProvider 
flat file 
FlatFileItemReader resource  lineMapper 
FlatFileItemWriter resource  lineAggregator 
XML 
StaxEventItemReader resource 
fragmentRootElement- 
Name 
unmarshaller 
StaxEventItemWriter resource rootTagName marshaller
19 
2.3 작업 처리 인프라 
JobRepository, JobLauncher
20 
2.3 작업 처리 인프라 
JobRepository 테이블스키마
21 
2.4 활용예 
설정의 예 
<job id="ioSampleJob" 
job-repository="jobRepository > 
<step id="step1"> 
<tasklet> 
<chunk reader="gasStationDbReader" 
processor="gasStationNameFilter“ 
writer="gasStationXmlWriter“ 
commit-interval="10"/> 
</tasklet> 
</step> 
</job>
22 
2.4 활용예 
Demo
23 
3. 어떻게 응용했는가? 
3.1 JavaConfig 
3.2 실행 이력 
3.3 Spring Batch 구조 활용
24 
3.1 JavaConfig 
Xml설정의 단점 보안 
 @Configuration, @Bean 활용 
 Compile Validation 범위 증가 
 TDD와 궁합이 잘 맞았다 
 XML과의 관계를 잘 드러내기 위해서는 
 Component-scan은 좁은 범위로 
 Spring IDE의 support 
 Convention 
 BaseBallDbComponentFactory
25 
3.1 JavaConfig 
더 잘 읽히게 만들기 위해서는 
 XML과의 관계를 잘 드러내는 관례를 정하자 
 Component-scan은 좁은 범위로 
 Spring IDE의 support 
 이름과 package를 일관성 있게 
 BaseBallDbComponentFactory
26 
3.2 실행 이력 
운영에 도움이 됨 
 작업 진행상황을 보고 운영환경의 문제 파악을 더 빨리한 경험 
 건수로 데이터 변경 추이 파악 
 Log파일보다 일괄적인 view
27 
3.2 실행 이력 
Job의 성격에 따라 필요한지 고민 
 많은 Job이 사용하거나, Commit interval이 짧으면 병목 가능성 
 JobRepository를 정기적으로 삭제하는 배치를 돌리기도함 
 자주, 짧게 도는 Job에는 큰 이득이 없음 
 MapJobRepository 활용 
 테스트,단독 프로세스 
 Option이 생겼으면 
 실패한 건만 기록 
 Asynchronous JobRepository 
 https://jira.springsource.org/browse/BATCH-1524
28 
3.3 Spring Batch 구조 활용 
프레임웍만 쓴다고 다 응용되는 건 아니다. 
 처음 하는 사람은 Tasklet으로 많이 만듬 
 되도록 reader-writer 구조를 응용하는 것이 바람직 
 이력관리와 테스트 용이성 
 어떤 사람에게 배치는 1000라인짜리 메소드하나, 어떤 사람 
에게는 배치는 Job,Step,Reader, Writer 
 Transaction 처리를 혼동하는 사람이 많았다. 
 @Transactional을 습관적으로 넣음 
 특별한 경우가 아니면 Transaction은 Spring Batch에 맡기는 
것이 바람직
29 
정리 
Batch 개발의 피드백 속도 높이기 
 TDD 
 전체 실행 전에, 운영환경 전에 디버깅 
 적절한 모듈화가 되어야 가능 
 Spring Batch 기능 
 TDD에 용이한 구조 
 JavaConfig 를 접목시켜서 접목시켜서 Compile time 
validation을 높인 설정 가능 
 이력 확인 
 실행 환경의 상태를 더욱 빨리 파악

More Related Content

PPT
오픈 소스를 활용한 게임 배치 플랫폼 개선 사례
PPTX
Spring one참석기 ksug
PPTX
오픈소스를 활용한 Batch_처리_플랫폼_공유
PPTX
스프링 어플리케이션의 문제해결사례와 안티패턴
PPTX
Ahea Team Spring batch
PDF
03.실행환경 교육교재(배치처리)
PDF
Spring Boot 1
PDF
Spring Boot 2
오픈 소스를 활용한 게임 배치 플랫폼 개선 사례
Spring one참석기 ksug
오픈소스를 활용한 Batch_처리_플랫폼_공유
스프링 어플리케이션의 문제해결사례와 안티패턴
Ahea Team Spring batch
03.실행환경 교육교재(배치처리)
Spring Boot 1
Spring Boot 2

What's hot (20)

PDF
[오픈소스컨설팅]Spring 3.1 Core
PPTX
세미나 Spring mybatis
PDF
Springcamp spring boot intro
PDF
스프링 부트와 로깅
PDF
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
PDF
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
PDF
spring.io를 통해 배우는 spring 개발사례
PPTX
자바 메모리 릭 패턴
PDF
소프트웨어 개선 그룹(Sig) 개발 원칙
PDF
Java 기초
PDF
03.실행환경 실습교재(배치처리)
PPTX
Pinpoint spring_camp 2015
PPTX
HTTP web server 구현
PDF
overview of spring4
PPTX
자바9 특징 (Java9 Features)
PPTX
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
PDF
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
PDF
메이븐 기본 이해
PDF
Jpa more
PDF
백기선의 스프링 부트
[오픈소스컨설팅]Spring 3.1 Core
세미나 Spring mybatis
Springcamp spring boot intro
스프링 부트와 로깅
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
spring.io를 통해 배우는 spring 개발사례
자바 메모리 릭 패턴
소프트웨어 개선 그룹(Sig) 개발 원칙
Java 기초
03.실행환경 실습교재(배치처리)
Pinpoint spring_camp 2015
HTTP web server 구현
overview of spring4
자바9 특징 (Java9 Features)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
메이븐 기본 이해
Jpa more
백기선의 스프링 부트
Ad

Similar to Spring batch와 함께 하는 TDD (20)

PPTX
스프링 배치
PPTX
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
PDF
[Hello world 오픈세미나]open api client개발
PDF
11장 시스템
PDF
[D2]pinpoint 개발기
PDF
[오픈소스컨설팅]Performance Tuning How To
PPTX
[웹기반시스템 3조]e govframe 중간고사 제출 정리
PDF
01.개발환경 교육교재
PPTX
Spring boot DI
PPTX
모바일 Rpg 게임서버 제작
PPT
Better Scalable Flexible Soa Platform 0.8.0
PDF
2016 SINVAS DAY - 프레임워크 기반 운영 시스템 설계 모델 현행화 방안
PPTX
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
PDF
02.실행환경 실습교재(데이터처리)
PDF
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
PDF
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
PDF
[236] 카카오의데이터파이프라인 윤도영
PDF
Spring Boot 기초 코드랩 (2019-10-26)
PDF
개발이 테스트를 만났을 때(Shift left testing)
PPTX
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
스프링 배치
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
[Hello world 오픈세미나]open api client개발
11장 시스템
[D2]pinpoint 개발기
[오픈소스컨설팅]Performance Tuning How To
[웹기반시스템 3조]e govframe 중간고사 제출 정리
01.개발환경 교육교재
Spring boot DI
모바일 Rpg 게임서버 제작
Better Scalable Flexible Soa Platform 0.8.0
2016 SINVAS DAY - 프레임워크 기반 운영 시스템 설계 모델 현행화 방안
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
02.실행환경 실습교재(데이터처리)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
[236] 카카오의데이터파이프라인 윤도영
Spring Boot 기초 코드랩 (2019-10-26)
개발이 테스트를 만났을 때(Shift left testing)
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
Ad

Spring batch와 함께 하는 TDD

  • 1. Spring Batch와 함께 하는 TDD 정상혁 , KSUG (www.ksug.org)
  • 2. 목차 1. 왜 Batch와 TDD인가? 2. Spring Batch는 무엇을 해 주는가? 3. 어떻게 응용했는가?
  • 3. 1. 왜 Batch와 TDD인가? 1.1 발표 동기 1.2 TDD 1.3 Batch 1.4 Batch + TDD
  • 4. 4 1.1 발표 동기 급하게 준비 사진 출처 : http://blog.naver.com/khg2120/104069215
  • 5. 5 1.1 발표 동기 그리고 통합 주제에 대한 동경
  • 6. 6 1.2 TDD 나는 왜 TDD를 하는가?  재미, 집중  디버깅 시간을 줄이려고 사진 출처 : http://www.flickr.com/photos/titicat/2986232393/ 참고 : 내가 생각하는 TDD http://benelog.egloos.com/2766714
  • 7. 7 1.2 TDD 웹개발 TDD는 늘 아쉬웠다  Java 이외의 언어 부분은 검증 비용이 크다  SQL, javascript  UI 테스트는 어렵다  Java입장에서 html, javascript는 그냥 문자열이다  실행코드와 검증코드의 거리가 멀어 지기 쉽다  플래쉬, 브라우저 호환성등까지 검증하려면...  많은 오류는 javascript 같이 검증하기 어려운 곳에서 발생한다.
  • 8. 8 1.3 Batch Batch 모듈은  복잡도가 높은 코드(super method가 흔함)  결과 확인과 재현에 큰 비용  오류 복구에 큰 비용  테스트 환경 구성의 어려움  결국 부분적인 테스트가 더욱 중요
  • 9. 9 1.3 Batch 어떤 Batch의 테스트 경험 사진 출처 : http://www.imageafter.com/
  • 10. 10 1.4 Batch + TDD Batch를 TDD로 개발한다면?  전체 코드를 돌리기 전에 더 일찍 오류 발견  덜 기다린다!  Java 테스트 코드만으로도 더 많은 영역을 검증  Testable한 구조로 만들다 보면  알아보기 쉬워 지고  변경에 유연 해짐  다양한 조건의 데이터를 쉽게 검증
  • 11. 2. Spring Batch는 무엇을 해 주는가? 2.1 문제 해결 주제 2.2 개별 작업 영역 2.3 작업 처리 인프라 2.4 활용예
  • 12. 12 2.1 문제 해결 주제 Batch 개발에서 이런 목소리가 들린다면?  XML을 읽는데 힙메모리가 모자라요  DB에 있는 건들을 메모리에 다 올릴 수가 없어요  배치가 도는 동안 테이블에 락이 걸려요  배치 실행 이력을 관리하고 싶어요  실패한 처리는 중간부터 다시 돌리고 싶어요  운영 환경에 올리기 전에는 테스트할 수 없어요
  • 13. 13 2.1 문제 해결 주제 Spring Batch 제공 기능  대용량 처리에 적합한 구조  Jdbc cursor, Jdbc batchUpdate  Stax, Stream방식의 파일 처리  구조 추상화  이력 관리  이벤트 처리  구성요소의 역할이 구분되어 있어서 테스트 코드 짜리에 좋다!
  • 14. 14 2.2 개별 작업 영역 Pipe & Filters  Bulk data processing을 위한 구조  Chunk 단위로 운반하면서 흘려 보냄
  • 15. 15 2.2 개별 작업 영역 구성 요소  Job  Step  Tasklet  ItemReader (Extract)  ItemProcessor (Transform)  ItemWriter (Load)
  • 16. 16 2.2 개별 작업 영역 처리 흐름  ItemProcessor는 선택적
  • 17. 17 2.2 개별 작업 영역 대표적인 ItemReader, ItemWriter  DB, XML, FlatFile 자원 reader writer DB JdbcCursorItemReader JdbcBatchItemWriter Flat file FlatFileItemReader FlatFileItemWriter Xml file StaxEventItemReader StaxEventItemWriter
  • 18. 18 2.2 개별 작업 영역 대표적인 ItemReader, ItemWriter  DB, XML, FlatFile 자원 종류 read/writer 자원 위치 지정 Raw data <-> Object DB JdbcCursorItemRead er datasource sql rowMapper JdbcBatchItemWriter datasource sql itemSqlSourceProvider flat file FlatFileItemReader resource  lineMapper FlatFileItemWriter resource  lineAggregator XML StaxEventItemReader resource fragmentRootElement- Name unmarshaller StaxEventItemWriter resource rootTagName marshaller
  • 19. 19 2.3 작업 처리 인프라 JobRepository, JobLauncher
  • 20. 20 2.3 작업 처리 인프라 JobRepository 테이블스키마
  • 21. 21 2.4 활용예 설정의 예 <job id="ioSampleJob" job-repository="jobRepository > <step id="step1"> <tasklet> <chunk reader="gasStationDbReader" processor="gasStationNameFilter“ writer="gasStationXmlWriter“ commit-interval="10"/> </tasklet> </step> </job>
  • 23. 23 3. 어떻게 응용했는가? 3.1 JavaConfig 3.2 실행 이력 3.3 Spring Batch 구조 활용
  • 24. 24 3.1 JavaConfig Xml설정의 단점 보안  @Configuration, @Bean 활용  Compile Validation 범위 증가  TDD와 궁합이 잘 맞았다  XML과의 관계를 잘 드러내기 위해서는  Component-scan은 좁은 범위로  Spring IDE의 support  Convention  BaseBallDbComponentFactory
  • 25. 25 3.1 JavaConfig 더 잘 읽히게 만들기 위해서는  XML과의 관계를 잘 드러내는 관례를 정하자  Component-scan은 좁은 범위로  Spring IDE의 support  이름과 package를 일관성 있게  BaseBallDbComponentFactory
  • 26. 26 3.2 실행 이력 운영에 도움이 됨  작업 진행상황을 보고 운영환경의 문제 파악을 더 빨리한 경험  건수로 데이터 변경 추이 파악  Log파일보다 일괄적인 view
  • 27. 27 3.2 실행 이력 Job의 성격에 따라 필요한지 고민  많은 Job이 사용하거나, Commit interval이 짧으면 병목 가능성  JobRepository를 정기적으로 삭제하는 배치를 돌리기도함  자주, 짧게 도는 Job에는 큰 이득이 없음  MapJobRepository 활용  테스트,단독 프로세스  Option이 생겼으면  실패한 건만 기록  Asynchronous JobRepository  https://jira.springsource.org/browse/BATCH-1524
  • 28. 28 3.3 Spring Batch 구조 활용 프레임웍만 쓴다고 다 응용되는 건 아니다.  처음 하는 사람은 Tasklet으로 많이 만듬  되도록 reader-writer 구조를 응용하는 것이 바람직  이력관리와 테스트 용이성  어떤 사람에게 배치는 1000라인짜리 메소드하나, 어떤 사람 에게는 배치는 Job,Step,Reader, Writer  Transaction 처리를 혼동하는 사람이 많았다.  @Transactional을 습관적으로 넣음  특별한 경우가 아니면 Transaction은 Spring Batch에 맡기는 것이 바람직
  • 29. 29 정리 Batch 개발의 피드백 속도 높이기  TDD  전체 실행 전에, 운영환경 전에 디버깅  적절한 모듈화가 되어야 가능  Spring Batch 기능  TDD에 용이한 구조  JavaConfig 를 접목시켜서 접목시켜서 Compile time validation을 높인 설정 가능  이력 확인  실행 환경의 상태를 더욱 빨리 파악