Lambda 프로그래밍 모델 이해하기

Lambda 프로그래밍 모델 이해하기

Lambda는 최대 15분까지 실행되는 표준 함수와 최대 1년까지 실행할 수 있는 Durable Functions, 두 가지 프로그래밍 모델을 제공해요. 둘 다 핵심 개념은 공유하지만, Durable Functions는 장기 실행·상태 유지(Stateful) 워크플로를 위한 추가 기능이 붙어 있죠.

출처: AWS Lambda 개발자 안내서

본문

Lambda는 모든 런타임에 공통으로 적용되는 프로그래밍 모델을 제공해요. 이 프로그래밍 모델은 여러분의 코드와 Lambda 시스템 사이의 인터페이스를 정의합니다. 함수 구성에서 handler(핸들러)를 정의하면 Lambda에게 함수의 진입점을 알려줄 수 있어요. 런타임은 핸들러에 호출 event(이벤트)와 context(컨텍스트)를 담은 객체를 전달하는데, 여기에는 함수 이름과 요청 ID 같은 정보가 들어 있죠.

Durable Functions의 경우 핸들러는 다음을 제공하는 DurableContext 객체도 추가로 받아요:

  • step()을 통한 체크포인트(Checkpointing) 기능
  • wait() 및 waitForCallback()을 통한 대기 상태 관리
  • 호출 사이의 자동 상태 유지(Persistence)

핸들러가 첫 번째 이벤트 처리를 마치면 런타임은 다음 이벤트를 보내요. Durable Functions의 경우 핸들러는 단계(step) 사이에서 실행을 일시 중지할 수 있고, Lambda는 함수가 재개될 때 상태를 자동으로 저장하고 복원해요. 함수의 클래스는 메모리에 남아 있기 때문에, 초기화 코드(initialization code) 에서 핸들러 메서드 밖에 선언한 클라이언트와 변수를 재사용할 수 있죠. 이후 이벤트에서 처리 시간을 절약하려면 AWS SDK 클라이언트 같은 재사용 가능한 리소스를 초기화 시점에 만들어 두세요. 한 번 초기화되면 함수 인스턴스 하나는 수천 개의 요청을 처리할 수 있어요.

함수는 /tmp 디렉토리의 로컬 저장소에도 접근할 수 있는데, 이는 여러 호출에서 쓸 수 있는 임시 캐시예요. 자세한 내용은 실행 환경을 참고하세요.

AWS X-Ray 추적을 활성화하면 런타임은 초기화와 실행에 대해 별도의 하위 세그먼트(subsegment)를 기록해요.

런타임은 함수의 로깅 출력을 받아서 Amazon CloudWatch Logs로 보내요. 함수 출력 로그 외에도 함수 호출이 시작되고 끝날 때의 항목도 기록하는데, 여기에는 요청 ID, 과금 시간(billed duration), 초기화 시간, 기타 세부 정보가 담긴 보고 로그가 포함되죠. 함수에서 오류가 발생하면 런타임은 그 오류를 호출자(invoker)에게 되돌려줘요.

참고
로깅은 CloudWatch Logs 할당량의 적용을 받아요. 스로틀링이나 경우에 따라 함수 인스턴스가 중지될 때 로그 데이터가 유실될 수 있으니 유의하세요.

Durable Functions의 주요 차이점:

  • 단계(step) 사이에 상태가 자동으로 유지된다
  • 함수가 리소스를 소모하지 않고 실행을 일시 중지할 수 있다
  • 실패 시 단계가 자동으로 재시도된다
  • 진행 상황이 체크포인트를 통해 추적된다

Lambda는 수요가 늘어나면 함수 인스턴스를 추가로 실행하고, 수요가 줄면 인스턴스를 중지하는 방식으로 함수를 확장해요. 이 모델은 애플리케이션 아키텍처에 다음과 같은 변화를 가져옵니다:

  • 특별한 언급이 없는 한, 들어오는 요청은 순서에 관계없이 또는 동시에 처리될 수 있어요.
  • 함수 인스턴스가 오래 유지될 거라 가정하지 말고, 애플리케이션의 상태는 다른 곳에 저장하세요.
  • 성능을 높이려면 로컬 저장소와 클래스 수준 객체를 사용하되, 배포 패키지 크기와 실행 환경으로 전송하는 데이터 양은 최소로 유지하세요.

선호하는 프로그래밍 언어로 프로그래밍 모델을 직접 체험해 보려면 아래 장(chapter)들을 참고하세요.

더 알아보기 (Learn more)

  • 프로그래밍 모델 입문은 아래 언어별 장을 참고하세요.