티스토리 뷰

사실 첫번재 Spring Batch를 대형 프로젝트에 적용할 때는 기능적인 부족으로 많은 고생을 하였다. 그리고 Reader / Writer를 쓰는데는 한계가 많아서 거의 대부분의 배치가 Reader / Writer 없이 Tasklet (Reader / Writer가 없는 STEP) 에 모든 기능을 다 집어 넣는 것이였다.

 

1.

1.x 버전에서 대표적으로 아쉬웠던 것이 몇개 있는데 그 중 하나가 Item 기반의 처리 흐름이였다.

 

출처 : https://docs.spring.io/spring-batch/docs/2.0.x/reference/html/whatsNew.html

 

위의 그림이 Spring Batch 1.0의 처리 흐름인데 Item 위주로 되어 있다 보니 데이터를 읽고 쓰는 것이 껀껀이 이루어졌다. 만일 Commit Interval을 10으로 줬다면 Item을 10번 읽고 10번 Write 하는 일이 벌어진다. 이 부분을 개선한게 Spring Batch 2.0이다. 2.0에서는 Item이라는 개념이 아니라 Chunk 라는 개념으로 변경된다. 즉 하나의 데이터가 아니라 데이터의 큰 덩어리 (Chunk) 단위로 처리가 된다. 이는 배치 성능을 향상시키는데 매우 큰 역할을 한다.

 

출처 : https://docs.spring.io/spring-batch/docs/2.0.x/reference/html/whatsNew.html

 

그래서 변경된 그림이 위와 같다. Chunk 단위로 여러번 Item을 읽어서 한번에 저장한다. 그리고 내부적으로 JDBC Write 라면 addBatch 형태로 동작하기 때문에 DB 입장에서도 처리 속도가 빠르다.

 

2.

두번째로 1.x 버전에서 아쉬웠던 것이 Reader 와 Writer 사이에 데이터를 변환하기 위해서는 너무나 어려운 개발작업이 필요했다. 배치는 데이터를 읽어서 변경해서 저장하는것인데 변경하고 연산하는 작업을 넣야 하는 위치가 애매했다. 이를 위해 ItemTransformer가 있었지만 개념상으로는 애매모호한 위치에 있었다.

 

출처 : https://docs.spring.io/spring-batch/docs/2.0.x/reference/html/whatsNew.html

 

2.0에서 드디어 위와 같이 ItemProcessor가 추가되었고, 이를 STEP에 정의할 수 있게 되었다. 명시적으로 그리고 명확하게 데이터 처리에 대한 단계가 추가된 것이다.

 

3.

Spring Batch가 현재 4.0 까지 나왔고 5.0 이 개발되어 지고 있는데 1.0 -> 2.0 으로 업그레이드 될때 만큼 흥미있는 부분은 크지 않다. 3.x와 4.x의 주된 변경 내용을 확인해 보면 자바 버전 업그레이드, 연관된 Spring Framework의 버전 업그레이드 등이다. 그리고 XML, FILE, DB만 지원하던 ItemReader와 ItemWriter가 최신 트렌드에 맞게 지속적으로 추가되었다. 4.x에 추가된 목록은 다음과 같다.

 

  • AmqpItemReader - AmqpItemReaderBuilder

  • ClassifierCompositeItemProcessor - ClassifierCompositeItemProcessorBuilder

  • ClassifierCompositeItemWriter - ClassifierCompositeItemWriterBuilder

  • CompositeItemWriter - CompositeItemWriterBuilder

  • FlatFileItemReader - FlatFileItemReaderBuilder

  • FlatFileItemWriter - FlatFileItemWriterBuilder

  • GemfireItemWriter - GemfireItemWriterBuilder

  • HibernateCursorItemReader - HibernateCursorItemReaderBuilder

  • HibernateItemWriter - HibernateItemWriterBuilder

  • HibernatePagingItemReader - HibernatePagingItemReaderBuilder

  • JdbcBatchItemWriter - JdbcBatchItemWriterBuilder

  • JdbcCursorItemReader - JdbcCursorItemReaderBuilder

  • JdbcPagingItemReader - JdbcPagingItemReaderBuilder

  • JmsItemReader - JmsItemReaderBuilder

  • JmsItemWriter - JmsItemWriterBuilder

  • JpaPagingItemReader - JpaPagingItemReaderBuilder

  • MongoItemReader - MongoItemReaderBuilder

  • MultiResourceItemReader - MultiResourceItemReaderBuilder

  • MultiResourceItemWriter - MultiResourceItemWriterBuilder

  • Neo4jItemWriter - Neo4jItemWriterBuilder

  • RepositoryItemReader - RepositoryItemReaderBuilder

  • RepositoryItemWriter - RepositoryItemWriterBuilder

  • ScriptItemProcessor - ScriptItemProcessorBuilder

  • SimpleMailMessageItemWriter - SimpleMailMessageItemWriterBuilder

  • SingleItemPeekableItemReader - SingleItemPeekableItemReaderBuilder

  • StaxEventItemReader - StaxEventItemReaderBuilder

  • StaxEventItemWriter - StaxEventItemWriterBuilder

  • SynchronizedItemStreamReader - SynchronizedItemStreamReaderBuilder

3.0에서 추가된 기능이긴 한데 JobRepository로 SQLLite를 사용할 수 있게 되었다. 기존에는 오라클, MySQL등 관계형 데이터베이스가 반드시 필요한데, 소규모로 간단하 개발하거나 컨셉을 확인하는 용도로 활용하기에는 다소 큰 제약이였다. 특히 로컬 PC에 DB를 설치할 수 없는 폐쇄적인 환경에서 개발을 하거나, DBA에 의해 DB의 통제가 상당히 심한 곳의 경우 귀찮은 일이 많아지는데 SQLLite를 사용할 수 있게 됨으로 빠르게 배치 환경을 구성할 수 있게 되었다.

 

그 외에도 JOB을 정의하는 기능이 좀 더 풍부해 지고, XML이 아니라 자바 코드로 정의할 수 있는 기능 등이 개선되었다.

물론, 당연히 기반이 되는 Spring Framework의 버전 역시 업그레이드 되면서 해당 기능을 배치에서도 활용할 수 있기 때문에 개발자 입장에서는 이부분도 추가된 기능으로 볼 수 있다.

 

3. 

요즘 Spring Batch 버전을 업그레이드 준비하면서 많이 듣는 소리가 업그레이드하면 뭐가 좋아지냐이다. 현재 사용하고 있는 것이 2.1.8로 굉장히 오래된 것이긴 하지만 그 질문에 이것 저것 설명하자니 상대방도 뭐가 좋아진다는 건지 잘 이해 못하고 말하는 나는 구차하게 느껴질 때가 있다. 

이것 저것 정리 중인데, 명쾌하게 "아 진짜 좋아지겠네"라는 것이 떠오르면 블로그에 다시 적어 보겠다.

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함