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 분기 처리 가능