강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

Joe (브리쳐스)님의 프로필 이미지
Joe (브리쳐스)

작성한 질문수

Airflow 마스터 클래스

스케쥴러 - DAG 파싱 부하 줄이는 과정 질문

작성

·

14

0

 

안녕하세요 김현진 선생님

강의 잘 듣고 있습니다.

 

아래의 퀴즈를 풀다가 궁금한 점이 생겨서 질문을 남깁니다.

 

스케줄러의 DAG 파일 파싱 부하를 줄이기 위해 권장되는 코드 작성 방법은 무엇일까요?

--> 라이브러리 import 문을 Python callable 함수 내부로 옮긴다.

 

스크린샷 2025-10-11 오후 10.22.02.png

 

위 설명을 이해하기 위해서 상황을 가정해보았는데요,

python callable 함수 외부에 선언된 API 호출문이 있는 경우를 피해야하고, 만약 그렇게 되면

스케쥴러가 DAG을 파싱할 때마다 실행되는 상황이 되는 것이 맞을까요?

답변 2

0

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 Joe님

네 맞습니다. 이 내용은 Airflow 공식 문서에도 잘 설명되어 있어서 한번 읽어보시면 좋을 것 같아요.

https://airflow.apache.org/docs/apache-airflow/stable/best-practices.html

 

airflow는 DAG_FOLDER에 저장되어 있는 파이썬 파일을 내부적으로 실행해나가면서 DAG 이 있으면 이를 인식해서 DB에 등록하는 과정을 거칩니다. 실습에서는 with DAG(): 이렇게 정적으로 DAG을 정의했지만 사실은 for문이나 while, if 문 같은 문법을 이용해서 dynamic 하게 dag을 생성하는 것이 가능합니다. 이게 가능하려면 DAG_FOLDER 에 저장되어 있는 파이썬 파일들을 읽어 파싱해나가는 과정이 필요한 거죠. 따라서 import 부터 파이썬 파일의 top-level 에 적혀 있는 로직들을 내부적으로 실행해나갑니다. (Operator의 execute() 함수는 실행하지 않기에 실제 DAG이 실행되어 파이프라인에 영향을 주진 않습니다)

 

그리고 아래 캡쳐는 위 링크 내용을 일부 캡쳐한 내용인데 요약하자면 Import 구문을 Dag의 top-level에 작성해두면 스케줄러의 성능에 영향을 준다는 내용입니다.

image.png

 

그래서 무거운(?) 라이브러리들은 가급적 task() 내부 함수에 작성하는게 좋다는 내용이에요.

답변이 되었을까요?

0

안녕하세요, 인프런 AI 인턴입니다. Joe (브리쳐스)님.

스케줄러의 DAG 파싱 시 발생하는 부하를 줄이기 위한 코딩 관행에 대해 좋은 질문을 주셨습니다. 강의의 퀴즈에서도 언급된 대로, DAG 파일의 파싱 부하를 줄이는 가장 권장되는 방법 중 하나는 라이브러리의 import 문을 Python callable 함수 내부로 옮기는 것입니다.

이유는 다음과 같습니다:

  1. 파서의 부담 감소: Airflow 스케줄러는 기본적으로 DAG을 주기적으로 파싱하여 변화가 있는를 탐지합니다. 라이브러리 import 문이 DAG 정의 바깥에 있으면, 스케줄러가 DAG을 파싱하는 매 순간 해당 import 문을 실행하게 됩니다. 이는 불필요한 리소스를 사용하게 만들어, 성능에 영향을 미칠 수 있습니다.

  2. 필요한 시점에 최소의 작업 수행: import 문이 callable 내부에 위치하면 해당 라이브러리는 실제 함수가 실행될 때만 import 되므로, 불필요한 리소스 소비를 줄이고 필요한 작업을 필요한 순간에만 수행하게 됩니다.

  3. DAG 파일의 가벼움 유지: DAG 파일은 워크플로우를 정의하는 데 집중하고, 무거운 작업이나 부하가 될 수 있는 작업은 최대한 피하는 것이 좋습니다.

상황 가정에 대한 이해

질문에서 제시한 상황, 즉 “python callable 함수 외부에 선언된 API 호출문이 있는 경우”를 피해야 한다는 내용은 맞습니다. 만약 API 호출이나 무거운 연산이 외부에 위치하면, 스케줄러가 DAG을 파싱할 때마다 이러한 호출이 반복됩니다. 이는 Https 요청, DB 연결 같은 시간이나 리소스가 소모되는 작업에 특히 부담을 주게 됩니다.

관련 질문 링크

이 방법을 사용하여 스케줄러의 부하를 효과적으로 관리하고 최적화 된 워크플로우를 작성하길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Joe (브리쳐스)님의 프로필 이미지
Joe (브리쳐스)

작성한 질문수

질문하기