Spring Batch 성능 최적화, 특히 단건 API 기반 구조에서의 병목 현상은 많은 실무 개발자들의 고민입니다. 외부 API를 통해 데이터를 조회하고 이를 DB에 반영하는 구조라면, 수만 건의 데이터를 처리하는 데 수시간이 걸리기도 합니다.
상황: 단건 API + 대량 데이터, 어떻게 처리할 것인가?
당신의 배치 잡이 하루 종일 돌아간다면, 아마 이런 구조일지도 모릅니다.
수천~수만 개의 엔티티를 DB에서 읽어오고,
각각 외부 API를 호출해 상태를 확인하고,
변경된 내용을 하나하나 업데이트한다면?
예를 들어, 가맹점 상태를 OPEN/폐업으로 분류해 최신화해야 하는 작업이 있다고 해봅시다. 그런데 외부 API는 단건 API만 존재하고, 평균 응답 시간은 150ms.
이 구조에서 10만 건을 처리하려면? JPA 단일 쓰레드 기반으로는 무려 260분(4시간 이상)이 소요됐습니다. 성능 병목은 명확합니다: I/O 지연과 쿼리 수입니다.
해결: 세 가지 방식의 성능 개선 전략
이 강의에서는 같은 기능을 3가지 방식으로 개선해가며, 성능을 어떻게 튜닝할 수 있는지 실전 예제로 보여줍니다.
1. 기본 JPA Writer 방식
– Spring Batch의 ItemProcessor
에서 하나씩 외부 API 호출
–ItemWriter
에서 하나씩 업데이트 실행 (QueryDSL)
– 병목 포인트: 총 API 호출 수 = row 수, update 쿼리도 row 수만큼 발생
2. RxKotlin 병렬 처리 Writer
– ItemProcessor
제거 → Writer
에서 Rx 기반으로 병렬 API 호출
– 10개 스레드로 API 요청 병렬화 → 전체 처리 시간 대폭 단축
– 여전히 row 수만큼 update 쿼리 실행됨
3. RxKotlin + Bulk Update Writer
– 병렬 처리 후 StoreStatus
기준으로 그룹화
– 각 그룹별로 ID 리스트 묶어서 WHERE IN
쿼리로 한 번에 업데이트
– DB와의 통신 횟수는 최대 2회로 축소 → I/O 병목 해소
📈 성능 비교 결과
Rows | ChunkSize | JPA Writer | Rx Writer | Rx + Bulk Writer |
---|---|---|---|---|
100 | 20 | 16.2 sec | 2.3 sec | 2.0 sec |
1,000 | 200 | 156 sec | 17.7 sec | 16.0 sec |
10만 | 1,000 | 260분 | 28분 | 26분 |
💡 RxKotlin만 도입해도 약 9배,
Rx + Bulk 조합 시 최대 10배 이상 성능 개선이 가능했습니다.
실무 개발자에게 무엇이 중요한가?
단순히 성능이 개선됐다는 수치 이상의 의미가 있습니다.
이 강의는 다음과 같은 학습 포인트를 제공합니다:
- 단건 API밖에 없더라도 병렬 처리로 성능 개선이 가능하다
Processor
와Writer
의 역할을 재설계하는 것도 좋은 선택일 수 있다- 외부 API 호출과 DB update가 모두 I/O 병목이므로 통합 최적화가 핵심이다
- RxKotlin과 Spring Batch의 결합은 생각보다 훨씬 강력하다
지금의 배치 구조, 그대로 두고 계신가요?
단건 API여도, Spring Batch 성능은 확실히 개선할 수 있습니다.
병목 분석 → 아키텍처 개선 → 성능 수치 검증까지, 실전 흐름을 따라가는 이 강의를 추천드립니다.
Spring Batch 성능 최적화를 위한 실전 방법론을 코드와 함께 자세히 안내합니다.
👉 Spring Batch 성능 최적화 강의 바로가기