AWS Lambda
개발자 안내서

AWS Lambda 실행 모델

AWS Lambda는 사용자를 대신하여 Lambda 함수를 실행할 때 Lambda 함수 실행에 필요한 리소스의 프로비저닝 및 관리를 담당합니다. Lambda 함수를 생성할 때 Lambda 함수에서 허용하고 싶은 메모리 용량 및 최대 실행 시간 같은 구성 정보를 지정합니다. Lambda 함수가 호출되면 AWS Lambda는 사용자가 제공하는 구성 설정에 따라 실행 컨텍스트를 시작합니다. 실행 컨텍스트는 데이터베이스 연결 또는 HTTP 엔드포인트와 같은 Lambda 함수 코드의 외부 종속성을 초기화하는 임시 실행 시간 환경에 속합니다. 이렇게 하면 후속 호출 시 성능이 더 향상되는데 그 이유는 아래에 설명한 것처럼 외부 종속성을 "콜드 스타트(cold-start)"하거나 초기화할 필요가 없기 때문입니다.

참고

본 단원의 내용은 정보 제공의 목적으로만 사용됩니다. AWS Lambda는 실행 컨텍스트 생성 및 삭제를 관리합니다. 실행 컨텍스트를 관리할 수 있는 AWS Lambda API는 없습니다.

실행 컨텍스트를 설정하고 필요한 "부트스트래핑"을 실행하기까지 다소 시간이 소요되기 때문에 Lambda 함수가 호출될 때마다 약간의 지연 시간이 추가될 수 있습니다. 이러한 지연 시간은 보통 Lambda 함수가 처음으로 호출될 때나 업데이트된 이후에 발생합니다. 왜냐하면 AWS Lambda가 Lambda 함수를 후속 호출할 때 실행 컨텍스트를 재사용하려고 하기 때문입니다.

Lambda 함수가 실행되고 나면 AWS Lambda는 또 다른 Lambda 함수 호출을 예상하여 실행 컨텍스트를 일정 시간 동안 유지합니다. 실제로, 이 서비스는 Lambda 함수가 완료된 이후에 실행 컨텍스트를 일시 중지했다가 Lambda 함수가 다시 호출될 때 AWS Lambda가 컨텍스트 재사용을 선택하면 컨텍스트를 다시 가동시켜 재사용합니다. 이렇게 실행 컨텍스트를 재사용하는 접근 방식은 다음과 같은 장점이 있습니다.

  • Lambda 함수 코드의 모든 선언(handler 코드가 아닌 경우는 프로그래밍 모델 참조)은 함수가 다시 호출될 때 추가로 최적화가 되도록 초기화된 상태로 유지됩니다. 예를 들어 Lambda 함수가 연결을 재설정하는 대신 데이터베이스 연결을 설정하면 원래 연결이 후속 호출에 사용됩니다. 코드에 로직을 추가하여 생성에 앞서 연결이 이미 존재하는지 확인하는 것이 좋습니다.

     

  • 각 실행 컨텍스트는 /tmp 디렉터리에 500MB의 디스크 공간을 추가로 제공합니다. 디렉터리 콘텐츠는 실행 컨텍스트가 일시 중지되어도 그대로 유지되기 때문에 일시적인 캐시를 여러 호출에서 사용할 수 있습니다. 코드를 추가하여 캐시에 저장한 데이터가 포함되어 있는지 확인할 수 있습니다. 배포 한도에 대한 자세한 내용은 AWS Lambda 제한을 참조하십시오.

     

  • 함수 종료 시 완료되지 않아서 Lambda 함수에서 초기화된 백그라운드 프로세스나 콜백은 AWS Lambda가 실행 컨텍스트 재사용을 선택한 경우에 재개됩니다. 코드가 존재하려면 먼저 코드의 백그라운드 프로세스나 콜백(Node.js의 경우)이 완료되어야 합니다.

참고

Lambda 함수 코드를 기록할 때 AWS Lambda가 이후 함수 호출을 위해 실행 컨텍스트를 자동으로 재사용한다고 가정해서는 안 됩니다. 다른 요인으로 인해 AWS Lambda가 새 실행 컨텍스트를 생성해야 할 수 있으며 이 경우 데이터베이스 연결 실패 같은 예기치 못한 결과가 발생할 수 있습니다. 앞에서 언급했듯이 Lambda 함수 코드에 실행 컨텍스트가 있는지 확인하는 로직을 추가합니다.