🎯 Spring Batch 에서 QueryDSL 를 사용하는게 좋을까?Spring Batch 에서는 데이터를 읽을때(reader) 다양한 ItemReader 를 제공합니다. (ex JdbcCursorItemReader, JdbcPagingItemReader 등등..) 그렇다면 QueryDSL 을 이용한 ItemReader 도 지원하지 않을까해서 찾아봤지만,, 아쉽게도 지원하지 않습니다. 그래서 지금껏 Spring Batch 를 이용해 DB 에서 JPA 를 이용해 데이터를 조회할때 JpaPagingItemReader 를 사용해 쿼리를 직접 작성해줬습니다. 하지만, 직접 쿼리를 작성하는 만큼 타입 안정성, 자동완성, 컴파일 단계 문법체크 등의 이점을 가질 수 없었습니다. 간단한 쿼리라면 괜찮은데 보통 성능..
🎯 현재 JobParameter 사용방법현재 배치 프로젝트에서 JobParameter 로 LocalDate 로 형변환 방법입니다. 먼저 String 으로 날짜 정보를 받아온 뒤, set 에서 직접 LocalDate 로 변환해주고 있습니다. (JobParameter 에서는 LocalDate 타입을 직접 받을 수 없습니다.) ✅ DateParameter@Slf4j@Getter@NoArgsConstructorpublic class DateParameter { private LocalDate requestDate; @Value("#{jobParameters[requestDate]}") @DateTimeFormat(pattern = "yyyy.MM.dd") public void setReq..
🎯 정산 정보 CSV 파일 다운로드 API요구사항을 다시 한번 살펴보면 다음과 같습니다. 정산 결과 파일 생성 및 다운로드정산 결과 파일 생성: 정산 결과를 CSV 또는 Excel 파일로 생성하는 기능을 구현합니다. 파일에는 가게별 매출, 수수료, 최종 정산 금액 등이 포함되어야 합니다.파일 저장소 관리: 생성된 파일을 AWS S3 또는 로컬 파일 시스템에 저장하는 기능을 구현합니다.파일 다운로드 API: 저장된 정산 결과 파일을 다운로드할 수 있는 REST API를 제공합니다. 가게별로 파일을 조회하고 다운로드할 수 있어야 합니다. 요구사항에 맞춰 만들어야 하는 REST API 는 두개입니다. - 가게별 일매출 정산 정보를 CSV 로 다운받는 API- 가게별 월매출 정산 정보를 CSV 로 다운받는 A..
🎯 하루 매출을 계산하는 Job 구현해야 할 정산 로직 Job 요구 사항을 먼저 살펴보겠습니다.매출 집계: 가게별 총 매출, 환불 금액, 순매출을 계산합니다.수수료 계산: 각 가게에 적용되는 수수료(예: 결제 수수료, 플랫폼 수수료 등)를 계산하여 최종 정산 금액을 계산합니다.할인 처리: 특정 프로모션이나 할인 이벤트가 적용된 경우, 이를 반영하여 정산 금액을 계산합니다.이전 포스팅에서 구현한 NormalizedTransaction 테이블을 조회해 수수료 계산, 할인 이벤트 등을 적용한뒤, 각 가게별 총 매출, 환불 금액, 순 매출 을 집계해야 합니다. 💡 통계 관련 로직은 어떻게 구현하지 ? [ 통계 관련 로직 구현을 위한 아이디어 ]reader 와 processor 는 1건씩 조회해 처리 합니다..
🎯 배치 프로세스 설계 이전 포스팅에 적어둔 요구사항에 맞춰 위 두개의 Job 을 만들어보겠습니다. 요구사항이 무엇인지 궁금하신 분들은 아래 링크를 참고해주세용 https://comumu.tistory.com/118 [Spring Batch] Spring Batch 로 정산 시스템 만들어보기 (1)🎯 들어가기 앞서..이번 여름 방학때 Spring Batch 에 대해 공부해봤는데 이를 다시 한번 복습하고 깊게 공부하는 것을 목적으로 시작한 프로젝트 입니다.만들어야 하는 배치 프로그램 요구 사항을comumu.tistory.com 먼저 만들어야할 Job 을 분리해봤습니다.(1) 데이터 수집 및 전처리 Job : 거래 데이터를 DB 에서 수집해 데이터의 유효성을 검증하는 로직을 가집니다. 유효성이 검증이 통..
🎯 들어가기 앞서..이번 여름 방학때 Spring Batch 에 대해 공부해봤는데 이를 다시 한번 복습하고 깊게 공부하는 것을 목적으로 시작한 프로젝트 입니다.만들어야 하는 배치 프로그램 요구 사항을 정하고 이에 맞춰 하나씩 차근차근 해결해봅시다! 🎯 요구 사항## 🎯 Spring Batch 를 이용한 정산 시스템 프로젝트----```배달 서비스(배달의 민족, 요기요)를 참고해 관리자(Admin)와 가게 업주(Owner)의 주문 정보와 정산 정보를 조회하고 관리하는프로그램입니다.대용량 데이터 처리를 위해 ```###⚒️ 기술 스택----**Backend** : `Spring Boot`, `JPA`, `QueryDSL` **Database** : `MySQL` **Frontend** : `Thy..
🎯 통합 테스트Spring Batch 를 이용한 Job 에 대한 통합 테스트 구현방법에 대해 알아보겠습니다. (단위 테스트는 추후 포스팅에서 다루겠습니다.)처음 배치 프로그램에 대한 테스트 코드를 작성한만큼 삽질도 정말 많이해서 이 글을 본 여러분들은 그러지 않으셨으면 좋겠습니다 ㅜ스프링 버전은 3.x.x, Spring Batch 는 5.x.x, 테스트 코드는 Junit 5 를 사용했습니다. 구현한 Job 코드는 다음과 같습니다.🎯 Spring Batch 코드 ✅ CreateDateJobParameterpackage study.batch.parameters;import lombok.Getter;import lombok.NoArgsConstructor;import lombok.extern.slf4j.S..
🎯 요구 사항 구현해야하는 배치 프로그램은 다음과 같습니다. 주문 내역을 조회 후 "특정 날짜" 에 해당 하는 주문들을 별도의 테이블에 저장하는 프로그램을 만들어주세요! 라는 요구사항이 있다고 가정하고 한번 예제 코드를 만들어 보겠습니다. 🎯 예제 코드 구현 ✅ Orderpackage study.batch.entity;import jakarta.persistence.*;import lombok.Getter;import lombok.Setter;import java.time.LocalDateTime;import java.util.List;@Entity@Setter@Getter@Table(name = "OrderTable")public class Order { @Id @GeneratedVa..
🎯 예제 코드 만들어보기저번 포스팅에선 학습한 내용을 기반으로 배치 프로세스를 만들어보겠습니다. (Spring Batch 5) https://comumu.tistory.com/113 [Spring Batch] Chunk 와 ItemReader & ItemProcessor & ItemWriter🎯 Chunk 란 무엇일까 ?Spring Batch 에서 Chunk 지향처리 (Chunk-Oriented Oricessing) 는 대용량의 데이터를 효율적으로 처리하기 위한 방법입니다. 데이터 처리 작업을 읽기, 처리, 쓰기 세 단계로 나눈 뒤comumu.tistory.com 먼저 그전에 배운 내용을 간단히 정리하면 Spring Batch 는 Chunk 지향 처리를 합니다. 즉, 한 번에 하나씩 데이터를 읽어 C..
🎯 Chunk 란 무엇일까 ?Spring Batch 에서 Chunk 지향처리 (Chunk-Oriented Oricessing) 는 대용량의 데이터를 효율적으로 처리하기 위한 방법입니다. 데이터 처리 작업을 읽기, 처리, 쓰기 세 단계로 나눈 뒤 일정한 크기(Chunk) 로 데이터를 나눠 처리 합니다. 이러한 처리 방식은 메모리 사용을 최적화 하고, 대규모 데이터 처리에서 성능을 향상시킬 수 있습니다. Chunk 처리 순서는 다음과 같습니다. (1) ItemReader 에서 한번의 아이템을 읽고 읽은 아이템을 ItemProcessor 로 가공합니다.(2) 읽어진 아이템은 Chunck 라는 단위로 쌓이고, 정의된 Chunk 사이즈만큼 쌓이게 되면 ItemWriter 로 일괄 전달됩니다.(3) 트랜잭션 작..