<aside>
💙 해당 페이지는 데스트톱 전체화면에 맞게 구성되어 있습니다.
노션 어플리케이션의 경우, 상단의 **페이지로 열기**를 통해 확인해주세요.
웹사이트의 경우, **창 최대화**를 통해 확인해주세요.
</aside>
<aside>
🖱️ 첨부된 자료는 클릭 또는 오른쪽 상단의 원본 보기 클릭 시, 더 크게 보실 수 있습니다.
</aside>
< 목차 >
요구사항
기술 선택 시의 고려사항
애플리케이션 내에는 다양한 크루가 있고, 각 크루마다 납입일이 다른 상황이다.
크루의 납입일은 사용자에 의해 언제든지 변경될 수 있으며,
납입일이 변경되면 해당 변경사항에 따라 해당 크루의 납입일에 맞추어 스케줄링된 작업이 업데이트 되어야한다.
크루의 추가, 삭제와 같은 변경사항도 스케줄링에 동적으로 반영되어야 한다.
Spring 에서 기본적으로 제공하는 @Scheduled의 한계
@Scheduled**는 애플리케이션 시작 시에 정의된 스케줄만 실행할 수 있다. 런타임 중에 기존에 등록된 스케줄을 동적으로 변경하는 것은 꽤 복잡하고 제한적이었다.
Quartz Scheduler의 장점
각 크루의 납입일마다 실행되는 JOB 입니다.
[ JOB ]
[ Scheduler에 Job이 추가되는 시점 ]
PassbookController / passbook_ok()
크루가 생성될 때 해당 크루의 납입일에 맞춰 해당 Job을 실행하는 스케줄이 추가됩니다.
CrewSettingController / updateCrewInfo()
크루의 납입일이 수정될 때, 기존에 등록되어있던 스케줄이 제거되고, 수정된 납입일에 맞춘 새로운 cron식을 가진 스케줄이 추가됩니다.
CrewSettingController / cancelSailingStop()
항해 중단 신청을 취소했을 때, 해당 Job을 실행하는 스케줄이 다시 추가됩니다.