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

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

flex
flex
2026년 8월 25일

두줄요약

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

문제 상황

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

원인 분석

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

해결 방법

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

다음 읽기

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

프로모션 배치 k8s 이관기

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

SSG.COM
SSG.COM
데브옵스

댓글 0

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

댓글을 불러오는 중...