피드로 돌아가기
Distributed Scheduled Job Locking with Redis
Dev.toDev.to
Backend

Redis 분산 락과 Idempotency를 통한 중복 배치 작업 완전 제거

Distributed Scheduled Job Locking with Redis

Fathma Siddique2026년 6월 27일4intermediate

Context

단일 서버 환경에서 10대의 서버로 Scale-out 하며 동일한 Scheduled Job이 중복 실행되는 문제 발생. 이로 인해 Third-party API 호출 폭증과 데이터베이스 내 중복 레코드 생성이라는 리소스 낭비 및 데이터 정합성 결여 상황에 직면함.

Technical Solution

  • Redis의 SET NX EX 옵션을 활용해 원자적(Atomic)인 분산 락 획득 구조 설계
  • 락 획득 실패 시 즉시 작업을 종료하여 단일 서버만 실행되는 상호 배제(Mutual Exclusion) 보장
  • Job 실행 시간 초과로 인한 락 만료 시 타 서버의 락을 오삭제하는 문제를 방지하고자 Random Token 기반의 소유권 검증 도입
  • Token 검증과 삭제 과정을 Lua Script로 묶어 원자성을 확보함으로써 Race Condition 제거
  • 락 메커니즘의 한계를 보완하기 위해 Database 쓰기 단계에서 Upsert 기반의 Idempotency를 적용하여 중복 실행 시에도 데이터 정합성 유지

1. Redis SET NX EX를 통한 원자적 락 획득 및 TTL 설정을 통한 Deadlock 방지 적용 여부 확인

2. 락 해제 시 소유자 검증을 위한 고유 토큰 사용 및 Lua Script를 통한 원자적 삭제 구현 검토

3. 분산 락 실패 가능성을 염두에 둔 Database 수준의 Upsert 로직 및 Unique Key 제약 조건 설계

원문 읽기