변수 (Variables)
변수 (Variables)
에어플로우에서 애플리케이션마다 값이 달라지는 설정 값, 예를 들어 연결 정보나 외부 시스템 주소 같은 걸 어디에 두면 좋을까요? 그럴 때 쓰는 게 바로 변수(Variables)예요. 변수는 에어플로우의 런타임 설정 개념으로, 전역에서 접근할 수 있는 키-값(key/value) 저장소예요. 태스크에서 꺼내 쓸 수 있고, 에어플로우의 UI에서 쉽게 설정하거나 JSON 파일로 한 번에 대량 업로드할 수도 있죠.
사용법은 간단해요. Variable 모델을 import 해서 get을 호출하면 됩니다.
from airflow.sdk import Variable
# 일반적인 호출 방식
foo = Variable.get("foo")
# JSON 값으로 자동 역직렬화
bar = Variable.get("bar", deserialize_json=True)
# 변수가 설정되어 있지 않으면 default(None) 값을 반환
baz = Variable.get("baz", default=None)
태스크 컨텍스트를 통해서도 변수에 접근할 수 있어요. get_current_context()로 컨텍스트를 가져온 뒤에 말이죠.
from airflow.sdk import get_current_context
def my_task():
context = get_current_context()
var = context["var"]
my_variable = var["value"].get("my_variable_name")
return my_variable
여기서 context["var"] 딕셔너리는 변수에 접근하는 두 가지 방법을 제공해요.
var["value"]: 변수를 원시 문자열 값으로 반환합니다.var["json"]: 변수를 JSON 값으로 반환해요. 변수에 딕셔너리, 리스트, 그 밖의 구조화된 데이터가 들어 있을 때 유용하죠.
변수는 템플릿에서도 쓸 수 있습니다.
# 원시 값
echo {{ var.value.<variable_name> }}
# JSON 값을 자동 역직렬화
echo {{ var.json.<variable_name> }}
변수는 기본적으로 전역(global) 입니다. 다만 환경이 Multi-Team으로 구성되어 있다면 특정 에어플로우 팀을 위해 만든 변수는 예외예요. 전역 변수는 설치 전체를 아우르는 설정에만 쓰는 게 좋고, 팀 기반 변수는 특정 팀 하나와 관련된 전체 설정에 쓴답니다. 태스크나 오퍼레이터 간에 데이터를 넘겨야 한다면 변수 대신 XComs를 쓰세요.
또 하나 권장하고 싶은 점이 있어요. 대부분의 설정과 구성은 DAG 파일 안에 두는 편이 좋습니다. 그러면 소스 컨트롤로 버전 관리가 가능하니까요. 변수는 정말로 런타임에 따라 값이 달라지는 경우에만 쓰는 게 맞아요.
변수를 더 자세히 설정하고 관리하는 방법은 Managing Variables 페이지를 참고하세요.