문제 현상 EKS 환경에서 특정 CronJob 실행 시 다음과 같은 메시지와 함께 Pod가 Pending 상태에 머무르며 일정 시간 이후에야 실행되는 현상이 발생했습니다: 원인 분석 이 메시지는 Kubernetes 스케줄러가 다음과 같은 조건 중 하나 이상으로 인해 Pod를 즉시 스케줄하지 못했음을 의미합니다: 1. 리소스 부족 2. 스케줄 조건 미충족 (Affinity, Toleration 등) 더 읽기
Oracle 연결 오류: SQLRecoverableException – Invalid Operation, NOT Connected
1. 오류 메시지 요약 2. 발생 원인 3. 자주 발생하는 상황 4. 해결 방법 4.1 HikariCP 설정 강화 주의: max-lifetime은 DB의 세션 만료 시간보다 짧게 설정해야 합니다. 4.2 Oracle DB 세션 타임아웃 확인 4.3 운영 상 참고사항 5. 결론 해당 오류는 커넥션 풀에서 이미 종료된 커넥션을 닫는 과정에서 흔히 발생하는 더 읽기
개별 항목 실패 시 해당 트랜잭션만 롤백 (TransactionTemplate 사용)
🧩 문제 현상 🔍 원인 분석 🛠 해결 방법 🧪 예시 적용 코드 (1000건씩 커밋) ✅ 적용 후 기대 효과
DataSource 커넥션 반환 누락 또는 수동 반환 필요
🧩 문제 현상 🔍 원인 분석 🛠 해결 방법 ✅ 적용 후 기대 효과
Spring Batch Tasklet 트랜잭션 내 개별 항목 실패 시 커넥션 누수 방지 방법
문제 요약 Tasklet 내부에서 루프를 돌며 개별 항목을 처리할 때, 예외가 발생해도 catch 블럭 내에서 로그만 찍고 다음 항목으로 진행하는 방식은 커넥션 반환이 제대로 되지 않아 HikariCP 커넥션 풀에서 누수가 발생할 수 있음. 개선 방안 예제 코드 예외 발생 시 명시적 커넥션 반환 효과
Spring Batch Tasklet에서 slave DB를 여러 번 호출할 때 커넥션은 각각 반환되는가?
🔹 질문 시나리오 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 발생 원인 분석 개선 방안