

# Lambda를 사용하여 코드 실행
<a name="concepts-how-lambda-runs-code"></a>

Lambda 함수를 작성할 경우, 고유한 서버리스 환경에서 실행되는 코드를 생성하게 됩니다. Lambda가 실제로 코드를 실행하는 방법을 이해하려면 두 가지 주요 측면, 즉 코드가 Lambda와 상호 작용하는 방식을 정의하는 프로그래밍 모델과 Lambda가 코드의 런타임 환경을 관리하는 방법을 결정하는 실행 환경 수명 주기를 알아야 합니다.

## Lambda 프로그래밍 모델
<a name="concepts-progmodel-overview"></a>

프로그래밍 모델은 Python, Java로 작성하거나 지원되는 다른 언어로 작성하는 경우와 무관하게 Lambda가 코드와 작동하는 방식에 대한 공통 규칙 세트로 작동합니다. 프로그래밍 모델에는 런타임과 핸들러가 포함됩니다.

**표준 함수:**

1. Lambda는 이벤트를 수신합니다.

1. Lambda는 런타임을 사용하여 코드가 사용할 수 있는 형식으로 이벤트를 준비합니다.

1. 런타임은 형식이 지정된 이벤트를 핸들러로 전송합니다.

1. 핸들러는 작성한 코드를 사용하여 이벤트를 처리합니다.

**지속성 함수:**

1. Lambda의 이벤트 수신

1. 런타임은 이벤트와 DurableContext를 모두 준비

1. 핸들러가 수행할 수 있는 작업은 다음과 같습니다.
   + 자동 체크포인트 지정을 통한 단계 처리
   + 리소스를 사용하지 않고 실행 일시 중지
   + 마지막으로 성공한 체크포인트에서 재개
   + 단계 사이에 상태 유지

이 모델의 필수 요소는 Lambda가 코드에서 처리할 이벤트를 보내는 *핸들러*입니다. 이를 코드의 진입점으로 생각하세요. Lambda가 이벤트를 수신하면 이 이벤트와 일부 컨텍스트 정보가 핸들러에 전달됩니다. 그런 다음, 핸들러는 코드를 실행하여 이러한 이벤트를 처리합니다. 예를 들어 Amazon S3에 업로드되면 파일을 읽거나, 이미지를 분석하거나, 데이터베이스를 업데이트할 수 있습니다. 코드가 이벤트 처리를 마치면 핸들러가 다음 이벤트를 처리할 준비가 된 것입니다.

## Lambda 실행 모델
<a name="concepts-exec-env-overview"></a>

프로그래밍 모델은 Lambda가 코드와 상호 작용하는 방식을 정의하지만, 실행 환경은 Lambda가 함수를 실제로 실행하는 곳입니다. 이는 함수에 사용하도록 특별히 생성된 안전하고 격리된 컴퓨팅 공간입니다.

**각 환경은 표준 함수와 지속성 함수에 따라 달라지는 수명 주기를 따릅니다.**

**표준 함수(최대 15분):**

1. **초기화:** 환경 설정 및 코드 로드

1. **간접 호출:** 함수 코드의 단일 실행

1. **종료:** 환경 정리

**지속성 함수(최대 1년):**

1. **초기화:** 환경 및 지속성 상태 설정

1. **간접 호출:** 자동 체크포인트 지정을 포함한 여러 단계

1. **대기 상태:** 리소스 소비 없이 실행 일시 중지

1. **재개:** 마지막 체크포인트에서 다시 시작

1. **종료:** 지속성 상태 정리

이 환경은 함수 실행의 중요한 측면을 처리합니다. 이는 함수에 메모리와 임시 스토리지용 `/tmp` 디렉터리를 제공합니다. **지속성 함수의 경우 다음도 관리합니다.**
+ 단계 간 자동 상태 지속성
+ 체크포인트 스토리지 및 복구
+ 대기 상태 조정
+ 장기 실행에서의 진행 상황 추적