Airflow의 XCom은 특정 DAG 내부의 Task 간 데이터 공유에 적합하지만, 전역적으로 DAG 간에 데이터를 공유하기 위해서는 Variable을 사용할 수 있습니다. Variable은 모든 DAG에서 접근 가능한 전역 변수로, 필요에 따라 설정된 값을 DAG에서 불러와 사용하게 합니다.
Variable 설정하기
1. Airflow 서비스의 Admin 탭에 들어간 뒤, Variables를 선택합니다.
2. + 버튼을 클릭합니다.
3. Variable로 지정할 Key와 Value를 적어주고 Save를 클릭합니다. Description은 optional입니다.
4. 저장된 Variable을 확인합니다.
Variable 변수 사용
Variable 설정 및 사용
Variable은 메타DB에 저장되며, Jinja 템플릿을 통해 Operator 내부에서 호출할 수 있습니다. 이는 불필요한 DB 연결을 줄여 Airflow 스케줄러의 과부하를 방지할 수 있습니다.
bash_var = BashOperator(
task_id='bash_var',
bash_command="echo variable:{{var.value.sample_key}}" # var.value로 variable의 value로 접근 가능
)
jinja 템플릿을 통해 Variable을 가져와야하는 이유
Airflow에서 주기적인 DAG 파싱 시, Variable.get() 메서드를 여러 번 호출하게 되면 그만큼 DB 연결이 빈번해져 스케줄러에 불필요한 부하가 발생할 수 있습니다. 이를 방지하기 위해 Airflow는 Operator 내부에서 Jinja 템플릿을 활용해 변수를 호출하는 방법을 권장합니다. Jinja 템플릿을 사용하면 파싱 단계에서 직접 DB에 접근하지 않고 템플릿 문법을 통해 필요한 값을 Operator가 실행될 때 동적으로 불러올 수 있습니다.
또한, 비슷한 맥락에서 Python Operator에서만 사용할 외부 라이브러리는 Python 함수 내부에서 import하도록 하는 것이 좋습니다. 최상위 레벨에서 외부 라이브러리를 import하면 DAG이 로드될 때마다 모든 import 구문이 실행되므로, 스케줄러가 추가로 불필요한 리소스를 소비하게 됩니다. 따라서, 필요한 라이브러리 import는 함수 내부에서 수행함으로써 스케줄러의 과부하를 최소화할 수 있습니다.
Variable의 활용 사례
그 전에 Variable은 협업 환경에서 동일한 값을 여러 DAG에서 사용해야 할 때 설정하면 유용합니다. 예를 들어, 기본 파일 경로나 이메일 알림 수신자 정보를 상수(const)로 설정해놓으면, DAG 전반에서 일관성 있게 관리할 수 있습니다.
'MLOps > Airflow' 카테고리의 다른 글
[Airflow] Trigger Rule, Task Group, Edge Label, DAG 간 의존성 관리 (0) | 2024.11.10 |
---|---|
[Airflow] BranchPythonOperator로 Task 분기 처리하기 (0) | 2024.11.08 |
[Airflow] 서로 다른 Operator 간 XCom 사용 (Python, Bash, Email) (0) | 2024.11.07 |
[Airflow] BashOperator와 XCom을 활용하는 방법 (0) | 2024.11.06 |
[Airflow] XCom 사용하기 (0) | 2024.11.03 |