EKS에서 Spring Batch를 HTTP로 트리거하다 만난 504 — ALB idle timeout 진단기

EKS에 올린 Spring Boot 서비스에서 특정 API 하나만 간헐적으로 504 Gateway Timeout을 냈다. 그 API는 관리자 화면에서 배치 작업을 즉시 실행하는 용도였다. 평소엔 잘 되다가 데이터가 많은 날만 실패했다. 결론은 ALB idle timeout 60초였다. 그런데 거기까지 가는 데 며칠이 걸렸다. 왜 돌아갔는지까지 포함해서 기록한다. 증상 마지막 세 가지가 힌트였는데, 처음엔 더 읽기

FCM 푸시 토큰, 언제 수집해야 하나 — 첫 화면 진입 vs 알림 동의 시점

하이브리드 앱(WebView + Spring Boot API)에 푸시 알림을 붙이면서 팀 안에서 한 번 정리하고 넘어가야 했던 질문이 있다. FCM 토큰은 언제 수집해서 서버에 저장해야 하는가? 구현 자체는 어렵지 않다. 문제는 “언제”다. 앱을 처음 켜자마자 받아둘지, 사용자가 알림에 동의한 시점에 받을지에 따라 서버의 데이터 모델과 개인정보 처리 관점이 달라진다. 결론은 동의 더 읽기

Spring @Scheduled 동작 조건과 반복 실행 문제 해결 가이드

@Scheduled가 동작하지 않는 이유와 설정 조건 Spring의 @Scheduled는 단순히 어노테이션을 붙이는 것만으로는 동작하지 않습니다. 다음과 같은 조건이 반드시 충족되어야 합니다. ✅ 필수 설정 💥 예외 사례 아래와 같이 파라미터가 있는 메서드는 @Scheduled에서 예외가 발생합니다: ✅ 올바른 예시 cron 표현식 정리 표현식 설명 */2 * * * * ? 매 2초마다 더 읽기

Oracle 연결 오류: SQLRecoverableException – Invalid Operation, NOT Connected

1. 오류 메시지 요약 2. 발생 원인 3. 자주 발생하는 상황 4. 해결 방법 4.1 HikariCP 설정 강화 주의: max-lifetime은 DB의 세션 만료 시간보다 짧게 설정해야 합니다. 4.2 Oracle DB 세션 타임아웃 확인 4.3 운영 상 참고사항 5. 결론 해당 오류는 커넥션 풀에서 이미 종료된 커넥션을 닫는 과정에서 흔히 발생하는 더 읽기

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 병렬 처리 시 “Scope ‘job’ is not active” 오류 해결 방법 (Spring Boot 3 + Batch 5)

Spring Batch 병렬 처리 시 발생하는 Scope ‘job’ is not active 오류와 해결 방법 Spring Boot 3 + Spring Batch 5 환경에서 병렬 Step 처리(TaskExecutorPartitionHandler)를 구현하던 중 다음과 같은 오류가 발생할 수 있습니다: Scope ‘job’ is not active for the current threadNo context holder available for job scope 해당 오류는 더 읽기

Spring Batch Stack Trace 분석: 예외 발생 위치와 전달 순서 이해하기

Spring Batch 기반의 배치 작업을 수행하던 중 다음과 같은 예외가 발생했습니다. com.sample.common.exception.CustomException: 테스트용 오류 발생 예시입니다. at com.sample.batch.job.ExampleJob.lambda$1(ExampleJob.java:174) … at com.sample.SampleBatchApplication.main(SampleBatchApplication.java:118) 해당 Stack Trace를 보면 ExampleJob.lambda$1 메서드에서 CustomException이 발생했으며, 이 예외는 Spring Batch 내부 프로세스를 거쳐 main() 메서드까지 전파되었습니다. 이를 이해하기 위해 다음과 같은 예외 전달 순서를 주목할 수 있습니다: 더 읽기

Kubernetes 환경에서 Spring Boot 배치 오류 전파 및 종료 코드 처리

1. 문제 상황 Spring Boot 기반 배치 애플리케이션을 실행하는 과정에서 오류 발생 시 CallRunner까지 예외 전파 및 종료 코드 처리가 제대로 이루어지지 않는 문제가 발생했다. 2. 원인 분석 3. 해결 방법 ✅ 1️⃣ 예외가 CallRunner까지 정상적으로 전파되도록 설정 ✅ 2️⃣ System.exit() 실행 위치 조정 ✅ 3️⃣ Kubernetes Pod 종료 상태 더 읽기