🧭 개요 2025년 3월 26일, AWS Aurora MySQL 환경에서 Signal 11로 인해 데이터베이스가 비정상 종료되는 장애가 발생했습니다. 이와 동시에 Spring Boot 기반의 배치 애플리케이션에서는 커넥션 풀 오류로 애플리케이션 구동 실패가 발생했으며, 이 글에서는 그 원인과 해결 방안을 상세히 정리합니다. ⏱ 장애 타임라인 요약 항목 시각 DB 다운 발생 2025-03-26 10:54:19 더 읽기
AWS
Spring Batch Kubernetes 종료 처리: graceful shutdown, shutdown hook, 컨테이너 runtime hang 완전 정복
Kubernetes 환경에서 sample-batch 시스템은 Java 기반의 Spring Batch Job을 실행하고 있으며, 안정적인 종료 처리가 매우 중요합니다. 특히 다음과 같은 요구사항을 만족해야 합니다: 이를 위해 다음 설정 및 코드 전략을 활용했습니다: ✅ 핵심 설정 yaml복사편집activeDeadlineSeconds: 180 terminationGracePeriodSeconds: 10 ✅ 코드 전략 요약 1. Shutdown Hook에서 Whatap 처리 및 Thread 정리 Runtime.getRuntime().addShutdownHook(new 더 읽기
Kubernetes CronJob 강제 종료 및 graceful shutdown 처리 방법 (Spring Batch + 모니터링 연동)
Kubernetes CronJob을 활용해 Java 기반 Spring Batch 작업을 수행하는 환경에서, 작업 시간이 초과되었을 때의 강제 종료 처리가 필요할 수 있습니다. 이를 위해 activeDeadlineSeconds를 활용하면 설정된 시간 초과 시 작업을 종료할 수 있습니다. 그러나 기본적으로 Kubernetes는 종료 시 SIGTERM을 먼저 보내고, 이후 terminationGracePeriodSeconds 동안 graceful shutdown을 기다립니다. 이 시간이 지나야 SIGKILL을 더 읽기
Kubernetes 환경에서 Spring Boot 배치 오류 전파 및 종료 코드 처리
1. 문제 상황 Spring Boot 기반 배치 애플리케이션을 실행하는 과정에서 오류 발생 시 CallRunner까지 예외 전파 및 종료 코드 처리가 제대로 이루어지지 않는 문제가 발생했다. 2. 원인 분석 3. 해결 방법 ✅ 1️⃣ 예외가 CallRunner까지 정상적으로 전파되도록 설정 ✅ 2️⃣ System.exit() 실행 위치 조정 ✅ 3️⃣ Kubernetes Pod 종료 상태 더 읽기
Spring Boot 비정상 종료 시 Kubernetes에서 CrashLoopBackOff 방지하는 방법
Spring Boot 애플리케이션을 Kubernetes 환경에서 실행할 때, 비정상 종료(System.exit(1)) 처리를 적절히 하지 않으면 두 가지 주요 문제가 발생할 수 있다. 이 문제는 Spring의 종료 프로세스를 올바르게 관리하지 않기 때문에 발생한다. 이를 해결하려면 비정상 종료 시에도 Spring의 컨텍스트 종료 이벤트(ContextClosedEventListener)를 정상적으로 실행하도록 설정해야 한다. 🚨 문제 원인 분석 1️⃣ IllegalStateException: ApplicationContext 더 읽기
Aurora MySQL·RDS MariaDB에서 락 대기 타임아웃과 트랜잭션 롤백 구분하기
내용 정정: 이전 글의 “Aurora MariaDB”는 서로 다른 엔진을 혼동한 표현입니다. Aurora는 MySQL·PostgreSQL 호환 엔진이며 RDS for MariaDB와 구분해야 합니다. 아래에서는 MySQL 계열 InnoDB의 락 대기와 롤백 범위를 설명합니다. 실제 운영 엔진·버전은 배포 환경에서 확인해야 합니다. AWS Aurora 공식 소개. 락을 기다리는 시간과 락을 보유하는 시간은 다릅니다 innodb_lock_wait_timeout은 다른 트랜잭션의 더 읽기
Aurora MySQL·RDS MariaDB에서 Spring Batch 강제 종료 시 롤백 확인하기
내용 정정: “Aurora MariaDB”는 정확한 엔진 명칭이 아닙니다. Aurora MySQL과 RDS for MariaDB를 구분하고, 아래 설명은 InnoDB 트랜잭션을 전제로 읽어야 합니다. AWS Aurora 공식 소개. Pod가 종료되면 즉시 롤백될까? autocommit=false 자체가 Pod 종료 감지 기능은 아닙니다. DB가 연결 종료를 감지하면 해당 세션의 미커밋 트랜잭션은 롤백 대상이 됩니다. 이미 커밋된 청크와 더 읽기
EKS CronJob에서 실행 시간이 지나면 자동으로 Pod 종료하는 방법
Kubernetes의 CronJob을 사용할 때, 실행 시간이 너무 길어지면 리소스를 낭비할 수 있습니다. 이를 방지하기 위해 activeDeadlineSeconds 옵션을 활용하면 일정 시간이 지나면 자동으로 Pod를 종료할 수 있습니다. ✅ activeDeadlineSeconds 옵션이란? activeDeadlineSeconds는 Job이 시작된 후 일정 시간이 지나면 강제 종료되는 기능입니다. 이를 설정하면, 지정된 시간이 초과되었을 때 Kubernetes가 자동으로 해당 Pod를 종료합니다. 더 읽기
쿠버네티스 CronJob의 CPU 리소스 설정 가이드
1. 개요 쿠버네티스에서 CronJob을 사용하여 주기적으로 실행되는 작업을 관리할 때, 적절한 리소스 설정이 필요합니다. 특히, CPU 사용량이 예측할 수 없이 변동되는 경우 requests.cpu와 limits.cpu를 설정하여 안정적인 동작을 보장할 수 있습니다. 이 문서는 CronJob에서 CPU 리소스를 설정하는 방법을 설명합니다. 2. CronJob 정의 및 리소스 설정 아래는 requests.cpu와 limits.cpu를 설정한 CronJob 예제입니다. 더 읽기
Rancher에서 CronJob Suspend 로그를 CloudWatch에 남기는 방법
Rancher를 통해 Kubernetes CronJob을 suspend: true로 변경했을 때, CloudWatch에 해당 로그가 남지 않는 경우가 발생할 수 있습니다. 반면, suspend: false는 정상적으로 기록될 수 있습니다. 이런 문제를 해결하기 위해 Rancher에서 로그를 남기는 방법을 정리하였습니다. 1️⃣ Kubernetes 이벤트에서 suspend 변경 확인 먼저, Kubernetes 자체에서 suspend 변경 이벤트가 기록되는지 확인해야 합니다. 이를 위해 더 읽기