

# 계층으로 Lambda 종속성 관리
<a name="chapter-layers"></a>

Lambda 계층은 추가 코드 또는 데이터를 포함하는 .zip 파일 아카이브입니다. 계층에는 일반적으로 라이브러리 종속 항목, [사용자 지정 런타임](runtimes-custom.md) 또는 구성 파일이 포함됩니다.

계층 사용을 고려하는 데에는 여러 가지 이유가 있습니다.
+ **배포 패키지의 크기를 줄이기 위해.** 모든 함수 종속 항목을 함수 코드와 함께 배포 패키지에 포함하는 대신 계층에 배치합니다. 이렇게 하면 배포 패키지가 작고 체계적으로 유지됩니다.
+ **핵심 함수 로직을 종속 항목과 분리하기 위해.** 계층을 사용하면 함수 코드와 독립적으로 함수 종속 항목을 업데이트할 수 있으며 그 반대의 경우도 마찬가지입니다. 이렇게 하면 관심사를 분리하고 함수 로직에 집중할 수 있습니다.
+ **여러 함수에서 종속 항목을 공유하기 위해.** 계층을 생성한 후 계정의 여러 함수에 적용할 수 있습니다. 계층이 없으면 각 개별 배포 패키지에 동일한 종속 항목을 포함해야 합니다.
+ **Lambda 콘솔 코드 편집기를 사용하기 위해.** 코드 편집기는 함수 코드의 부분 업데이트를 빠르게 테스트하는 데 유용한 도구입니다. 그러나 배포 패키지 크기가 너무 큰 경우 편집기를 사용할 수 없습니다. 계층을 사용하면 패키지 크기가 줄어들고 코드 편집기를 사용할 수 있습니다.
+ **임베드된 SDK 버전을 잠그기 위해.**임베드된 SDK는 AWS에서 새로운 서비스 및 기능을 출시함에 따라 예고 없이 변경될 수 있습니다. 필요한 특정 버전으로 [Lambda 계층을 생성](#chapter-layers)하여 SDK 버전을 잠글 수 있습니다. 이후 함수는 서비스에 임베드된 버전이 변경되더라도 항상 계층의 버전을 사용합니다.

Go 또는 Rust에서 Lambda 함수를 사용하는 경우 계층을 사용하지 않는 것이 좋습니다. Go 및 Rust 함수의 경우 컴파일된 함수 코드와 모든 종속성을 포함하는 실행 파일로 함수 코드를 제공합니다. 종속 항목을 계층에 추가하면 함수가 초기화 단계에서 수동으로 추가 어셈블리를 로드해야 하기 때문에 콜드 시간이 늘어날 수 있습니다. Go 및 Rust 함수의 성능을 최적화하려면 배포 패키지와 함께 종속 항목을 포함하세요.

다음 다이어그램에서는 종속 항목을 공유하는 두 함수 간의 중요 아키텍처 차이를  보여줍니다. 하나는 Lambda 계층을 사용하고 다른 하나는 사용하지 않습니다.

![계층을 사용하지 않는 두 함수와 계층을 공유하는 두 함수에 대한 비교](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/lambda-layers-diagram.png)


함수에 계층을 추가하면 Lambda는 계층 콘텐츠를 함수 [실행 환경](lambda-runtime-environment.md)의 `/opt` 디렉터리로 추출합니다. 기본적으로 지원되는 모든 Lambda 런타임에는 `/opt` 디렉터리 내의 특정 디렉터리에 대한 경로가 포함되어 있습니다. 이를 통해 함수가 계층 콘텐츠에 액세스할 수 있습니다. 이러한 특정 경로와 계층을 올바르게 패키징하는 방법에 대한 자세한 내용은 [계층 콘텐츠 패키징](packaging-layers.md) 섹션을 참조하세요.

함수당 최대 5개의 계층을 포함할 수 있습니다. 또한 [.zip 파일 아카이브로 배포된](configuration-function-zip.md) Lambda 함수에서만 계층을 사용할 수 있습니다. [컨테이너 이미지로 정의된](images-create.md) 함수의 경우 컨테이너 이미지를 생성할 때 기본 런타임 및 모든 코드 종속 항목을 패키징합니다. 자세한 내용은 AWS 컴퓨팅 블로그에서 [컨테이너 이미지의 Lambda 계층 및 익스텐션 작업](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/)을 참조하세요.

**Topics**
+ [계층 사용 방법](#lambda-layers-overview)
+ [계층 및 계층 버전](#lambda-layer-versions)
+ [계층 콘텐츠 패키징](packaging-layers.md)
+ [Lambda에서 계층 생성 및 삭제](creating-deleting-layers.md)
+ [함수에 계층 추가](adding-layers.md)
+ [계층으로 AWS CloudFormation 작업](layers-cfn.md)
+ [계층으로 AWS SAM 작업](layers-sam.md)

## 계층 사용 방법
<a name="lambda-layers-overview"></a>

계층을 생성하려면 [일반 배포 패키지를 생성](configuration-function-zip.md)하는 방법과 유사하게 종속 항목을 .zip 파일로 패키징합니다. 보다 구체적으로, 계층을 생성하고 사용하는 일반적인 프로세스에는 다음 세 단계가 포함됩니다.
+ **먼저 계층 콘텐츠를 패키징합니다.** 즉, .zip 파일 아카이브를 생성합니다. 자세한 내용은 [계층 콘텐츠 패키징](packaging-layers.md) 섹션을 참조하세요.
+ **다음으로 Lambda에서 계층을 생성합니다.** 자세한 내용은 [Lambda에서 계층 생성 및 삭제](creating-deleting-layers.md) 섹션을 참조하세요.
+ **함수에 계층을 추가합니다.** 자세한 내용은 [함수에 계층 추가](adding-layers.md) 섹션을 참조하세요.

## 계층 및 계층 버전
<a name="lambda-layer-versions"></a>

계층 버전은 특정 계층 버전의 변경 불가능한 스냅샷입니다. 새 계층을 생성하면 Lambda는 버전 번호가 1인 새 계층 버전을 생성합니다. 계층에 업데이트를 게시할 때마다 Lambda는 버전 번호를 늘리고 새 계층 버전을 생성합니다.

모든 계층 버전은 고유한 Amazon 리소스 이름(ARN)으로 식별됩니다. 함수에 계층을 추가할 때 사용하려는 정확한 계층 버전(예: `arn:aws:lambda:us-east-1:123456789012:layer:my-layer:{{1}}`)을 지정해야 합니다.