2019. 4. 9. 17:15ㆍ[정리] 기능별 개념 정리/스프링 부트
클러스터 환경에서 @Scheduled 한번만 띄우기
공식 : https://github.com/lukas-krecan/ShedLock
참조 : https://www.baeldung.com/shedlock-spring
ShedLock 특징
1. [아파치 2.0 라이센스] 이다.
2. 클러스터 환경에서 하나의 노드만 스케줄링을 실행하도록 도와준다.
3. Annotation 방식으로 문제를 해결한다.
Quartz 를 대신할 수 있는 괜찮은 대안. Quartz 보다 가볍다.
Quartz 는 클러스터 안의 서버 노드들 중 스케줄링을 수행할 서버를 Quartz 가 고르고 방식이다.
반면 Shedlock 의 동작 방식은 다르다.
Shedlock에서는 모든 서버 노드들이 Scheduling을 수행하려고 시도한다.
각 노드들중 가장 먼저 스케줄링을 시도하는 노드는 스케줄링 하기전에 Lock을 걸고 들어간다.
이 후 다른 노드들이 스케줄링을 시도하지만 Lock이 걸려있으므로 호출이 되지 않고 이러한 호출을 차단하여 스케줄 메소드가 단 한번만 수행되도록 보장하는 방식이다.
사용법
1. 스케줄링을 사용하는 클래스에 @EnableSchedulerLock
2. 스케줄링을 수행하는 메소드에 @SchedulerLock
3. LockProvider 설정해주기
[추정]
LockProvider 이 뭐고, 필요한 이유
=> Shedlock 이 Lock 기능을 내부적으로 구현할 때, Database의 Lock 기능을 그대로 가져다 쓴 듯 하다.
=> 그러므로 Shedlock library 입장에서는 순수하게 Lock 만 걸고 들어가기 위한 전용 테이블이 필요하다. (README 를 읽어보면 사용자가 Shedlock을 사용하기 위해 Shedlock table을 만들어줘야하는 과정이 있다.)
=> Shedlock library 는 Shedlock table 에 접근하기 위한 Bean 객체 lockProvider 를 Autowired 해서 구현된다.
=> 그런데 Shedlock table 이 MongoDB 에 생성될지 MySQL 에 생성될지 Oracle에 생성될지 모른다.
=> 그러므로 lockProvider 을 사용자가 직접 빈 객체를 만들어줘야한다.
'[정리] 기능별 개념 정리 > 스프링 부트' 카테고리의 다른 글
Spring boot's RestTemplate, WebClient (0) | 2019.04.21 |
---|---|
Bean Singleton or Prototype (0) | 2019.04.18 |
스프링 부트 개발환경 로컬환경 분리 (0) | 2019.04.04 |
Controller to model flow (0) | 2019.03.21 |
스프링 부트 Annotation - 설정 (0) | 2019.03.17 |