.airflowignore 파일이란?
Apache Airflow에서 .airflowignore 파일은 DAG 탐색 과정에서 특정 파일이나 폴더를 제외하기 위해 사용하는 설정 파일이다. 이 파일을 통해 Airflow가 불필요한 파일을 스캔하는 것을 방지하여 DAG 로딩 속도를 향상시키고, 관련 없는 파일이 DAG로 잘못 인식되는 문제를 해결할 수 있다. .airflowignore 파일은 해당 파일이 위치한 디렉토리와 모든 하위 디렉토리에 재귀적으로 적용된다. 따라서 DAG 폴더의 루트에 하나의 파일을 생성하면 전체 프로젝트에 적용되며, 특정 하위 폴더에만 별도의 규칙을 적용하고 싶다면 해당 폴더에 추가 .airflowignore 파일을 생성할 수 있다.
두 가지 패턴 문법: regexp vs glob
Airflow는 .airflowignore 파일을 해석할 때 두 가지 서로 다른 문법을 지원한다. 사용할 문법은 Airflow 설정 파일(airflow.cfg)의 DAG_IGNORE_FILE_SYNTAX 옵션을 통해 선택할 수 있으며, 기본값은 regexp이다.
regexp 문법 (정규표현식 - 기본값)
정규표현식 문법에서는 각 줄이 정규표현식 패턴으로 인식된다. 파일이나 폴더의 경로가 해당 패턴과 일치하면 Airflow가 해당 파일을 무시한다. 이 방식은 매우 강력하고 복잡한 패턴 매칭이 가능하지만, 정규표현식에 익숙하지 않은 사용자에게는 다소 어려울 수 있다.
# 'project_a'가 포함된 모든 파일과 폴더를 무시
project_a
# '.csv'로 끝나는 모든 파일을 무시
.*\.csv$
# 'temp_'로 시작하는 모든 파일을 무시
^temp_.*
정규표현식에서는 특수 문자들이 패턴의 일부로 해석되므로, 실제 점(.) 문자를 매칭하려면 백슬래시로 이스케이프해야 하고, 문자열의 시작과 끝을 명시하려면 ^와 $ 앵커를 사용해야 한다.
glob 문법 (와일드카드)
glob 문법은 .gitignore 파일과 매우 유사한 방식으로 작동하므로 대부분의 개발자들에게 친숙하다. 와일드카드 문자인 *, ?, **를 사용하여 파일 경로 패턴을 표현하며, 정규표현식보다 직관적이고 이해하기 쉽다.
# 최상위 폴더의 모든 .csv 파일을 무시
*.csv
# temp 폴더와 그 안의 모든 내용을 무시
temp/
# 모든 하위 디렉토리의 .log 파일을 무시
**/*.log
# 특정 이름으로 시작하는 폴더들을 무시
test_*/
glob 문법에서 *는 파일명의 일부를 매칭하고, **는 여러 레벨의 디렉토리를 매칭하며, ?는 단일 문자를 매칭합니다. 또한 경로 끝에 슬래시(/)를 붙이면 디렉토리만을 대상으로 하고, 붙이지 않으면 파일과 디렉토리 모두를 대상으로 합니다.
예외 처리: 특정 파일만 무시하지 않기
glob 문법의 가장 강력한 기능 중 하나는 느낌표(!)를 사용한 예외 처리입니다. 이를 통해 넓은 범위의 파일들을 무시하면서도 특정 파일이나 폴더만은 다시 포함시킬 수 있습니다. 이 기능은 regexp 문법에서는 지원되지 않으므로, 예외 처리가 필요한 경우 반드시 glob 문법을 사용해야 한다.
올바른 사용법
예외 처리를 사용할 때 가장 중요한 것은 패턴의 순서이다. 반드시 넓은 범위의 무시 패턴을 먼저 작성하고, 그 아래에 예외 처리 패턴을 작성해야 합니다. Airflow는 패턴을 위에서 아래로 순차적으로 적용하기 때문이다.
# logs/ 폴더 아래의 모든 파일을 무시
logs/
# 하지만 그 중 error.log 파일은 무시하지 않음 (Airflow가 인식함)
!logs/error.log
# 또한 critical/ 폴더 전체도 예외로 처리
!logs/critical/
위 예시에서 logs/ 패턴은 logs 디렉토리의 모든 내용을 무시하도록 지시하지만, !logs/error.log와 !logs/critical/ 패턴이 특정 파일과 폴더를 다시 포함시킨다.
잘못된 사용법
다음과 같이 예외 처리 패턴을 먼저 작성하고 무시 패턴을 나중에 작성하면 의도한 대로 작동하지 않는다.
# 잘못된 순서: 이렇게 하면 error.log도 결국 무시됨
!logs/error.log
logs/
이 경우 먼저 !logs/error.log가 적용되어 해당 파일이 포함되지만, 바로 다음에 logs/ 패턴이 적용되어 logs 디렉토리의 모든 내용(error.log 포함)을 무시하게 된다.
실무에서 자주 사용하는 패턴들
개발 및 테스트 파일 관리
개발 과정에서 생성되는 임시 파일이나 테스트 파일들을 효율적으로 관리할 수 있다.
# 개발 중인 DAG들을 무시
dev_*
*_test.py
*_backup.py
*_old.py
# 하지만 중요한 테스트 파일은 포함
!critical_test.py
!integration_test.py
프로젝트별 디렉토리 관리
여러 프로젝트가 하나의 DAG 폴더에 있을 때, 특정 프로젝트만 활성화하고 나머지는 비활성화할 수 있다.
# 모든 프로젝트 폴더를 일단 무시
projects/
# 하지만 현재 활성화된 프로젝트들만 포함
!projects/production_ready/
!projects/current_sprint/
!projects/emergency_fix/
파일 형식별 제어
특정 확장자의 파일들을 선택적으로 포함하거나 제외할 수 있다.
# 모든 설정 파일들을 무시
*.conf
*.ini
*.yaml
*.json
# 하지만 DAG 관련 설정 파일들은 포함
!dag_config.yaml
!airflow_settings.json
!pipeline_*.conf
로그 및 임시 파일 관리
시스템에서 자동으로 생성되는 파일들을 정리할 수 있다.
# 모든 로그와 임시 파일들을 무시
*.log
*.tmp
__pycache__/
*.pyc
*.pyo
.DS_Store
Thumbs.db
# 하지만 중요한 로그 파일은 보존
!error.log
!audit.log
성능 최적화와 보안
.airflowignore 파일을 적절히 활용하면 여러 가지 이점을 얻을 수 있다.
DAG 파싱 성능 향상
Airflow는 DAG 폴더의 모든 Python 파일을 스캔하여 DAG 객체를 찾습니다. 불필요한 파일들을 미리 제외하면 이 과정이 훨씬 빨라집니다. 특히 대규모 프로젝트에서는 수백 개의 파일이 있을 수 있는데, 이 중 절반 이상이 실제 DAG와 관련 없는 유틸리티 함수, 설정 파일, 테스트 코드일 수 있다.
메모리 사용량 감소
스캔하지 않는 파일들은 메모리에 로드되지 않으므로 Airflow 스케줄러와 웹서버의 메모리 사용량이 감소한다. 이는 특히 제한된 리소스 환경에서 중요한 이점이다.
오류 방지
Python 파일이 아니거나 잘못된 구문을 포함한 파일들이 DAG로 잘못 인식되어 오류가 발생하는 것을 방지할 수 있다. 또한 개발 중인 불완전한 DAG들이 실수로 실행되는 것도 막을 수 있다.
설정 및 관리 팁
문법 설정 변경
Airflow 설정 파일에서 사용할 문법을 변경할 수 있다.
[core]
# airflow.cfg 파일에서
dag_ignore_file_syntax = glob # 기본값은 regexp
패턴 테스트
.airflowignore 파일을 작성한 후에는 의도한 파일들이 올바르게 포함되거나 제외되는지 확인해야 합니다. Airflow CLI를 통해 현재 인식되는 DAG 목록을 확인하거나, 웹 UI에서 DAG 목록을 확인하여 검증할 수 있다.
팀 협업 관리
.airflowignore 파일도 중요한 프로젝트 설정이므로 버전 관리 시스템(Git 등)에 포함시켜야 합니다. 팀원들이 동일한 환경에서 작업할 수 있도록 하고, 변경 사항이 있을 때는 팀원들에게 공유해야 한다.
계층적 관리
프로젝트의 규모가 클 때는 루트 레벨에서 공통 규칙을 정의하고, 특정 하위 디렉토리에서는 추가적인 규칙을 적용하는 계층적 관리 방식을 사용할 수 있습니다. 각 .airflowignore 파일은 해당 디렉토리와 하위 디렉토리에만 적용되므로 유연한 관리가 가능하다.
주의사항 및 모범 사례
과도한 제외 방지
너무 많은 파일을 제외하면 실제 필요한 DAG 파일까지 놓칠 수 있습니다. 처음에는 보수적으로 접근하여 명확히 불필요한 파일들만 제외하고, 점진적으로 범위를 넓혀가는 것이 좋다.
정기적인 검토
프로젝트가 진행되면서 파일 구조와 요구사항이 변경될 수 있으므로, .airflowignore 파일도 정기적으로 검토하고 업데이트해야 한다.
문서화
복잡한 패턴을 사용할 때는 주석을 통해 각 규칙의 목적을 명확히 문서화하는 것이 좋다. 이는 나중에 다른 팀원이나 본인이 파일을 수정할 때 이해를 돕는다.
.airflowignore 파일을 효과적으로 활용하면 Airflow 환경의 성능과 안정성을 크게 향상시킬 수 있다. 특히 대규모 프로젝트나 여러 팀이 협업하는 환경에서는 필수적인 도구라고 할 수 있다.