데브허브 | DEVHUB | Distributed Locks in Spring with ShedLockDistributed Locks in Spring with ShedLock
- 마이크로서비스 환경에서 스케줄링된 작업이 수평 확장될 때 여러 인스턴스에서 동시에 실행되어 데이터 중복(예: Kafka 메시지 중복)이 발생하는 문제점을 설명합니다. 🚨
- 분산 시스템에서 공유 리소스에 대한 접근을 조율하고, 특정 작업이 한 번에 하나의 인스턴스에서만 실행되도록 보장하여 경쟁 조건을 방지하는 분산 락의 중요성을 강조합니다. 🔒
- Spring Boot와 잘 통합되는 경량 라이브러리인 ShedLock을 소개하며, 분산 락 구현을 위한 효과적인 도구임을 설명합니다. 🔑
- ShedLock이 JDBC (PostgreSQL, MySQL), Redis, MongoDB, ZooKeeper 등 다양한 스토리지 백엔드를 지원하여 유연한 락 관리가 가능함을 언급합니다. 💾
- JDBC 기반 ShedLock 구현을 위해
shedlock-spring 및 shedlock-provider-jdbc-template 의존성을 추가하고, shedlock 테이블 생성을 위한 SQL 스크립트를 준비합니다. ➕
- Spring 애플리케이션 시작 시 스키마 초기화를 설정하고,
@EnableSchedulerLock 어노테이션을 사용하여 ShedLock을 활성화합니다. ⚙️
defaultLockAtMostFor 속성으로 락 유지 최대 시간을 설정하고, JdbcTemplateLockProvider를 사용하여 LockProvider 빈 구성 시 usingDbTime()을 통해 데이터베이스 시간 사용을 권장합니다. ⏱️