단건 API로도 가능한 Spring Batch 성능 최적화: RxKotlin과 Bulk Update 실전 적용기

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밖에 없더라도 병렬 처리로 성능 개선이 가능하다
  • ProcessorWriter의 역할을 재설계하는 것도 좋은 선택일 수 있다
  •  외부 API 호출과 DB update가 모두 I/O 병목이므로 통합 최적화가 핵심이다
  • RxKotlin과 Spring Batch의 결합은 생각보다 훨씬 강력하다

지금의 배치 구조, 그대로 두고 계신가요?
단건 API여도, Spring Batch 성능은 확실히 개선할 수 있습니다.

병목 분석 → 아키텍처 개선 → 성능 수치 검증까지, 실전 흐름을 따라가는 이 강의를 추천드립니다.
Spring Batch 성능 최적화를 위한 실전 방법론을 코드와 함께 자세히 안내합니다.

👉 Spring Batch 성능 최적화 강의 바로가기

Facebook Comments