1.파이썬 데코레이터
- 데코레이터(Decorator):장식하다, 꾸미다
- What: 함수를 장식하다
- 원래의 함수를 감싸서 (Wrapping) 바깥에 추가 기능을 덧붙이는 방법
함수를 감싸는것
- 파이썬은 함수 안에 함수를 선언하는 것이 가능하고
- 함수의 인자로 함수를 전달하는 것이 가능하며
- 함수 자체를 리턴하는 것이 가능하다
2.파이썬 데코레이터 예제
def outer_func(target_func):
def inner_func():
# (1) 내부 함수 정의
print('target 함수 실행 전 입니다')
target_func()
print('target 함수 실행 후 입니다')
# (2) 내부 함수 자체 리턴
return inner_func
# 함수를 감싸는 방법 1
## 만약 get_data 이외에 다른 함수도 적용하려면 반복해서 모두 코드를 변경해야함
def get_data():
print('함수를 시작합니다')
a = outer_func(get_data)
a()
"""
실행결과
target 함수 실행 전 입니다
함수를 시작합니다
함수 실행 후 입니다
"""
# 함수를 감싸는 방법 2
## 함수를 정의하기 전에 데코레이터를 사용하면 코드를 변경하지 않아도 됨
@outer_func
def get_data():
print('함수를 시작합니다')
get_data()
"""
실행결과
target 함수 실행 전 입니다
함수를 시작합니다
함수 실행 후 입니다
"""
3. Task 데코레이터
- 파이썬 함수 정의만으로 쉽게 Task 생성할 수 있음
- 장점
- 함수를 직접 수정하지 않고도 랩핑하는 함수를 만들어 함수의 변형을 최소화 할 수 있음
- 함수를 호출하는 로직이 여러 군데 있을 경우 로직 부분을 일일이 찾아가서 모두 수정하지 않아도 기존에 호출하던 로직 그대로 사용할 수 있음
- 이전에 Task를 어떻게 만들었는지 비교해보면 이해가 쉬움
"""
dags_python_task_decorator.py
"""
from airflow import DAG
import pendulum
from airflow.decorators import task
with DAG(
dag_id="dags_pyton_task_decorator",
schedule="0 2 * * 1",
start_date=pendulum.datetime(2023, 3, 1, tz="Asia/Seoul"),
catchup=False
) as dag:
@task(task_id="python_task_1")
def print_context(some_input):
print(some_input)
python_task_1 = print_context('task_decorator 실행')
실행 결과

'Data 엔지니어링 > Airflow' 카테고리의 다른 글
| [Airflow]Jinja 템플릿 (0) | 2025.01.10 |
|---|---|
| [Airflow] python 오퍼레이터 op_args & op_kwagrs (1) | 2025.01.09 |
| [Airflow] Python 오퍼레이터 & 외부 함수 사용하기 (0) | 2025.01.09 |
| [Airflow] Email Operator로 메일 전송하기 (1) | 2025.01.09 |
| [Airflow] Bash Operator & 외부 쉘파일 수행하기 (0) | 2025.01.09 |