Data Engineering(Pipeline, Hadoop...)/Airflow

[Airflow] Schedule Timezone을 한국시간(KST) 으로 설정하기

dtstory 2022. 12. 9. 22:00

 

dags 작성을 하는 경우, 아래와 같이 매주 금요일 "2022-12-09 14:00:00"  에 schedule이 실행되도록 하는 코드를 작성했다. 

dag = DAG (
    dag_id            = 'workflow_test',
    start_date        = datetime(2022, 12, 9),
    schedule_interval = "00 14 * * 5",
    catchup           = False,
    tags              = ['test'],
    description       = 'Bash Operator Sample',
    default_args      = default_args
    )

 

그런데, 놀랍게도... 금요일 "2022-12-09 14:00:00"  에는 아무런 일이 발생하지 않는다. (airflow scheduler 가 돌지 않았다.)

 

이유는 무엇일까? Time zone이 디폴트 UTC로 잡혀있기 때문이다. 

아래 링크(표준시 LINK) 를 살펴보면 한국시간(KST) 14:00 은 세계시(UTC) 로 05:00 분 이라는 사실을 알 수 있다.

 

https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B5%AD_%ED%91%9C%EC%A4%80%EC%8B%9C

 

한국 표준시 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. KST는 여기로 연결됩니다. 다른 뜻에 대해서는 KST (동음이의) 문서를 참고하십시오. 서울 마포구 캐슬프라하 홍대점에 한국 표준시를 가리키는 시계 한국 표준

ko.wikipedia.org

 

따라서, 우리는 디폴트로 설정되어 있는 UTC를 KST로 변경해줄 필요가 있다. 

pendulum 모듈을 이용하면, 간편하게 변경을 할 수 있다. 앞서 작성한 dags를 아래와 같이 변경해보자.

 

import pendulum

## 로컬 타임존 생성
local_tz = pendulum.timezone("Asia/Seoul")

dag = DAG (
    dag_id            = 'workflow_test',
    start_date        = datetime(2022, 12, 9, tzinfo=local_tz),
    schedule_interval = "00 14 * * 5",
    catchup           = False,
    tags              = ['test'],
    description       = 'Bash Operator Sample',
    default_args      = default_args
    )

 

pedulum 모듈 내 timezone 함수를 이용해, "Asia/Seoul" 인자 로 local_tz 변수를 할당하고, 이를 start_date 내의 파라미터로 넣는 것이다. 이제 Airflow 화면으로 돌아가, next 스케줄 계획이 의도한 바와 같이 "2022-12-09 14:00" 로 잡혀있는지 확인해보자!

 

 

 

728x90