Files
llm-wiki/raw/official-docs/lock-shedlock-readme.md

7.8 KiB

title, source_type, url, archive_url, vendor, related_branches, related_projects, tags, created
title source_type url archive_url vendor related_branches related_projects tags created
ShedLock README — Distributed Scheduled-Task Lock official-doc https://github.com/lukas-krecan/ShedLock lukas-krecan / ShedLock (open-source, Apache 2.0)
feature-distributed-lock-contract
feature-background-job-async-contract
ca-skeleton-operational-contract
official-doc
ca-skeleton
runtime
shedlock
distributed-lock
lock-lease
2026-06-12

ShedLock README — Distributed Scheduled-Task Lock

Layer: raw/ — 외부 자료(공식 문서)의 원문 발췌·출처 기록. 검증된 요약은 /ingestwiki/concepts/에 별도 작성. 원본은 raw에 영구 보관.

Parent / 활용 branch

Branch 이 자료가 정당화하는 결정
raw/branch-notes/feature-distributed-lock-contract ca-tmpl distributedLockProvider 후보로서 ShedLock 평가 — scheduled task 중복 실행 방지 전용 이며 general-purpose 분산 락이 아니라는 공식 경계, lockAtMostFor/lockAtLeastFor lease 시맨틱, JdbcTemplate LockProvider 지원 범위
raw/branch-notes/feature-background-job-async-contract 비동기 백그라운드 잡 설계 시 ShedLock 의 scheduler-only scope 를 고려한 범위 결정 근거

출처 / Source

  • 원본 URL: https://github.com/lukas-krecan/ShedLock
  • 아카이브 URL: (미수집)
  • 저자 / 조직: Lukas Krecan (open-source, Apache 2.0)
  • 발행일: 2014년~ (README 지속 갱신)
  • 마지막 확인일: 2026-06-12

왜 저장했는지 / Why archived

ca-tmpl 의 distributedLockProvider 설계 결정에서 ShedLock 이 적합한 후보인지 평가하기 위해 수집. 특히 ShedLock 이 general-purpose 분산 락이 아닌 scheduled task 전용 락임을 공식 README 원문으로 확인하고, lockAtMostFor/lockAtLeastFor lease 시맨틱과 JdbcTemplate 지원 범위를 근거로 남김.

핵심 인용 / Key quotes (verbatim, 5문장)

[§Overview] "ShedLock makes sure that your scheduled tasks are executed at most once at the same time."

[§Overview / Scope boundary] "ShedLock is not and will never be full-fledged scheduler, it's just a lock."

[§lockAtMostFor] "If the JVM crashes before the task finishes, lockAtMostFor attribute comes to play. The lock is always released after lockAtMostFor."

[§lockAtLeastFor] "You can set lockAtLeastFor attribute which specifies minimum amount of time for which the lock should be kept. Its main purpose is to prevent execution from multiple nodes in case of really short tasks and clock difference between the nodes."

[§Clock assumption] "ShedLock assumes that clocks on the nodes are synchronized."

Claims Extracted / 추출된 주장

Claim ID Claim (이 자료가 직접 말하는 것) Evidence quote Strength Applies to Does not prove
SHEDLOCK-C1 ShedLock 은 동일 scheduled task 가 동시에 최대 한 번 실행되도록 보장한다 [§Overview] "ShedLock makes sure that your scheduled tasks are executed at most once at the same time." official-reference Spring/Micronaut/CDI 통합 환경의 @Scheduled 또는 동등 어노테이션 기반 태스크 general-purpose 분산 락으로서의 사용 가능성; 락 없는 코드 경로(non-scheduled 진입점)의 중복 실행 방지
SHEDLOCK-C2 ShedLock 은 full-fledged scheduler 가 아니라 단순 락이다 [§Scope boundary] "ShedLock is not and will never be full-fledged scheduler, it's just a lock." official-reference ShedLock 선택 범위 결정 시 다른 분산 락 라이브러리(Redisson, ZooKeeper 등) 대비 우위; 대체 스케줄러(JobRunr, db-scheduler) 와의 기능 비교
SHEDLOCK-C3 lockAtMostFor 는 노드 장애(JVM crash) 시 락이 무한 점유되지 않도록 해제 상한을 보장한다 [§lockAtMostFor] "If the JVM crashes before the task finishes, lockAtMostFor attribute comes to play. The lock is always released after lockAtMostFor." official-reference JVM crash / 네트워크 단절 등 비정상 종료 시나리오 lockAtMostFor 가 짧을 때 정상 실행 중 타임아웃으로 인한 중복 실행 위험이 없다는 보장; 적절한 값 설정 기준
SHEDLOCK-C4 lockAtLeastFor 는 짧은 태스크와 노드 간 클락 차이에 의한 중복 실행을 방지한다 [§lockAtLeastFor] "You can set lockAtLeastFor attribute which specifies minimum amount of time for which the lock should be kept. Its main purpose is to prevent execution from multiple nodes in case of really short tasks and clock difference between the nodes." official-reference clock skew 가 존재하는 분산 환경에서 짧은 주기 태스크 lockAtLeastFor 설정 시 모든 clock skew 시나리오를 커버한다는 보장; 권장 값 공식 제시
SHEDLOCK-C5 ShedLock 은 노드 간 클락이 동기화되어 있다고 가정한다 — 이는 동작 전제 조건이다 [§Clock assumption] "ShedLock assumes that clocks on the nodes are synchronized." official-reference ShedLock 을 사용하는 모든 배포 환경 NTP 미동기화 환경에서도 정확히 동작한다는 보장; lockAtLeastFor 가 clock skew 를 완전히 상쇄한다는 주장

Usage Boundaries / 적용 경계

  • 이 자료가 직접 증명하는 것:
    • SHEDLOCK-C1: ShedLock 이 scheduled task 중복 실행을 막는 메커니즘임
    • SHEDLOCK-C2: ShedLock 이 general-purpose 분산 락이나 완전한 스케줄러가 아님 — 범위 결정 근거
    • SHEDLOCK-C3: JVM crash 등 비정상 종료 시 lockAtMostFor 로 락 해제를 보장하는 safety-valve 시맨틱
    • SHEDLOCK-C4: 짧은 태스크 + clock skew 환경에서 lockAtLeastFor 가 중복 실행을 방지하는 이유
    • SHEDLOCK-C5: ShedLock 이 클락 동기화를 가정하므로 NTP 설정이 전제 조건임
  • 이 자료가 증명하지 않는 것:
    • JdbcTemplate LockProvider 의 구체 SQL DDL 또는 트랜잭션 격리 수준 (별도 문서 필요)
    • lockAtMostFor 의 권장 배수 값 (태스크 실행 시간 측정 기반 결정 필요)
    • ca-tmpl 의 실제 Spring Boot 버전과 ShedLock 버전 호환성 (버전 매트릭스 별도 확인)
    • 다른 LockProvider (Redis, ZooKeeper 등) 대비 JdbcTemplate 선택의 trade-off
  • 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
    • ca-tmpl 가 사용하는 DB 에 lock table DDL 생성 가능 여부 및 마이그레이션 전략 (Flyway 통합)
    • lockAtMostFor 값을 태스크 실행 p99 레이턴시 대비 몇 배로 설정할지 (운영 데이터 필요)
    • 클러스터 환경 NTP 동기화 상태 확인 (인프라 계약)

메모 / Notes

  • ShedLock README 는 "not a distributed lock" 문구를 명시하지는 않지만 "not a full-fledged scheduler, it's just a lock" 으로 scope 를 scheduler-lock 전용으로 한정함 — general-purpose 분산 락 대체 불가 판단의 근거
  • JdbcTemplate LockProvider 는 30+ 지원 backend 중 하나. JDBC 기반이므로 ca-tmpl 의 기존 DB 인프라 재사용 가능 — 별도 인프라(Redis 등) 추가 불필요
  • lockAtMostFor 가 너무 짧으면 정상 실행 중 lock 해제 → 다른 노드가 동시 진입하는 중복 실행 위험. 값은 실제 실행 시간보다 충분히 크게 설정 권고 (README 암시, 수치 미제시)
  • WebFetch 두 번 요청: 첫 번째는 요약 반환. 두 번째(raw URL)도 AI 처리된 텍스트였으나 따옴표 안 내용을 verbatim 으로 확인. 인용 5개 전부 self-grep 통과.
  • 같은 주제 공식 문서: ShedLock Wiki (https://github.com/lukas-krecan/ShedLock/wiki) — LockProvider 별 DDL 및 추가 설정
  • 비교 대상 라이브러리: db-scheduler (README 언급), JobRunr (README 언급) — 별도 raw source 필요 시 추가
  • 이 자료를 인용한 wiki 요약: [[wiki/concepts/distributed-lock-shedlock]] (생성 시)