질문 시나리오 Spring Batch Tasklet 안에서 slaveMapper를 사용하는 다음 코드처럼: slaveTxSupport.read(() -> slaveMapper.selectSomething());slaveTxSupport.read(() -> slaveMapper.selectAnotherThing()); 이 경우: 이 궁금증에 대한 답을 정리합니다.
결론 요약 항목 설명 TransactionTemplate.read(…) 호출마다 트랜잭션 생성됨
맞습니다 각 트랜잭션은 독립적인 커넥션 사용
맞습니다 첫 번째 호출이 끝난 시점에 커넥션 반환되는가
반환됨 더 읽기
Spring Batch에서 slave DB 커넥션 반환 문제와 MyBatis + Hikari 트랜잭션 실전 가이드
문제 인식
핵심 원인
해결 방법
1. TransactionTemplate으로 slave 트랜잭션 분리 List<Data> list = slaveTxSupport.read(() -> slaveMapper.selectByCondition(paramA, paramB));
2. chunk 방식에서 ListItemReader에 적용 가능 @Bean@StepScopepublic ListItemReader<Entity> reader() { return new ListItemReader<>( slaveTxSupport.read(() -> mapper.selectList(param)) );}
3. 커넥션 반환 여부 확인
MyBatis Interceptor에서 커넥션 더 읽기
Spring Batch에서 다중 DataSource 환경에서의 커넥션 누수 방지와 안정적인 트랜잭션 처리 방법
문제 배경 대규모 배치 시스템에서 master/slave로 분리된 DB 환경을 사용하는 경우,하나의 Step 내에서 slave로부터 읽고, master에 쓰는 구조가 필요하다.그러나 잘못된 트랜잭션 구성으로 인해 slave의 커넥션이 반환되지 않고 누수(leak)되는 문제가 발생할 수 있다.
해결 전략
핵심 코드 예시 ① 트랜잭션 분리용 유틸 컴포넌트 @Componentpublic class SampleSlaveTransactionSupport { private 더 읽기
JVM Heap 지정 후에도 OutOfMemoryError가 발생하는 이유
문제 요약 Pod에 10Gi 제한 설정 및 JVM에 -Xms4g -Xmx6g 설정을 했음에도 불구하고 heap 메모리 부족으로 OOM 발생 원인 분석 해결 방안 일반적으로 다음 비율이 안전: Memory Limit 최대 Xmx 권장 값 (안전 범위) 10Gi -Xmx7g 또는 -Xmx8g 16Gi -Xmx12g 정도까지 20Gi -Xmx16g까지도 가능
추천 세팅 (10Gi 제한 더 읽기
Spring Batch 대용량 S3 파일 다운로드 중 OutOfMemoryError 분석
문제 요약 Tasklet 내에서 S3Client.downloadFile() 호출 중 내부적으로 Apache Commons IO의 IOUtils.toByteArray(InputStream) 사용이 대량 메모리를 점유하며 OOM 발생 원인 분석 개선 방안
Spring Batch Tasklet에서 예외 발생 시 Slave 커넥션 반환 실패 원인 분석
문제 요약 Spring Batch Tasklet 내부에서 슬레이브(readOnly) DataSource를 통해 조회를 수행 중 예외 발생 시, PlatformTransactionManager의 rollback 처리 후 커넥션이 반환되지 않는 문제가 발생하였습니다. 원인 분석 개선 방안 또는 명시적 반환 방식:
브라우저 CORS 오류 해결: jsPDF CDN 로드 시 발생하는 문제와 올바른 사용법
jsPDF 사용 시 발생하는 CORS 오류와 해결 방법 외부 라이브러리인 jsPDF를 활용해 PDF 파일을 생성하려 할 때, 다음과 같은 CORS 오류가 발생한 경험이 있으신가요? 이 오류는 단순히 스크립트를 잘못 불러온 문제가 아니라, 브라우저의 보안 정책(CORS 정책)에 의해 외부 스크립트 로딩 방식이 잘못되었을 때 발생합니다. 오류 원인 분석 브라우저는 보안을 더 읽기
Kubernetes CronJob 실패 원인 분석 및 해결: [BackoffLimitExceeded] 에러 대응법
Kubernetes CronJob 실행 실패: [BackoffLimitExceeded] 원인과 해결 문제 현상 Rancher UI 또는 kubectl describe job 명령어를 통해 아래와 같은 메시지가 확인됨: [BackoffLimitExceeded] Job has reached the specified backoff limit
원인 분석
디버깅 접근 kubectl run debug-batch –rm -it –image=123456789012.dkr.ecr.region.amazonaws.com/sample-image:tag — bash
해결 방법 1. Pod 삭제 더 읽기
Spring Batch 작업을 Kubernetes CronJob으로 병렬 처리할 때의 고려사항과 커넥션 오류 대응 전략
1. Spring Batch를 Kubernetes CronJob에서 병렬로 실행하려는 시나리오
2. HikariCP 경고: “Apparent connection leak detected”
3. MyBatis 쿼리가 길어질 때 INSERT 타임아웃 처리 @Options(timeout = 5)void insertMyData(@Param(“list”) List<MyDto> list);
4. 커넥션 오류 예외 예시 (Unknown thread id)
5. 기존 Step을 Partitioning Step으로 전환할 수 있는가?
EKS Kubernetes CronJob의 노드 분산 원리: 스케줄러 점수 기반 배치 완전 이해하기
본문 요약 (개요 흐름)
핵심 질문 EKS CronJob은 LB가 없이 어떻게 노드에 분산되는가?스케줄러는 어떤 기준으로 점수를 계산해 Pod을 배치하는가?
Kubernetes 스케줄러의 2단계 배치 알고리즘
점수 산정에 사용되는 주요 요소들 기준 설명 preferred nodeAffinity 특정 라벨 가진 노드를 선호 → 점수 +10~+100 podAntiAffinity 동일한 app의 Pod이 있으면 더 읽기