two-thirteen
Lambda가 1년을 기다린다: Durable Functions로 다단계 작업 짜기
Lambda가 1년을 기다린다: Durable Functions로 다단계 작업 짜기
2026-11-09 Serverless

Lambda가 1년을 기다린다: Durable Functions로 다단계 작업 짜기

re:Invent 2025에서 발표된 AWS Lambda Durable Functions의 체크포인트·재실행 구조를 읽고, 승인 대기나 LLM 호출이 섞인 다단계 작업을 일반 Lambda 코드로 짤 때 지켜야 할 조건을 정리합니다.

서버리스와 '기다림'은 상극이었다

Lambda는 짧은 일에 강합니다. 요청이 오면 돌고, 끝나면 사라집니다. 최대 실행 시간도 15분입니다.

그런데 실무 작업은 자주 기다립니다. 사람의 승인을 기다리고, 외부 API의 비동기 결과를 기다리고, LLM이 긴 문서를 요약하는 동안 기다립니다. 이걸 Lambda로 짜려면 상태를 DB에 저장하고, 다음 단계를 부르는 장치를 따로 만들어야 했습니다. 보통은 Step Functions로 상태 기계를 그렸습니다.

Durable Functions 발표의 핵심은 이 기다림을 일반 Lambda 코드 안으로 가져왔다는 점입니다.

체크포인트와 재실행

AWS 글은 Durable Functions를 "익숙한 이벤트 핸들러와 연동을 그대로 쓰는 일반 Lambda 함수"라고 소개합니다. 차이는 실행 방식에 있습니다.

함수 안의 작업을 context.step()으로 감싸면 그 단계의 결과가 체크포인트로 저장됩니다. 함수가 중간에 죽으면 Lambda는 핸들러를 처음부터 다시 실행하되, 이미 끝난 단계는 저장된 결과로 건너뜁니다.

기다림은 context.wait()입니다. 이 지점에서 함수는 실제로 종료되고, 대기 시간 동안 컴퓨트 요금이 나가지 않습니다. 최대 1년까지 멈출 수 있습니다.

그 밖의 도구는 이렇습니다.

  • create_callback(): 외부 승인이나 API 응답 같은 이벤트를 기다림
  • wait_for_condition(): 조건이 맞을 때까지 주기적으로 확인
  • parallel(), map(): 여러 작업을 동시에 실행

예제로 보면

글의 예제는 주문 처리입니다. 세 단계로 나뉩니다.

  1. validate_order()로 주문을 검증합니다. 실패하면 재시도 없이 끝냅니다.
  2. send_for_approval()로 승인을 요청하고, 콜백 ID를 넘긴 뒤 결과를 기다립니다.
  3. process_order()를 최대 3번, 지수 백오프로 재시도하며 실행합니다.

코드만 보면 위에서 아래로 읽히는 평범한 함수입니다. 상태 저장, 재시도, 승인 대기를 따로 설계하지 않았는데도 그 기능이 들어 있습니다. 이 '평범해 보인다'는 점이 Durable Functions의 장점이자 함정입니다.

함정: 처음부터 다시 실행된다

재실행 구조를 이해하지 않으면 사고가 납니다.

핸들러가 처음부터 다시 돌기 때문에, step 밖에 있는 코드는 재실행될 때마다 또 실행됩니다. 현재 시각을 읽거나, 난수를 만들거나, 외부 API를 부르는 코드가 step 밖에 있으면 재실행마다 값이 달라지거나 같은 호출이 반복됩니다.

AWS 글이 남긴 권고도 이 방향입니다.

  • 재실행이 항상 같은 코드에서 일어나도록 Lambda 버전을 고정하라
  • 로그는 context.logger로 남겨라. 재실행 중 중복 로그를 걸러 준다
  • 내구 실행 설정은 함수를 만들 때만 켤 수 있고 나중에 바꿀 수 없다

같은 실행 이름으로 다시 호출하면 새 실행을 만들지 않고 기존 결과를 돌려준다는 점도 적혀 있습니다. 실행 단위의 중복은 막아 주는 셈입니다. 하지만 step 안에서 부르는 외부 시스템의 중복은 여전히 직접 막아야 합니다. 결제나 메일 발송이라면 멱등 키를 따로 두는 게 안전합니다.

LLM 파이프라인에 쓴다면

이 구조가 특히 잘 맞는 곳은 LLM 호출이 섞인 배치입니다. 문서 하나를 요약하고, 결과를 검증하고, 사람이 승인하면 게시하는 흐름을 떠올려 보면 됩니다.

LLM 호출을 step으로 감싸 두면, 뒤 단계에서 실패해도 비싼 요약 호출을 다시 하지 않습니다. 승인 대기는 콜백으로 몇 시간이든 기다릴 수 있고, 그동안 비용이 들지 않습니다.

세션 영상으로 더 보기

발표 직후 열린 re:Invent 세션에서 동작 방식을 자세히 설명합니다. 체크포인트와 재실행이 실제로 어떻게 보이는지 확인하기 좋습니다.

AWS re:Invent 2025 - [NEW LAUNCH] Deep Dive on AWS Lambda durable functions (CNS380) · AWS Events 채널

Step Functions와는 어떻게 다를까

AWS 글은 Step Functions를 언급하지 않습니다. 그래서 아래는 제 해석입니다.

Step Functions는 흐름을 그래프로 보여 주고, 여러 AWS 서비스를 코드 없이 엮는 데 강합니다. Durable Functions는 흐름을 코드로 쓰고 싶은 개발자에게 맞습니다. 단계가 많고 분기가 복잡하며 팀이 코드 리뷰로 흐름을 관리한다면 Durable Functions가 편할 것 같습니다.

출시 당시 지원은 Node.js 22·24와 Python 3.13·3.14, 리전은 US East(Ohio) 한 곳이었습니다. 새 프로젝트에 쓰기 전에 지금 지원하는 리전부터 확인해 보세요.

함께 읽을 개념 정리