본문 바로가기

Java & Kotlin100

[Spring Batch] 스프링 배치 실행 - Flow 스프링 배치의 실행 - Flow FlowJob @Bean public Job batchJob() { return jobBuilderFactory.get("batchJob") .start(step1()) // step1이 성공한다면 step3 실행 .on("COMPLETED").to(step3()) // step1이 실패한다면 step2 실행 .from(step1()) .on("FAILED").to(step2()) .end() .build(); } Step을 순차적으로만 구성하는 것이 아닌 상태에 따라 흐름을 전환하도록 구성할 수 있으며 FlowJobBuilder에 의해 생성된다. Step이 실패하더라도 Job은 실패로 끝나지 않도록 해야 하는 경우 Step이 성공했을 때 다음에 실행해야 할 Step을 구.. 2022. 5. 28.
[Spring Batch] 스프링 배치 실행 - Step 스프링 배치 실행 - Step StepBuilderFactory @Bean public Step step1() { return stepBuilderFactory.get("step1") .tasklet((contribution, chunkContext) -> { System.out.println("step1 has executed"); return RepeatStatus.FINISHED; }) .build(); } StepBuilder를 생성하는 팩토리 클래스, get(String name) 메서드를 제공한다. StepBuidler Step을 구성하는 설정 조건에 따라 다섯개의 하위 빌더 클래스를 생성하고, Step 생성을 위임한다. TaskletStepBuilder TaskletStep을 생성하는 기본 .. 2022. 5. 28.
[Spring Batch] 스프링 배치 실행 - Job 스프링 배치의 실행 - Job JobBuilderFactory @Bean public Job job2() { return jobBuilderFactory.get("job2") .start(step1()) .build(); } JobBuilder를 생성하는 팩토리 클래스로서 get(String name)메서드를 제공한다. 위와 같이 get 메서드의 인자에 들어가는 String 값이 Job의 이름이 된다. JobBuilder @Bean public Flow flow() { FlowBuilder flowBuilder = new FlowBuilder("flow"); flowBuilder .start(step3()) .next(step4()) .end(); return flowBuilder.build(); } J.. 2022. 5. 28.
[Spring Batch] 스프링 배치 도메인 - Step, 나머지 스프링 배치의 도메인 - Step, 나머지 Step 스프링 배치에서 Step이란 Job을 구성하는 하나의 단계로, 실제 배치가 실행되는 처리를 정의하고 컨트롤하는데 필요한 모든 정보를 가지고 있는 도메인 객체이다. 배치 작업을 어떻게 구성하고 실행할 것인지 Job의 세부 작업을 Task 기반으로 설정하고 명세해 놓은 객체이다. 단순한 단인 테스크부터 입력, 처리, 출력과 관련된 비즈니스 로직을 포함하는 모든 설정을 담고 있다. 모든 Job은 하나 이상의 Step으로 구성된다. Step의 기본 구현체 TaskletStep: 가장 기본이 되는 클래스, Tasklet 타입의 구현체들을 제어한다. PartitionStep: 멀티 스레드 방식으로 Step을 여러 개로 분리해서 실행한다. JobStep: Step .. 2022. 5. 28.
[Spring Batch] 스프링 배치 도메인 - Job 스프링 배치의 도메인 - Job Job Job이란? 스프링 배치의 하나의 배치를 뜻한다. 예) API 서버의 접속 로그 데이터를 통계 서버로 옮기는 배치 - Job Configuration을 통해서 생성되는 객체 단위로, 배치를 어떻게 구성하고 실행할 것인지 전체적으로 설정하고 명세해 좋은 객체이다. 배치 Job을 구성하기 위한 최상위 인터페이스이며, 스프링 배치가 기본 구현체(org.springframework.batch.core.Job)를 제공한다. 여러 Step을 포함하고 있는 컨테이너로 반드시 한개 이상의 Step으로 구성해야 한다. SimpleJob 순차적으로 Step을 실행시키는 Job FlowJob 특정한 조건과 흐름에 따라 Step을 구성하여 실행시키는 Job Flow 객체를 실행시켜서 작.. 2022. 5. 28.
[Spring Batch] 스프링 배치의 DB 스키마 스프링 배치의 DB 스키마 스프링 배치는 DB에 메타데이터를 저장하고, 관리한다. 스프링 배치 메타 데이터 스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들(Job, Step, JobParameters 등)의 정보들을 저장, 업데이트, 조회할 수 있는 스키마를 제공한다. 과거와 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 일목요연하게 관리함으로써 배치운용에 있어 리스크 발생시에 빠르게 대처할 수 있다. DB와 연동할 경우 필수적으로 메타 테이블이 생성 되어야 한다. DB 스키마 제공 /org/springframework/batch/core/ 디렉토리에 schema-??.sql형식으로 DB유형별 기본 DB 스키마가 제공된다. 스키마 생성 설정 스키마 생성 방법 수동 생성 .. 2022. 5. 18.
[Spring Batch] 스프링 배치와 구성 스프링 배치와 구성 모든 프로그램에는 Batch가 거의 필수적인 요소이다. 따라서 Spring에서 제공하는 Spring Batch를 학습하게 되었다. 스프링 배치가 탄생한 이유 스프링 배치는 자바기반 표준 배치 기술의 부재에서 시작되었다. 배치 처리에서 요구하는 재사용 가능한 자바 기반 배치 아키텍처 표준의 필요성이 대두되면서 만들어졌다. 배치 핵심 패턴 배치의 핵심적인 패턴은 Read, Process, Write로 구성되어 있다. Read: 데이터베이스, 파일, 큐에서 다량의 데이터를 조회한다. Process: 특정 방법으로 데이터를 가공한다. Write: 데이터를 수정된 양식으로 다시 저장한다. 배치 시나리오 배치 프로세스를 주기적으로 커밋 동시 다발적인 Job의 배치 처리, 대용량 병렬 처리 실패 .. 2022. 5. 18.
[QueryDSL] gradle querydsl 설정하기 gradle querydsl 설정하기 springboot 프로젝트에 querydsl을 설정하면서 기존 설정방식이 조금 효율적이지 못하며, 자동화의 필요성을 느껴 개선하였다. 기존 방식 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { ... id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" ... } dependencies { ... implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}" ... } ... def queryds.. 2022. 5. 15.
[QueryDSL] 페이징 연동하기 페이징 연동하기 Spring Data JPA에서 Page와 Pageable을 이용하고, QueryDSL을 이용하여 페이징을 사용해보자. 가장 효율적인 방법 이전까지의 페이징 방법중 하나는 fetchCount()와 fetchResult()를 이용하는 방법이였다. 하지만 이는 단순히 count 처리하는 용도이기 때문에 QueryDSL에서는 이를 지원하지 않기로 결정했다고 한다. 따라서 count와 result를 더 효율적으로 이용하는 방법을 사용하자. List content = queryFactory .select( new QMemberTeamDto( member.id.as("memberId"), member.username, member.age, team.id.as("teamId"), team.name.a.. 2022. 5. 15.