Lambda에서 Durable Functions

발행: (2026년 1월 15일 오후 06:22 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

Durable Functions란?

Durable Functions는 AWS Lambda에서 직접 다단계 애플리케이션 및 워크플로를 구축할 수 있게 해줍니다. 콜백을 기반으로 앱을 일시 중지하고 나중에 계속 진행할 수 있으며, 검증된 Lambda 플랫폼을 그대로 사용할 수 있습니다. 이 기능은 Reinvent 2025에서 발표되었습니다.

어떻게 작동하나요?

Durable Functions는 상태, 체크포인트 및 재시도를 자동으로 관리합니다. 워크플로의 각 단계는 별개의 내구성 단계로 처리되어 시스템이 다음을 수행할 수 있게 합니다:

  • 재시도 시 이미 완료된 단계를 건너뛰기.
  • 내장된 재시도 및 지수 백오프를 사용해 외부 API 호출을 처리하기.
  • 비동기 콜백(예: ERP 시스템) 대기 시 유휴 컴퓨팅 비용이 발생하지 않음.
  • 진행하기 전에 사람의 승인을 위해 일시 중지.

Durable Functions 사용 사례

시나리오기존 접근 방식Durable Functions 장점
주문 처리 – 재고 예약 → 결제 처리 → 배송 생성어떤 단계가 성공했는지 추적하기 위한 맞춤 코드를 작성해야 하며, 수동으로 멱등성을 처리해야 함.자동 체크포인트가 중복 예약을 방지하고, 재시도가 투명하게 처리됩니다.
외부 API 호출 (예: 결제 게이트웨이)재시도, 백오프, 오류 처리를 수동으로 구현해야 함.각 단계별로 구성 가능한 기본 제공 재시도 정책.
비동기 ERP 연동폴링이나 장시간 실행되는 Lambda 호출이 리소스를 낭비함.유휴 시간에 비용을 지불하지 않고 콜백을 기다릴 수 있음.
인간 개입맞춤형 일시 중지/재개 로직을 구축해야 함.계속 진행하기 전에 인간 승인을 기다리는 기능이 내장되어 있음.

Durable Functions 만들기

Durable Functions는 Python 데코레이터를 사용하여 정의합니다:

샘플 코드

from aws_durable_execution_sdk_python import (
    DurableContext,
    durable_execution,
    durable_step,
)
from aws_durable_execution_sdk_python.config import Duration

@durable_step
def validate_order(step_context, order_id):
    step_context.logger.info(f"Validating order {order_id}")
    return {"orderId": order_id, "status": "validated"}

@durable_step
def process_payment(step_context, order_id):
    step_context.logger.info(f"Processing payment for order {order_id}")
    return {"orderId": order_id, "status": "paid", "amount": 99.99}

@durable_step
def confirm_order(step_context, order_id):
    step_context.logger.info(f"Confirming order {order_id}")
    return {"orderId": order_id, "status": "confirmed"}

@durable_execution
def lambda_handler(event, context: DurableContext):
    order_id = event['orderId']

    # Step 1: Validate order
    validation_result = context.step(validate_order(order_id))

    # Step 2: Process payment
    payment_result = context.step(process_payment(order_id))

    # Simulate external confirmation wait
    context.wait(Duration.from_seconds(10))

    # Step 3: Confirm order
    confirmation_result = context.step(confirm_order(order_id))

    return {
        "orderId": order_id,
        "status": "completed",
        "steps": [validation_result, payment_result, confirmation_result]
    }

배포 후, Lambda 콘솔의 Durable Executions 탭에서 실행을 확인할 수 있습니다. 콘솔에는 다음이 표시됩니다:

  • 단계 입력, 출력 및 로그.
  • 대기 또는 콜백을 포함한 이벤트 기록.

UI는 Step Functions 콘솔과 비슷하지만, 기본 모델링 및 가시성은 다릅니다.

Step Functions와의 비교

속성Durable FunctionsStep Functions
개발 모델명령형 (코드 우선)선언형 (상태 머신)
최적 활용 분야Lambda 중심 비즈니스 로직 오케스트레이션다양한 AWS 서비스 간 오케스트레이션
가시성CloudWatch 로그시각적 그래프 및 실행 기록

언제 어떤 것을 사용할까

Lambda Durable Functions를 선호할 때:

  • 워크플로가 주로 Lambda 기반 비즈니스 로직인 경우.
  • 팀이 코드‑우선 접근 방식을 선호하고 단위 테스트 가능성이 높은 경우.
  • 전체 상태 머신을 구축하지 않고도 장시간 실행·일시 중지/재개 동작이 필요한 경우.
  • 시각적 워크플로 디자이너나 광범위한 서비스 통합이 필요하지 않은 경우.

Step Functions를 선호할 때:

  • 워크플로가 여러 AWS 서비스 또는 외부 시스템을 오케스트레이션하는 경우.
  • 시각적 가시성과 저코드 구성이 중요한 경우.
  • 복잡한 분기, 사람‑인‑루프 단계, 혹은 높은 팬아웃 오케스트레이션이 있는 경우.
  • 오케스트레이션(상태 머신)과 구현(Lambda/다른 서비스)을 명확히 분리하고 싶은 경우.
Back to Blog

관련 글

더 보기 »