inflearn logo
강의

Course

Instructor

Airflow Master Class

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

78

breachers

1 asked

0

 

안녕하세요 김현진 선생님

강의 잘 듣고 있습니다.

 

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

 

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

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

 

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

 

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

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

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

python 데이터-엔지니어링 airflow 카카오공채-개발

Answer 2

1

hyunjinkim

안녕하세요 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

breachers

답변이 되었습니다 감사합니다!

0

communityai8509

안녕하세요, 인프런 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 연결 같은 시간이나 리소스가 소모되는 작업에 특히 부담을 주게 됩니다.

관련 질문 링크

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

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

pykrx 회원제 전환으로 인한 실습 불가

0

103

2

수료증 발급

0

78

3

에러 발생 관련 질문드립니다.

0

77

2

vscode 작업화면에 오류가 발생하지 않습니다.

0

68

2

plugins 폴더 생성

0

73

2

WSL에서 git push 가 안되요 ㅠ

0

107

2

chatGPT&Airflow로 블로그 자동 포스팅하기 는 Deprecated 가 필요합니다.

0

65

2

github에 회원가입이 안되는데 원인이 뭔지 모르겠어요 ㅠ

0

705

2

설치중인데 venv를 꼭 써야할까요?

0

119

2

설치 버전 관련 질문입니다.

0

66

1

우분투 버전 다운받아야하는데 어떤걸로 설치해야할까요?

0

60

1

DAG 만들기 중 airflow 패키지 로드 에러

0

104

2

3.0에서도 수업노트가 성립하는지 확인 부탁드립니다!

0

94

3

task_id 사용법이 뭔가 바뀐 것 같습니다.

0

75

3

email operator 오류 관련

0

63

2

plugins 폴더 관련

0

91

2

bash operator 관련 문의입니다

0

77

3

Dags refresh 주기 관련 질문

0

123

2

wsl 관련 질문입니다.!

0

72

2

macOS에서 docker 설치

0

92

2

템플릿 변수에 대한 오류

0

58

2

custom_image 디렉토리 문의드립니다.

0

51

2

ETL 인터뷰 관련 문의

0

100

2

섹션 9. Connection & Hook - 50강 관련 질문

0

94

2