본문 바로가기

Spring Batch29

Spring Batch에서 socket was closed by server 발생시 시스템 이관을 진행하면서 각종 설정들이 기존 설정들과 달라 운영 테스트에서 여러 이슈를 만나게 되는데요. 최근 Spring Batch 환경 이관에서 기존 Job 들을 테스트 하던 중 다음과 같은 이슈를 만나게 되었습니다. Caused by: java.io.EOFException: unexpected end of stream, read 0 bytes from 4 (socket was closed by server) 기존에 잘 작동하던 Batch Job에서 왜 이런 문제가 발생하는지, 어떻게 하면 해결할 수 있는지 확인해보겠습니다. 1. 테스트 환경 상황 재현에 사용된 환경은 다음과 같습니다. Java 8 Spring Boot Data & Batch 2.3.2 Spring Batch 4.2.4 HikariC.. 2020. 9. 29.
ListItemReader 성능상 주의사항 Spring Batch를 사용하다보면 종종 ListItemReader 가 필요한 경우가 종종 있습니다. 물론 일반적으로는 ListItemReader를 사용하기 보다는 FlatFileItemReader, JdbcItemReader, MongoItemReader 등 Spring Batch에서 공식적으로 지원하는 ItemReader나 Custom ItemReader등을 만들어 사용하는 것을 추천합니다. 다만, 현재 Spring Batch의 ListItemReader에서는 성능 이슈가 하나 있는데요. 이번 시간에는 해당 성능 이슈가 무엇인지, 어떻게 해결할 수 있는지 간단하게 소개 드리겠습니다. 문제 상황 다음과 같은 테스트 코드를 구현해서 실행해봅니다. @ExtendWith(MockitoExtension.cl.. 2020. 9. 21.
Spring Batch ItemWriter 성능 비교 대규모 데이터를 처리하는 Spring Batch 에서 배치 성능은 중요한 요소입니다. 배치 성능에 있어서 튜닝 요소는 크게 2가지로 정리 될 수 있습니다. Reader를 통한 데이터 조회 Writer를 통한 데이터 등록/수정 Reader의 경우엔 Select Query 튜닝을 통한 개선 이야기가 많이 공유되어있습니다. Querydsl을 통한 Paging, No Offset 조회 방법은 이전 포스팅 을 참고하시면 됩니다. 반면 Writer의 경우에는 Reader에 비해서는 공유된 내용이 많지 않습니다. 그래서 이번 시간에는 Spring Batch와 JPA를 사용하는 경우에 어떻게 개선할 수 있을지 실제 비교를 해가며 정리하였습니다. 모든 테스트는 아래 환경에서 동일하게 수행하였습니다. AWS RDS Aur.. 2020. 7. 8.
Spring Batch ItemReader에서 Reader DB 사용하기 (feat. AWS Aurora) 일반적으로 서비스가 커지게 되면 DB를 여러대로 늘리게 됩니다. 이때 가장 첫 번째로 고려하는 방법이 Replication 입니다. 즉, 1대의 마스터 DB와 여러대의 Slave DB를 두는 것이죠. 데이터의 변경은 모두 마스터 DB에서만 이루어지고, SlaveDB들은 이 변경사항을 실시간으로 수신 받고, 성능 이슈가 심한 조회 요청에 대해서 처리합니다. (일반적인 웹 서비스에서는 조회와 등록/수정 비율이 80%:20% 정도입니다) 위와 같은 전략에 대해서는 이미 많은 자료가 인터넷에 있으니 참고해보시면 됩니다. 신입 개발자분들은 강대명님의 슬라이드를 꼭 참고하셔서 보편적인 웹 서비스 확장 전략에 대해서 꼭 인지하고 계셔야 합니다. 이번 글에서는 이렇게 Replication 상태에서 Spring Batc.. 2020. 6. 15.
Spring Batch에서 MultiThread로 Step 실행하기 일반적으로 Spring Batch는 단일 쓰레드에서 실행됩니다. 즉, 모든 것이 순차적으로 실행되는 것을 의미하는데요. Spring Batch에서는 이를 병렬로 실행할 수 있는 방법을 여러가지 지원합니다. 이번 시간에는 그 중 하나인 멀티스레드로 Step을 실행하는 방법에 대해서 알아보겠습니다. 1. 소개 Spring Batch의 멀티쓰레드 Step은 Spring의 TaskExecutor를 이용하여 각 쓰레드가 Chunk 단위로 실행되게 하는 방식입니다. Spring Batch Chunk에 대한 내용은 이전 포스팅에 소개되어있습니다. 여기서 어떤 TaskExecutor 를 선택하냐에 따라 모든 Chunk 단위별로 쓰레드가 계속 새로 생성될 수도 있으며 (SimpleAsyncTaskExecutor) 혹은 .. 2020. 4. 18.
JobParameter 활용 방법 (feat. LocalDate 파라미터 사용하기) Spring Batch에서는 Spring Environment Variables (환경 변수) 외에 Batch에서만 사용할 수 있는 JobParameter를 지원합니다. Spring Batch Scope와 Job Parameter 기존에 사용하던 방식으로는 불편한 점이나 단점이 많아 이를 어떻게 해결하면 좋을지에 대해 정리하게 되었습니다. 기존에 사용하던 방식은 무엇인지, 해당 방식에 어떤 단점이 있는지, 개선할 수 있는 방법은 무엇인지 등등을 정리해보았으니 Job Parameter를 사용하면서 불편하셨던 분들은 참고하시면 좋을것 같습니다. 기본적인 내용은 아래 호돌맨님의 블로그 글을 참고하시면 더욱 좋습니다. 호돌맨 - SpringBoot Batch에서 JobParameter로 받을 수 있는 Type .. 2020. 3. 30.