Apache Airflow에서 XCom (Cross-Communication)은 서로 다른 태스크들 간에 메시지나 작은 데이터를 공유하는 메커니즘. XCom은 DAG 내의 태스크들이 서로 통신하고 데이터를 교환할 수 있도록 도와준다.
Push: 한 태스크가 특정 값을 XCom에 저장할 수 있습니다. 이를 XCom을 "푸시"함. 예를 들어, 태스크 A가 수행한 결과를 XCom에 저장할 수 있음.
python코드 복사
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime
def push_function(ti):
ti.xcom_push(key='my_key', value='my_value')
dag = DAG('example_xcom', start_date=datetime(2023, 1, 1))
push_task = PythonOperator(
task_id='push_task',
python_callable=push_function,
dag=dag
)
Pull: 다른 태스크가 XCom에서 값을 읽어올 수 있음. 이를 XCom을 "풀". 예를 들어, 태스크 B가 태스크 A가 저장한 값을 읽어올 수 있음.
python코드 복사
def pull_function(ti):
value = ti.xcom_pull(key='my_key', task_ids='push_task')
print(f'The value is: {value}')
pull_task = PythonOperator(
task_id='pull_task',
python_callable=pull_function,
dag=dag
)
push_task >> pull_task
Key-Value Store: XCom은 key-value 형태로 데이터를 저장. 각각의 데이터는 특정 key를 가지고 있으며, 이를 통해 데이터를 식별하고 접근할 수 있다.
Task Instances: XCom은 특정 task instance에 연결되어 있습니다. 따라서 동일한 DAG 내의 여러 실행에서 독립적으로 작동.
XCom을 사용할 때는 너무 큰 데이터를 저장하지 않도록 주의해야 하고, XCom은 작은 크기의 데이터 교환에 적합하며, 큰 데이터는 외부 저장소를 사용하여 공유하는 것이 좋다고 한다.
함수에서 return값이 저장되거나 설정한 값이 저장된다. 위에 코드에서도 볼 수 있듯이. 데이터 프레임으로 Push한 것을, 다음 테스크에서 Pull한 것을 볼 수 있다.