본문 바로가기

Spring|Spring-boot/Spring Batch16

Batch 성능 개선 https://github.com/sungil-yu/exampleBatch/commit/777ca90ddd160d174c14f2474c4b30de8bfc22b0 order statistics & decider · sungil-yu/exampleBatch@777ca90 Show file tree Showing 10 changed files with 241 additions and 1,254 deletions. github.com 다음 코드를 기반으로 성능을 개선하는 포인트를 알아본다. Test를 위한 데이터를 만드는 SaveUserTasklet에서 더 많은 유저를 저장하도록 코드를 변경한다. @Bean public Job userJob() throws Exception { return this.jobBui.. 2023. 5. 29.
Spring Batch Test Code Spring Batch를 테스트를 하는 방법은 버전 별로 구성하는 환경이 다른 것 같지만 4.1 버전 이상을 사용할 것이기 때문에 다음과 같이 구성한다. testImplementation 'org.springframework.batch:spring-batch-test' 4.1 버전 이상에서는 @SpringBatchTest 어노테이션으로 자동 스캔을 통해 batch test의 필수 빈을 의존성 주입해 주는 것이다. 실제 @SpringBatchTest 어노테이션 클래스에서 import문만 봐도 빠르게 이해가 될 것이다. import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.batch.test.JobLauncherTestUt.. 2023. 5. 28.
Batch 예제 최근 Spring Batch에서 제공해 주는 itemWriter와 itemReader, itemProcessor를 통해 chunk 단위의 배치를 연습하는 과정을 진행했다. https://github.com/sungil-yu/exampleBatch GitHub - sungil-yu/exampleBatch: Initial Commit Initial Commit. Contribute to sungil-yu/exampleBatch development by creating an account on GitHub. github.com 이제 csv 파일을 읽고 processor를 필터로 사용하고, 아웃풋 데이터를 db에 저장하고 로그를 찍는 배치를 개발해 본다. 1. Job을 Bean으로 등록한다. 2. Step을 .. 2023. 5. 24.
Spring Batch 아키텍처 괌에서 어제 돌아와서 너무 피곤한 상태입니다. 오늘은 괌을 가기 전에 공부했던 스프링 배치에 대한 아키텍처에 대해 알아보고 왜 다음과 같이 설계되었는지도 알아보려고 합니다. 최근 소프트웨어 설계에 관한 책을 읽으면서 느끼는 것이 설계라는 것이 얼마나 힘들고 많은 고민을 통해 만들어진 것을 체감했습니다. 스프링에서도 여러 개발자가 머리를 맞대고 개발자에게 더 편리한 기능을 좋은 설계를 기반으로 제공하려고 많은 노력을 했기 때문에 이 노력을 엿볼 것입니다. 스프링 배치는 확장성과 diverse group of end users를 염두하고 설계되었다고 합니다. 이러한 설계는 Application, Batch Core, Batch Infrastructure의 세 가지 주요 구성요소를 통해 이야기될 수 있습니다... 2023. 5. 21.
Spring Batch about 15 minutes https://spring.io/guides/gs/batch-processing/ Getting Started | Creating a Batch Service A common paradigm in batch processing is to ingest data, transform it, and then pipe it out somewhere else. Here, you need to write a simple transformer that converts the names to uppercase. The following listing (from src/main/java/com/example/batchproces spring.io 스프링 배치 아키텍처를 살펴보기 전에 15분 걸린다는 간단한 스프링 배치 실.. 2023. 5. 14.
Batch란 Batch와 관련된 개발을 한 번도 한 적이 없습니다. 그래서 이를 공부해 보고 실무에서 언제 사용하면 좋을지 판단할 수 있도록 공부를 해보려고 합니다. 이 글의 카테고리는 Spring Batch인데, 이는 스프링 프레임워크에서 배치를 지원하기 위한 API들이 존재하고, 현재까지 실무에서 사용된 프로젝트들이 스프링 부트 애플리케이션으로 배포가 되어있어 Spring Batch 기술에 대해 알아보고 구현해보려고 합니다. 물론 배치는 다양한 기술로 구현할 수 있다는 것을 알고 있어야 합니다. 우선 배치라는 것은 일련의 작업을 한 번에 처리하는 방식을 말합니다. 즉 컴퓨터 자원을 최대한 사용하여 무거운 작업을 일괄로 처리하게 됩니다. 일반적으로 여러 작업을 하나의 그룹으로 묶고, 이 그룹을 한 번에 실행하여 작.. 2023. 5. 14.
Spring Batch JpaItemWriter JpaItemWriter는 JPA EntityManager를 이용해서 Entity를 DB에 write 해줍니다. jpa에 관한 설명은 깊게 하지 않고 간단히만 하겠습니다. 엔티티 매니저는 엔티티 매니저 팩토리에 생성합니다. 자바를 직접 다루지 않고 스프링을 사용하면 빈으로 등록이 되어 있어 직접 생성해 줄 필요가 없습니다. 이 엔티티 내부에는 영속성 콘텍스트가 존재합니다. 이 영속성 컨텍스는 엔티티 매니저를 통해서 접근할 수 있습니다. 영속성 콘텍스트는 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스와 같습니다. 1차 캐시, 동일성 보장, 트랜잭션을 지원하는 쓰기 지연, 지연 로딩 기능을 사용할 수 있는 것도 영속성 콘텍스트 때문입니다. 이 저장된 엔티티는 플러시 시점에 데이터베이.. 2021. 3. 6.
Spring Batch JdbcBatchItemWriter ItemReader는 다양한 매체의 아이템들을 읽을 수 있습니다. ItemWriter는 출력이 가능합니다. 이 JdbcBatchItemWriter는 jdbc를 사용해 db에 update, insert, delete 쿼리를 날릴 수 있습니다. 이름에 Batch가 있는 이유는 쿼리를 일괄 실행할 수 있기 때문입니다. 한 건씩 하는 것이아닌 bulk insert/update/delete를 할 수 있다는 것인데요 즉 여러개의 쿼리를 한 번에 직접 데이터베이스에 쿼리 하는 것입니다. 먼저 mysql설정을 조금 손봐야합니다. bulk연산을 사용하기 위해 url설정을 추가해 줍니다. jdbc-url: jdbc:mysql://127.0.01:3306/spring_batch?characterEncoding=UTF-8&s.. 2021. 3. 6.
Spring Batch ItemWriter FlatFileItemWriter를 이용해 CSV 파일에 데이터를 작성하는 연습을 합니다. 이 클래스는 데이터가 매핑된 객체를 파일로 write 합니다. 이 CSV 파일을 사용하기 위해선 BeanWrapperFiledExtractor클래스가 필요합니다. @Configuration @Slf4j public class ItemWriterConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; public ItemWriterConfiguration(JobBuilderFactory jobBuilderFactory, StepBuilderFactory step.. 2021. 3. 6.
Spring Batch ItemReader ItemReader는 배치에서 처리할 아이템을 만들거나 읽는 역할을 합니다. - 배치 대상 데이터를 읽기 위한 설정 : 파일, DB , 네트워크 등에서 읽기 위함이다. - Step에 ItemReader 기본 구현체 : file, jdbc, jpa, hibernate, kafka, etc.. ItemReader 인터페이스를 구현한 JpaCursorItemReader 와 JdbcCursorItemReader가 존재합니다. 이 구현체들은 ItemStream또한 구현하고 있습니다. ItemReader의 인터페이스입니다. ItemStream 인터페이스입니다. 아이템을 스트림 처리할 수 있게 도와줍니다. 매개변수는 Job과 Step의 상태를 저장하는 ExecutionContext인걸 확인할 수 있습니다. 이건 It.. 2021. 3. 6.