Spring Batch 작업을 Kubernetes CronJob으로 병렬 처리할 때의 고려사항과 커넥션 오류 대응 전략

✅ 1. Spring Batch를 Kubernetes CronJob에서 병렬로 실행하려는 시나리오

  • 동일한 Spring Batch Job을 여러 CronJob에서 실행하되, JobParameters만 다르게 설정
  • 핵심은 Job 이름이 같아도 JobParameters가 다르면 충돌 없이 병렬 실행 가능하다는 점

✅ 2. HikariCP 경고: “Apparent connection leak detected”

  • 해당 경고는 단순 설정 때문이 아니라, 쿼리 실행 또는 커넥션 반환 지연이 실제로 존재한 경우 발생
  • leak-detection-threshold는 연결을 끊지 않고 경고 로그만 출력

✅ 3. MyBatis 쿼리가 길어질 때 INSERT 타임아웃 처리

  • <foreach>로 n만 건 대량 insert 시에는 default-statement-timeout 또는 @Options(timeout = X)을 활용해 타임아웃 예외 발생 가능
  • 추가로 chunk 단위로 나누어 삽입하면 안정성 향상
@Options(timeout = 5)
void insertMyData(@Param("list") List<MyDto> list);

✅ 4. 커넥션 오류 예외 예시 (Unknown thread id)

  • 발생 원인: RDS 또는 DB 서버가 커넥션을 이미 종료했는데, HikariCP는 해당 커넥션을 여전히 유효하다고 판단하고 재사용 시도
  • 대응:
    • keepalive-time, max-lifetime, validation-timeout 등 HikariCP 설정 조정
    • DB의 wait_timeout, interactive_timeout 확인

✅ 5. 기존 Step을 Partitioning Step으로 전환할 수 있는가?

  • 가능하지만 처리 기준(조회 조건)이 반드시 변경되어야 함
  • 기존 전체 데이터 처리 → 파티션 기준(ID, 날짜, ID 범위)으로 분할 처리
  • Partitioner를 이용해 각 파티션마다 Step 분기 처리 가능

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다