airflow를 이용하여 DAG를 정기적으로 구동시키려면
다음을 주의해야한다.
많이들 헷갈리는 개념이 start_date이다.
start_date를 직역해서 받아들이면
우리가 생성한 dag 인스턴스가 시작되는 시점이라고 이해하기 쉽다.
하지만!!!!
그렇게 생각하면 머리가 복잡해지기 시작한다.
어.. 만약 start_date가 과거시간이면 현 시점보다 과거인데 그건 실행이 어떻게 되는거야?
실행이 되? 무시하고 현재부터 가? 등등
결론부터 말하자면, start_date는 schedule_interval에 의해 처음 구동될 시간을 정하게 된다.
즉, dag가 처음 구동할 시간이 아니라는 거다!!
우리가 정의한 주기에 의해 주기에 따를 때 처음 구동가능한 시간에 구동된다는 것.
dag run = start_date + schedule_interval
예를 들어보자.
start_date=datetime(2022.7.1)
schedule_interval=@monthly
이렇게 dag를 생성했다고 가정하자.
그리고 오늘은 7/28 5:48이다.
7/1은 과거이고 실행주기는 매월 1일 자정 12시이니 우선 어제 자정은 지났다.
그럼 실행주기 매월 1일 자정 기준으로 볼때 처음 실행가능한 시간은?
8/1 자정이다.
즉, 매월 1일 자정 구동되는 애플리케이션이라면, 7/1 분의 태스크 처리는 8/1에 수행될 것이라고 감안하고 만드는 것이다.
오늘도 생각치 못한 옥에 티 해결!