

프로모션 배치 k8s 이관기
프로모션 배치를 Kubernetes로 이관한 과정과 운영 경험을 정리했습니다. Quartz 클러스터링, 관리 도구 보완, 종료·리소스 대응까지 다뤘습니다.


프로모션 배치를 Kubernetes로 이관한 과정과 운영 경험을 정리했습니다. Quartz 클러스터링, 관리 도구 보완, 종료·리소스 대응까지 다뤘습니다.


제휴 서비스 수집 시스템의 레거시 한계를 개선해 이벤트 기반, CQRS, Zero Payload 구조로 재설계했습니다.실시간 연동과 부하 분산을 통해 속도, 정합성, 운영 효율을 높인 과정을 공유했습니다.
![[SpringBatch 연재 11] Job 및 Step 마다 시작/종료시 특정 작업 수행하기](https://devocean.sk.com/thumnail/2024/12/26/95de41563306b50b08e112611c20b460ffdb998402563c664b36435efb370c61.png)

Spring Batch에서 Job과 Step의 시작/종료 시점에 실행할 작업을 Listener로 연결하는 방법을 설명했습니다. JobExecutionListener와 StepExecutionListener 등록 예시와 실행 로그 흐름을 함께 보여주었습니다.


정산 시스템을 PHP에서 Java 기반 Job Runner로 이관한 과정과 테크 스펙, 테스트, 마이그레이션 전략을 설명했습니다. 또한 URI 인코딩, Reader 페이징, timeout 등 트러블 슈팅 사례와 개선 효과를 정리했습니다.
![[SpringBatch 연재 10] 스프링배치 플로우 컨트롤 하기](https://devocean.sk.com/thumnail/2024/11/29/20eb6934476f3b2a7a750153647d9f049eb9df33462a0b597ee5acfb5d95cf82.png)

Spring Batch의 Flow Controller로 Step 실행 순서와 분기 방법을 설명했습니다. next, on, from, stop을 이용해 조건별 배치 흐름을 구성하는 방법을 정리했습니다.
![[SpringBatch 연재 09] 입맛에 맞는 배치 처리를 위한 Custom ItemReader/ItemWriter 구현방법 알아보기](https://devocean.sk.com/thumnail/2024/11/25/de4422be5fc2a9d400b19cf1e87f25e6a772ee7f8991e22a5d0cdb379ef570a3.png)

Spring Batch의 기본 Reader/Writer로 부족한 경우를 대비해 커스텀 구현 방법을 다뤘습니다. Querydsl 기반 페이징 Reader와 외부 서비스 호출 Writer를 통해 배치 유연성을 높였습니다.
쿠팡 파트너스
이 게시물은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
![[SpringBatch 연재 08] CompositeItemProcessor 으로 여러단계에 걸쳐 데이터 Transform하기](https://devocean.sk.com/thumnail/2024/10/22/28954aaf79694daff24eae993730b632354b0632bf2ddd2b26265d25e3f5f5ad.png)

Spring Batch의 CompositeItemProcessor로 여러 ItemProcessor를 순차 결합하는 방법을 소개했습니다. 이름·성별 변환과 나이 증가를 분리해 단계별 처리와 재사용성을 높였습니다.
![[SpringBatch 연재 07] MyBatisPagingItemReader로 DB내용을 읽고, MyBatisItemWriter로 DB에 쓰기](https://devocean.sk.com/thumnail/2024/10/15/769e978e524bb2bf4859b98bf774b70bfa7fbebf1c9329d0d3d4c927120be898.png)

Spring Batch에서 MyBatisPagingItemReader와 MyBatisBatchItemWriter를 사용하는 방법을 정리했습니다. XML 매퍼 분리와 청크 단위 페이징 처리로 DB 읽기와 쓰기를 구성했습니다.


Spring Batch 배치가 멈춘 원인을 트랜잭션 분리 실패와 스레드 풀 정책에서 찾았습니다. `CallerRunsPolicy`와 `@Transactional` 누락이 겹치며 경합이 발생했고, 설정 개선이 필요했습니다.
![[SpringBatch 연재 06] JpaPagingItemReader로 DB내용을 읽고, JpaItemWriter로 DB에 쓰기](https://devocean.sk.com/thumnail/2024/10/2/6fcf6f42a7137411e9966df3cba9520b9bbb7639fc4c76f85169f548440d0786.png)

Spring Batch에서 `JpaPagingItemReader`로 JPA 엔티티를 페이지 단위로 읽고 `JpaItemWriter`로 DB에 저장하는 방법을 소개했습니다. 또한 페이지 기반 처리의 누락 가능성과 JPA writer 설정상의 주의점도 함께 설명했습니다.
![[SpringBatch 연재 05] JdbcPagingItemReader로 DB내용을 읽고, JdbcBatchItemWriter로 DB에 쓰기](https://devocean.sk.com/thumnail/2024/10/28/c6ab0423c449accde8c39729cbb0156dfab20487cabc4d636480ad301c57ef85.png)

JdbcPagingItemReader로 DB 데이터를 페이지 단위로 읽고 파일로 저장하는 방법을 다루었습니다. JdbcBatchItemWriter로 파일 데이터를 DB에 빠르게 적재하는 구성도 함께 설명했습니다.
![[SpringBatch 연재 04] FlatFileItemReader로 단순 파일 읽고, FlatFileItemWriter로 파일에 쓰기](https://devocean.sk.com/thumnail/2024/9/12/31cc382ba3e9282b13135d64254e8873330baa69f9800415902e704003242ccf.png)

Spring Batch의 `FlatFileItemReader`와 `FlatFileItemWriter`로 CSV를 읽고 탭 구분 파일로 저장하는 방법을 다뤘습니다. 또한 헤더·푸터와 집계를 붙여 파일 출력 형식을 제어하는 예시를 소개했습니다.
![[SpringBatch 연재 03] SpringBatch ChunkModel과 TaskletModel](https://devocean.sk.com/thumnail/2024/9/25/74f021b3ab022e65b987c73f6d5ccd913ec5bddb4c51ac0f3fd213bab5b9bf43.png)

Spring Batch의 Chunk Model과 Tasklet Model 차이를 정리했습니다. 데이터 규모와 처리 방식에 따라 적절한 모델을 선택하는 기준을 설명했습니다.