목록 보기
@Scheduled 한 줄로 버티다, 트리거를 밖으로 꺼낸 이야기
백엔드

@Scheduled 한 줄로 버티다, 트리거를 밖으로 꺼낸 이야기

flex
flex
2026년 8월 25일

두줄요약

@Scheduled 기반 배치가 Pod 확장 시 중복 실행과 유실 문제를 드러내자, 트리거를 애플리케이션 밖으로 분리했습니다. 실행은 선점과 체크포인트로 나눠 맡겨 여러 Pod가 작업을 분담하도록 전환했습니다.

문제 상황

  • @Scheduled 기반 배치가 대상 증가로 회차당 8분까지 늘어나 다음 주기와 겹치는 상황
  • Pod를 늘려도 처리량은 오르지 않고 같은 작업만 여러 번 실행되는 중복 문제
  • 스케줄이 애플리케이션 인스턴스에 묶여 있어 장애나 전체 종료 시 회차 유실 가능성 존재

원인 분석

  • 스케줄러와 실행 로직이 같은 Pod 안에 상주해 인스턴스 복제 시 스케줄도 함께 복제되는 구조
  • 멱등 처리나 락은 결과 중복은 줄이지만 작업 분산과 유실 방지는 해결하지 못하는 한계
  • 인스턴스 내부 스케줄 구조에서는 실행 주체 부재 시 회차를 붙들어 두지 못함

해결 방법

  • 트리거를 애플리케이션 밖의 스케줄러로 분리해 인스턴스 생명주기와 독립적으로 관리
  • 실행 단계는 공유 저장소 기반 선점으로 여러 Pod가 작업을 나눠 갖도록 구성
  • 체크포인트와 하트비트로 재개 좌표와 생존 상태를 관리해 실패 시 이어받기와 재시도 지원

다음 읽기

#Kubernetes 주제를 다룬 다른 회사 글

프로모션 배치 k8s 이관기

프로모션 배치를 Kubernetes로 이관한 과정과 운영 경험을 정리했습니다. Quartz 클러스터링, 관리 도구 보완, 종료·리소스 대응까지 다뤘습니다.

SSG.COM
SSG.COM
데브옵스

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...