Dag에 대한 정적 타입 체크

Dag에 대한 정적 타입 체크 (Static Type Checking for Dags)

mypy로 Dag·커스텀 operator·hook을 정적 타입 체크할 때 더 정확한 결과를 얻도록 도와주는 apache-airflow-mypy 플러그인 패키지를 소개하는 문서예요. 설치 방법과 설정 방법을 코드와 함께 살펴볼게요.

출처: 문서

본문

Airflow는 mypy 플러그인 세트를 독립적으로 버전이 관리되는 별도 배포판으로 게시해요: apache-airflow-mypy예요.

언제 사용할까요?

Dag, 커스텀 operator, hook에 대해 mypy를 실행한다면 플러그인을 설치해 보세요. 일반 mypy로는 추론할 수 없어 false positive로 보고되는 Airflow 특유의 패턴에 대해 정확한 결과를 얻을 수 있어요. 플러그인은 mypy에게 다음을 가르쳐 줘요:

  • 타입 있는 데코레이터 (Typed decorators) – 런타임에 키워드 인자를 주입하는 데코레이터(예: GoogleBaseHook.fallback_to_default_project_id)로, mypy가 해당 인자를 누락으로 표시하지 않게 해요.
  • Operator 출력 (Operator outputs) – operator의 .output 속성과 @task 데코레이터가 붙은 함수의 반환값(XComArg)을 기본 런타임 타입으로 해석해요. 이를 통해 태스크의 출력을 다운스트림 태스크에 연결할 때 잘못된 타입 오류가 발생하지 않아요:
@task
def f(a: str) -> int:
    return len(a)

@task
def g(b: int) -> None: ...

g(f("hello"))  # mypy understands the output of f() is an int

이 패키지는 전적으로 선택 사항이에요 — Airflow가 런타임에 요구하지 않고, 단지 Dag 작성자에게 정적 타입 체크의 정확성을 높여 줄 뿐이에요.

설치 (Installation)

mypy와 함께 설치해요:

pip install apache-airflow-mypy

이 패키지는 SemVer를 따르고 자체 주기로 릴리스되므로, Airflow 버전과 무관하게 독립적으로 채택할 수 있어요.

설정 (Configuration)

mypy 설정(mypy.ini, setup.cfg 또는 pyproject.toml)에서 플러그인을 활성화해요:

[mypy]
plugins = airflow_mypy.plugins.decorators, airflow_mypy.plugins.outputs

더 알아보기 (Learn more)