AWS Lambda Durable Functions를 활용한 간단한 휴가 관리

발행: (2026년 1월 14일 오전 09:17 GMT+9)
8 min read
원문: Dev.to

I’m happy to translate the article for you, but I’ll need the full text of the post (the paragraphs, headings, and any non‑code content) in order to do the translation. Could you please paste the article’s content here? I’ll keep the source line, formatting, markdown, and code blocks exactly as they are and translate only the readable text into Korean.

Intro

AWS re:Invent 2025에서 Lambda는 Durable Functions를 도입했으며, 다양한 기능을 제공합니다.

주요 하이라이트

  • 단일 실행이 최대 1년까지 지속될 수 있습니다.
  • 내장된 체크포인팅이 완료된 단계를 추적하므로, 재개 또는 중단 후 실행이 재시도될 때 이미 완료된 단계는 건너뛰고 워크플로는 다음 단계부터 계속됩니다.

여러 AWS 서비스를 워크플로로 오케스트레이션할 때 AWS Step Functions이 오랫동안 기본 선택이었습니다. Durable Functions를 사용하면 이제 익숙한 Lambda 환경 내에서 유사한 오케스트레이션을 구현할 수 있어 매우 훌륭합니다!

이 블로그 포스트에서는 Durable Functions의 콜백 기능을 활용해 human‑in‑the‑loop 워크플로를 구현하는 방법을 설명합니다.

시나리오 개요

실행이 시작되면 Durable Functions가 Lambda 호출을 시작합니다. 다단계 실행의 경우 다음과 같이 할 수 있습니다:

  1. 일정 시간 동안 혹은 외부 프로세스로부터 신호가 들어올 때까지 특정 단계에서 일시 중지(또는 대기)합니다.
  2. 외부 신호를 받으면 실행이 재개(성공 시)하거나 종료(실패 시)됩니다.

이 기본 기능은 인간 승인이 필요한 비즈니스 프로세스에 이상적입니다.

예시: 휴가 요청 워크플로우

단계설명
1직원이 휴가 요청을 전송 → Durable Function이 실행을 시작합니다.
2DynamoDB 테이블에 pending 상태로 휴가 기록이 생성됩니다.
3직원에게 요청이 접수되었음을 알리는 이메일이 발송됩니다.
4관리자에게 승인 또는 거부를 위한 callback ID가 포함된 이메일이 발송됩니다.
5Durable Function이 관리자의 결정이 들어올 때까지 실행을 보류합니다.
6관리자가 승인하거나 거부하면 실행이 재개됩니다.
7관리자가 제한 시간 내에 조치를 취하지 않으면 요청이 만료됩니다.
8DynamoDB에 휴가 상태가 업데이트됩니다.
9직원에게 관리자의 결정 또는 만료 알림이 포함된 이메일이 발송됩니다.

아키텍처 세부 사항

1. 프록시 함수

  • 목적: 들어오는 leave‑request 페이로드를 수신하고 검증합니다.
  • 구현: Lambda Function URL을 통해 노출됩니다.
  • 왜 필요할까?
    • Durable Functions의 동기 호출은 15 분으로 제한됩니다.
    • 더 오래 실행하려면 Durable Function을 비동기(InvocationType='Event')로 호출합니다(즉, fire‑and‑forget).

2. Durable Function 실행 흐름

  1. DynamoDB에 leave 레코드를 생성합니다.

  2. 직원에게 접수 확인 이메일을 보냅니다.

  3. 매니저에게 callback ID와 승인/거부 링크가 포함된 이메일을 보냅니다.

  4. callback을 기다립니다(wait_for_callback 단계). 여기서 실행이 일시 중지됩니다.

  5. Callback 처리 – 별도의 Lambda( Function URL을 통해 노출)가 callback_iddecision을 수신합니다.

    {
        "callback_id": "abc123-def456-ghi789",
        "decision": "approve"
    }
  6. Callback Lambda는 새 SDK 메서드를 호출합니다:

    # Pseudo‑code
    lambda_client.send_durable_execution_callback_success(
        CallbackId=callback_id,
        Output={"status": "APPROVED"}
    )
    # or
    lambda_client.send_durable_execution_callback_failure(
        CallbackId=callback_id,
        ErrorMessage="Rejected by manager"
    )

    참고: 이러한 메서드는 Lambda에 기본으로 포함된 boto3 버전에서는 사용할 수 없습니다. 함수 코드와 함께 boto3 ≥ 1.42.1을 패키징하세요.

  7. Callback을 수신하면 Durable Execution이 재시작됩니다.

  8. 매니저가 시간 초과(예: 5 분) 내에 응답하지 않으면 wait_for_callbackCallableRuntimeError를 발생시키고 메시지는 “Callback timed out.” 입니다.

  9. leave 레코드가 승인, 거부 또는 만료에 따라 업데이트됩니다.

  10. 최종 이메일이 직원에게 전송되고 실행이 완료됩니다.

Source:

직접 해보기

전체 샘플 프로젝트(AWS CDK + Python)는 GitHub에서 확인할 수 있습니다:

🔗 Repository: https://github.com/pubudusj/simple-leave-management-with-durable-functions

설정 단계

  1. 리포지토리 복제

    git clone https://github.com/pubudusj/simple-leave-management-with-durable-functions.git
    cd simple-leave-management-with-durable-functions
  2. 환경 변수 설정

    cp .env.example .env
    # .env 파일을 편집하여 필요한 값을 입력합니다.
    # SYSTEM_FROM_EMAIL이 Amazon SES에서 인증되었는지 확인하세요.
  3. 스택 배포

    cdk deploy

    배포가 완료되면 출력에 두 개의 Lambda Function URL이 표시됩니다:

    • Create leave request 엔드포인트
    • Process leave request (manager) 엔드포인트

1. 휴가 요청 생성

curl -X POST \
     -H "Content-Type: application/json" \
     -d '{
           "start_date":"2026-01-10",
           "end_date":"2026-01-20",
           "employee_email":"employee@email.com"
         }' \
     <CREATE_LEAVE_REQUEST_URL>
  • 결과
    • 직원에게 확인 이메일이 전송됩니다.
    • 관리자에게 콜백 ID와 승인/거부 링크가 포함된 이메일이 전송됩니다.

2. 관리자가 승인 / 거부

curl -X POST \
     -H "Content-Type: application/json" \
     -d '{
           "callback_id":"<CALLBACK_ID>",
           "decision":"approve"
         }' \
     <PROCESS_LEAVE_REQUEST_URL>
  • 결과
    • Durable 실행이 재개되어 DynamoDB 레코드가 업데이트되고, 직원에게 최종 상태 이메일이 전송됩니다.

3. 타임아웃 시나리오

관리자가 설정된 타임아웃(데모 기본값 5분) 내에 조치를 취하지 않으면, 휴가 요청이 자동으로 만료 처리되고 직원에게 만료 알림이 전송됩니다.

요약

  • Durable Functions 이제 장기 실행, 체크포인트가 있는 워크플로(최대 1년)를 지원합니다.
  • callback 패턴을 사용하면 외부 상태 머신 없이 human‑in‑the‑loop 단계를 구현할 수 있습니다.
  • proxy Lambda를 사용하면 비동기 호출이 가능해져 15분 동기 제한을 우회할 수 있습니다.
  • 샘플 프로젝트는 DynamoDB, SES, Lambda 콜백을 활용한 완전한 엔드‑투‑엔드 휴가 요청 흐름을 보여줍니다.

직접 시도해 보고, 이 패턴을 여러분의 비즈니스 프로세스에 어떻게 확장할지 알려 주세요!

OWS

이것을 시도해 보시고 의견을 알려 주세요!

Back to Blog

관련 글

더 보기 »