본문 바로가기
Python

[Python] Prefect 워크플로우 자동화 툴

by teamnova 2025. 11. 13.
728x90

안녕하세요. 

오늘은 워크플로우 자동화 툴 Prefect 에 대해 알아보겠습니다. 

 

개발 과정에서 데이터 수집, 모델 학습 등 쥑적으로 실행해야 하는 복잡한 작업들이 많습니다. 

이런 작업들을 효율적으로 관리하기 위해 Prefect 를 사용할 수 있습니다. 

 

Prefect

Prefect는 "파이썬 기반의 워크플로우 오케스트레이션(Orchestration) 툴"입니다.

 단순한 '스케줄러'가 아니라, 여러 단계로 이루어진 복잡한 데이터 파이프라인 전체를 지휘하고 관리하는 역할을 합니다.


- 안정성 (Resilience): 특정 작업(@task)이 실패했을 때, 자동으로 **재시도(retries)**하도록 설정할 수 있습니다.
- 가시성 (Visibility): 강력한 **웹 기반 대시보드(UI)**를 제공합니다. 어떤 작업이 언제 실행됐고, 성공했는지, 실패했다면 왜 실패했는지 로그를 한눈에 볼 수 있습니다.
- 간단함 (Simplicity): 기존에 작성한 파이썬 함수에 @task와 @flow라는 데코레이터만 붙여주면 바로 워크플로우로 변환할 수 있습니다.

 

 

Prefect 실행방법 및 예제

 

먼저 Prefect를 설치합니다. 

pip install prefect

 

예제 코드를 작성 (simple.py)

from prefect import task, flow
import time

# --- 작업(Task) 정의 ---
# 1. 이름을 입력받아 인사말을 만드는 작업
@task
def create_greeting(name: str):
    """이름을 받아 인사말을 만듭니다."""
    print(f"Task 1: '{name}'님, 안녕하세요!")
    return f"Hello, {name}"

# 2. 인사말을 대문자로 바꾸는 작업
@task
def make_excited(message: str):
    """전달받은 메시지를 대문자로 바꾸고 느낌표를 붙입니다."""
    print(f"Task 2: 받은 메시지 '{message}'를 변환합니다...")
    
    # 작업에 시간이 걸리는 척 시뮬레이션
    time.sleep(1) 
    
    excited_message = message.upper() + "!"
    print(f"Task 2: 변환 완료! -> {excited_message}")
    return excited_message

# 3. 최종 결과를 출력하는 작업
@task
def log_result(final_result: str):
    """최종 결과를 화면에 로그로 남깁니다."""
    print(f"Task 3: 최종 결과는 [ {final_result} ] 입니다.")

# --- 지휘자(Flow) 정의 ---
@flow(name="My Simple Greeting Flow")
def my_simple_flow(user_name: str):
    """
    이름을 받아 -> 인사말을 만들고 -> 대문자로 변환해 -> 출력하는
    전체 워크플로우입니다.
    """
    
    # 1. 첫 번째 작업 호출
    greeting = create_greeting(user_name)
    
    # 2. 첫 번째 작업(greeting)의 결과를 두 번째 작업의 입력으로 전달
    #    Prefect가 알아서 create_greeting이 끝날 때까지 기다려줍니다.
    excited_greeting = make_excited(greeting)
    
    # 3. 두 번째 작업의 결과를 세 번째 작업의 입력으로 전달
    log_result(excited_greeting)

# --- 플로우 실행 ---
if __name__ == "__main__":
    # "Prefect"라는 이름을 넣어서 플로우를 실행합니다.
    my_simple_flow(user_name="Prefect")
    
    # "test"라는 이름으로 한 번 더 실행합니다.
    my_simple_flow(user_name="test")

 

Prefect 서버 실행 및 대시보드 확인

 

Prefect는 대시보드를 통해 실행기록을 확인할 수 있습니다. 

터미널을 열고 다음 명령어를 실행하여 Prefect의 로컬 서버와 대시보드를 실행합니다.

prefect server start

이 명령어를 실행하면 http://127.0.0.1:4200 주소로 대시보드가 열립니다.

 

simple.py  스크립트 실행
이제 다른 터미널을 열고 방금 작성한 파이썬 스크립트를 실행합니다.

python simple.py

 

실행결과 

스크립트 실행 결과, 터미널에 로그 출력이 확인되며, 대시보드 Runs에 다음과 같이 실행 기록이 남게 됩니다.