최근에 airflow를 공부하고 있는 중인데, Python Operator를 사용하여 외부에 정의된 Python 함수를 수행하는 DAG을 짜보고 있었다. Python에서는 외부에 정의된 함수를 실행하기 위해서는 "from 함수경로 import 함수이름"같은 import문을 코드에 넣어주어야 한다.
from 경로 import 함수이름현재 plugins 디렉토리 내에 파이썬 함수를 선언해둔 상태이고, dags 디렉토리에서 DAG을 짜고있다.
airflow에서는 dags, plugins폴더를 sys.path에 추가하여 자동으로 경로를 인식한다. 그렇기에 plugins/tmp_func.py의 함수를 인식하도록 코드를 짜주었는데 아래와 같이 경로를 인식하지 못하는 모습이다.
plugins 디렉토리를 명시해주면 경로를 인식한다.

코드상에서는 문제가 사라지지만, airflow에 DAG을 올렸을때는 airflow가 plugins 경로를 자동으로 인식하기에 실제로는 plugins/plugins/tmp_func.py를 찾으로 하기에 에러가 발생한다. 프로젝트와 airflow상에서의 디렉토리 탐색 방법이 다르기에 생기는 문제이다.
이를 .env파일을 사용하여 문제를 해결할 수 있다.
개발을 하다보면 DB 정보, API_KEY 등 개발자 혼자 또는 프로젝트 구성원들만 알고 있어야 하는 값들이 있다. 개발 프로젝트들은 보통 git을 사용하여 진행하는 경우가 대다수인데, 이때 외부로 누설되면 안되는 값들이 git에 노출될 위험이 있다. 이때 환경변수 파일을 외부에 따로 두어 소스코드 내에 하드코딩 없이 사용할 수 있다.

위와같은 방식으로 환경변수를 정의하여 코드내에서 plugins하위 디렉토리를 인식하도록 설정해주었다.

전과는 달리 지금은 경로를 잘 인식하는 모습을 볼 수 있다.