

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS Serverless Application Model (AWS SAM)란 무엇입니까?
<a name="what-is-sam"></a>

AWS Serverless Application Model (AWS SAM)는 코드형 인프라(IaC)를 사용하여 서버리스 애플리케이션을 빌드하기 위한 오픈 소스 프레임워크입니다. 개발자는 AWS SAM의 간편 구문을 사용하여 배포 중에 인프라로 변환되는 [CloudFormation](https://aws.amazon.com/cloudformation) 리소스와 특수 서버리스 리소스를 선언합니다. 작업 시 다음과 상호 작용 AWS SAM합니다.

1. AWS SAM CLI - 서버리스 애플리케이션을 개발, 로컬 테스트 및 배포하는 데 도움이 되는 명령줄 도구입니다.

1. AWS SAM 템플릿 - 서버리스 리소스를 정의 CloudFormation 하기 위한 간소화된 구문을 제공하는의 확장입니다.

**sam init** 명령을 사용하면 일반적으로 AWS SAM 템플릿, 애플리케이션 코드 및 기타 구성 파일이 포함된 프로젝트라고 하는 AWS SAM 프로젝트 디렉터리가 생성됩니다.

## 를 사용해야 하는 경우 AWS SAM
<a name="when-to-use-sam"></a>

AWS SAM 는의 모든 기능을 갖춘 간소화된 서버리스 개발을 원하는 시나리오에 이상적인 IaC 솔루션입니다 CloudFormation. 예를 들어 SAM을 다음에 사용할 수 있습니다.
+ **서버리스 애플리케이션:** SAM을 사용하여 최소한의 코드로 AWS Lambda 함수, Lambda 내구성 함수, Amazon API Gateway APIs, Amazon DynamoDB 테이블 및 기타 서버리스 리소스를 빠르게 정의할 수 있습니다.
+ **CloudFormation 기능 향상:** SAM을 기존 CloudFormation 템플릿과 결합하여 기존 인프라에 서버리스 구성 요소를 추가할 수 있습니다. SAM 리소스는 동일한 템플릿의 표준 CloudFormation 리소스와 함께 작동합니다.
+ **로컬 개발 및 테스트:** SAM CLI을(를) 사용하여 AWS에 배포하기 전에 개발 머신에서 Lambda 함수를 로컬로 테스트하고, API Gateway 엔드포인트를 시뮬레이션하며, 서버리스 애플리케이션을 디버그할 수 있습니다.
+ **서버리스용 CI/CD:** 스테이징 및 프로덕션 환경에 필요한 CloudFormation 인프라를 자동으로 생성하는 SAM 템플릿을 사용하여 배포 파이프라인을 구축할 수 있습니다.
+ **콘솔 생성 리소스에서 마이그레이션:** SAM 템플릿을 사용하여 AWS 관리 콘솔에서 생성된 Lambda 함수 및 API Gateway 리소스를 코드형 인프라로 변환할 수 있습니다.

** AWS SAM 다른 IaC 도구와 비교**
+ 템플릿 호환성을 유지하면서 서버리스 리소스 정의를 단순화하려면 CloudFormation 대신 SAM을 사용하세요.
+ 프로그래밍 방식 대신 인프라를 설명하는 선언적 접근 방식을 선호하는 AWS CDK 경우 대신 SAM을 사용합니다.
+ SAM CLI의 로컬 테스트 기능을 사용하여 CDK 애플리케이션을 개선 AWS CDK 하여 SAM을와 결합합니다.

## 주요 기능
<a name="what-is-sam-feature"></a>

AWS SAM 는 다음을 수행하여 개발자 경험을 개선하는 다양한 이점을 제공합니다.

**더 적은 코드를 사용하여 애플리케이션 인프라 코드 빠르게 정의하기**  
 AWS SAM 템플릿을 작성하여 서버리스 애플리케이션 인프라 코드를 정의합니다. 템플릿을에 직접 배포 CloudFormation 하여 리소스를 프로비저닝합니다.

**전체 개발 수명 주기에 걸쳐 서버리스 애플리케이션을 관리합니다.**  
개발 수명 주기의 작성, 구축, 배포, 테스트 및 모니터링 단계에 걸쳐 서버리스 애플리케이션을 관리하려면 AWS SAMCLI를 사용합니다. 자세한 내용은 [AWS SAM CLI](using-sam-cli.md) 단원을 참조하십시오.

** AWS SAM 커넥터를 사용하여 리소스 간에 권한을 빠르게 프로비저닝**  
 AWS SAM 템플릿의 AWS SAM 커넥터를 사용하여 AWS 리소스 간에 권한을 정의합니다.는 코드를 의도를 용이하게 하는 데 필요한 IAM 권한으로 AWS SAM 변환합니다. 자세한 내용은 [AWS SAM 커넥터를 사용하여 리소스 권한 관리](managing-permissions-connectors.md) 단원을 참조하십시오.

**개발 과정에서 로컬 변경 사항을 클라우드에 지속적으로 동기화**  
**sam sync** 명령을 사용하여 AWS SAM CLI 로컬 변경 사항을 클라우드에 자동으로 동기화하여 개발 및 클라우드 테스트 워크플로의 속도를 높입니다. 자세한 내용은 [를 사용하여 sam sync에 동기화 소개 AWS 클라우드](using-sam-cli-sync.md) 단원을 참조하십시오.

**Terraform 서버리스 애플리케이션 관리**  
 AWS SAMCLI를 사용하여 Lambda 함수 및 계층의 로컬 디버깅 및 테스트를 수행할 수 있습니다. 자세한 내용은 [AWS SAM CLI Terraform 지원](terraform-support.md) 단원을 참조하십시오.

## 관련 정보
<a name="w2aab5c15"></a>
+  AWS SAM 작동 방식에 대한 자세한 내용은 단원을 참조하십시오[AWS SAM 작동 방식](what-is-sam-overview.md).
+ 사용을 시작하려면 AWS SAM섹션을 참조하세요[시작하기 AWS SAM](serverless-getting-started.md).
+  AWS SAM 를 사용하여 서버리스 애플리케이션을 생성하는 방법에 대한 개요는 섹션을 참조하세요[사용 방법 AWS SAM](chapter-using-sam.md#chapter-using-sam.title).

# AWS SAM 작동 방식
<a name="what-is-sam-overview"></a>

 AWS SAM 를 사용하여 서버리스 애플리케이션을 생성할 때 다음 구성 요소와 상호 작용합니다.

1. **[AWS SAM 템플릿](sam-specification.md)** - AWS 리소스를 정의하는 중요한 파일입니다. 이 템플릿에는 **AWS SAM 템플릿 사양**, 즉 서버리스 애플리케이션의 함수, 이벤트, API, 구성 및 권한을 정의하는 데 사용하는 간소화된 간편 구문을 제공하는 오픈 소스 프레임워크가 포함되어 있습니다. 이 파일은 **sam init** 명령을 실행할 때 생성되는 애플리케이션 폴더인 AWS SAM 프로젝트에 있습니다.

1. **[AWS SAM CLI](using-sam-cli.md)** - AWS SAM 프로젝트 및 지원되는 타사 통합과 함께 사용하여 서버리스 애플리케이션을 구축하고 실행할 수 있는 명령줄 도구입니다. AWS SAM CLI는 AWS SAM 프로젝트에서 명령을 실행하고 결국 서버리스 애플리케이션으로 전환하는 데 사용하는 도구입니다.

서버리스 애플리케이션을 정의하는 리소스, 이벤트 소스 매핑 및 기타 속성을 표현하려면 AWS SAM 프로젝트의 AWS SAM 템플릿 및 기타 파일에서 리소스를 정의하고 애플리케이션을 개발합니다. 를 AWS SAM CLI 사용하여 AWS SAM 프로젝트에서 명령을 실행합니다. 이렇게 하면 서버리스 애플리케이션을 초기화, 빌드, 테스트 및 배포할 수 있습니다.

**서버리스 개념이 생소하신가요?**  
[에 대한 서버리스 개념 AWS Serverless Application Model](what-is-concepts.md) 섹션을 검토하는 것이 좋습니다.

## AWS SAM 템플릿 사양이란 무엇입니까?
<a name="what-is-sam-template-spec"></a>

 AWS SAM 템플릿 사양은 서버리스 애플리케이션 인프라 코드를 정의하고 관리하는 데 사용할 수 있는 오픈 소스 프레임워크입니다. AWS SAM 템플릿 사양은 다음과 같습니다.
+ **기본 제공 AWS CloudFormation** CloudFormation - AWS SAM 템플릿에서 직접 구문을 사용하여 리소스 및 속성 구성에 대한 광범위한 지원을 활용합니다. 이미에 익숙하다면 애플리케이션 인프라 코드를 관리하기 위해 새 서비스를 배울 필요가 CloudFormation없습니다.
+ **확장 CloudFormation**-는 특히 서버리스 개발 속도 향상에 초점을 맞춘 고유한 구문을 AWS SAM 제공합니다. 동일한 템플릿 내에서 CloudFormation 및 AWS SAM 구문을 모두 사용할 수 있습니다.
+ **추상적이고 간단한 구문** - AWS SAM 구문을 사용하면 코드 줄 수를 줄이고 오류 발생 가능성을 줄이면서 인프라를 빠르게 정의할 수 있습니다. 구문은 서버리스 애플리케이션 인프라를 정의하는데 있어 복잡함을 해소할 수 있도록 특별히 엄선되었습니다.
+ **변환** - 템플릿을 인프라를 프로비저닝하는 데 필요한 코드로 변환하는 복잡한 작업을 AWS SAM 수행합니다 CloudFormation.

## AWS SAM 프로젝트와 AWS SAM 템플릿이란 무엇입니까?
<a name="what-is-sam-template"></a>

 AWS SAM 프로젝트에는 AWS SAM 템플릿 사양이 포함된 AWS SAM 템플릿이 포함됩니다. 이 사양은 서버리스 애플리케이션 인프라를 정의하는 데 사용하는 오픈 소스 프레임워크이며 AWS, 몇 가지 추가 구성 요소를 사용하여 작업을 더 쉽게 수행할 수 있습니다. 이러한 의미에서 AWS SAM 템플릿은 CloudFormation 템플릿의 확장입니다.

다음은 기본 서버리스 애플리케이션의 예입니다. 이 애플리케이션은 HTTP 요청을 통해 데이터베이스의 모든 항목을 가져오는 요청을 처리합니다. 이것은 다음과 같은 요소로 구성됩니다.

1. 요청을 처리하는 로직이 포함된 함수.

1. 클라이언트(요청자)와 애플리케이션 간의 통신 역할을 하는 HTTP API.

1. 항목을 저장하는 데이터베이스.

1. 애플리케이션을 안전하게 실행할 수 있는 권한.

![\[간단한 서버리스 애플리케이션의 애플리케이션 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/images/what-is-sam-06.png)


이 애플리케이션의 인프라 코드는 다음 AWS SAM 템플릿에서 정의할 수 있습니다.

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Resources:
  getAllItemsFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src/get-all-items.getAllItemsHandler
      Runtime: nodejs20.x
      Events:
        Api:
          Type: HttpApi
          Properties:
            Path: /
            Method: GET
    Connectors:
      MyConn:
        Properties:
          Destination:
            Id: SampleTable
          Permissions:
            - Read
  SampleTable:
    Type: AWS::Serverless::SimpleTable
```

23줄의 코드에는 다음과 같은 인프라가 정의되어 있습니다.
+  AWS Lambda 서비스를 사용하는 함수입니다.
+ Amazon API Gateway 서비스를 사용하는 HTTP API.
+ Amazon DynamoDB 서비스를 사용하는 데이터베이스.
+ 이러한 서비스가 서로 상호 작용하는 데 필요한 AWS Identity and Access Management (IAM) 권한입니다.

이 인프라를 프로비저닝하기 위해 템플릿이 CloudFormation로 배포됩니다. 배포 중에는 23줄의 코드를 이러한 리소스를 생성하는 데 필요한 CloudFormation 구문으로 AWS SAM 변환합니다 AWS. 변환된 CloudFormation 템플릿에는 200줄 이상의 코드가 포함되어 있습니다.

### 변환된 CloudFormation 템플릿
<a name="what-is-sam-template-example-cfn"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
    "getAllItemsFunction": {
      "Type": "AWS::Lambda::Function",
      "Metadata": {
        "SamResourceId": "getAllItemsFunction"
      },
      "Properties": {
        "Code": {
          "S3Bucket": "amzn-s3-demo-source-bucket-1a4x26zbcdkqr",
          "S3Key": "what-is-app/a6f856abf1b2c4f7488c09b367540b5b"
        },
        "Handler": "src/get-all-items.getAllItemsHandler",
        "Role": {
          "Fn::GetAtt": [
            "getAllItemsFunctionRole",
            "Arn"
          ]
        },
        "Runtime": "nodejs12.x",
        "Tags": [
          {
            "Key": "lambda:createdBy",
            "Value": "SAM"
          }
        ]
      }
    },
    "getAllItemsFunctionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "lambda.amazonaws.com"
                ]
              }
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
        ],
        "Tags": [
          {
            "Key": "lambda:createdBy",
            "Value": "SAM"
          }
        ]
      }
    },
    "getAllItemsFunctionApiPermission": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Ref": "getAllItemsFunction"
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Sub": [
            "arn:${AWS::Partition}:execute-api:${AWS::Region}:${AWS::AccountId}:${__ApiId__}/${__Stage__}/GET/",
            {
              "__ApiId__": {
                "Ref": "ServerlessHttpApi"
              },
              "__Stage__": "*"
            }
          ]
        }
      }
    },
    "ServerlessHttpApi": {
      "Type": "AWS::ApiGatewayV2::Api",
      "Properties": {
        "Body": {
          "info": {
            "version": "1.0",
            "title": {
              "Ref": "AWS::StackName"
            }
          },
          "paths": {
            "/": {
              "get": {
                "x-amazon-apigateway-integration": {
                  "httpMethod": "POST",
                  "type": "aws_proxy",
                  "uri": {
                    "Fn::Sub": "arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${getAllItemsFunction.Arn}/invocations"
                  },
                  "payloadFormatVersion": "2.0"
                },
                "responses": {}
              }
            }
          },
          "openapi": "3.0.1",
          "tags": [
            {
              "name": "httpapi:createdBy",
              "x-amazon-apigateway-tag-value": "SAM"
            }
          ]
        }
      }
    },
    "ServerlessHttpApiApiGatewayDefaultStage": {
      "Type": "AWS::ApiGatewayV2::Stage",
      "Properties": {
        "ApiId": {
          "Ref": "ServerlessHttpApi"
        },
        "StageName": "$default",
        "Tags": {
          "httpapi:createdBy": "SAM"
        },
        "AutoDeploy": true
      }
    },
    "SampleTable": {
      "Type": "AWS::DynamoDB::Table",
      "Metadata": {
        "SamResourceId": "SampleTable"
      },
      "Properties": {
        "AttributeDefinitions": [
          {
            "AttributeName": "id",
            "AttributeType": "S"
          }
        ],
        "KeySchema": [
          {
            "AttributeName": "id",
            "KeyType": "HASH"
          }
        ],
        "BillingMode": "PAY_PER_REQUEST"
      }
    },
    "getAllItemsFunctionMyConnPolicy": {
      "Type": "AWS::IAM::ManagedPolicy",
      "Metadata": {
        "aws:sam:connectors": {
          "getAllItemsFunctionMyConn": {
            "Source": {
              "Type": "AWS::Serverless::Function"
            },
            "Destination": {
              "Type": "AWS::Serverless::SimpleTable"
            }
          }
        }
      },
      "Properties": {
        "PolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:BatchGetItem",
                "dynamodb:ConditionCheckItem",
                "dynamodb:PartiQLSelect"
              ],
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "SampleTable",
                    "Arn"
                  ]
                },
                {
                  "Fn::Sub": [
                    "${DestinationArn}/index/*",
                    {
                      "DestinationArn": {
                        "Fn::GetAtt": [
                          "SampleTable",
                          "Arn"
                        ]
                      }
                    }
                  ]
                }
              ]
            }
          ]
        },
        "Roles": [
          {
            "Ref": "getAllItemsFunctionRole"
          }
        ]
      }
    }
  }
}
```

를 사용하면 23줄의 인프라 코드를 AWS SAM정의합니다.는 애플리케이션을 프로비저닝하는 데 필요한 200줄 이상의 CloudFormation 코드로 코드를 AWS SAM 변환합니다.

## 란 무엇입니까 AWS SAM CLI?
<a name="what-is-sam-cli"></a>

는 AWS SAM CLI AWS SAM 템플릿 및 지원되는 타사 통합과 함께 사용하여 서버리스 애플리케이션을 빌드하고 실행할 수 있는 명령줄 도구입니다. AWS SAMCLI를 사용하여 다음을 수행할 수 있습니다.
+ 새 애플리케이션 프로젝트를 빠르게 초기화합니다.
+ 배포할 애플리케이션을 빌드합니다.
+ 로컬 디버깅 및 테스트를 수행합니다.
+ 애플리케이션 배포
+ CI/CD 배포 파이프라인을 구성합니다.
+ 클라우드에서 애플리케이션을 모니터링하고 문제를 해결합니다.
+ 개발 과정에서 로컬 변경 사항을 클라우드에 동기화합니다.
+ 이 뿐만이 아닙니다\$1

는 AWS SAM CLI AWS SAM 및 CloudFormation 템플릿과 함께 사용할 때 가장 잘 활용됩니다. Terraform과 같은 타사 제품에서도 사용할 수 있습니다.

### 새 프로젝트 초기화
<a name="what-is-sam-cli-init"></a>

스타터 템플릿 중에서 선택하거나 사용자 지정 템플릿 위치를 선택하여 새 프로젝트를 시작할 수 있습니다.

여기서는 **sam init** 명령을 사용하여 새 애플리케이션 프로젝트를 초기화합니다. 먼저 시작할 **Hello World 예제** 프로젝트를 선택합니다. 그러면 AWS SAMCLI가 스타터 템플릿을 다운로드하고 프로젝트 폴더 디렉터리 구조가 생성합니다.

![\[sam init를 사용하여 AWS SAMCLI로 새 애플리케이션 프로젝트를 시작합니다.\]](http://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/images/what-is-sam-01.gif)


자세한 내용은 [에서 애플리케이션 생성 AWS SAM](using-sam-cli-init.md) 섹션을 참조하세요.

### 배포를 위한 애플리케이션 빌드
<a name="what-is-sam-cli-build"></a>

함수 종속 항목을 패키징하고 프로젝트 코드 및 폴더 구조를 구성하여 배포를 준비합니다.

여기서는 **sam build** 명령을 사용하여 애플리케이션을 배포할 준비를 합니다. AWS SAMCLI는 `.aws-sam` 디렉터리를 만들고 배포를 위해 여기에 애플리케이션 종속성 및 파일을 구성합니다.

![\[sam build를 사용하여 배포를 위해 애플리케이션를 준비합니다.\]](http://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/images/what-is-sam-02.gif)


자세한 내용은 [애플리케이션 빌드](serverless-building.md) 섹션을 참조하세요.

### 로컬 디버깅 및 테스트 수행
<a name="what-is-sam-cli-local"></a>

로컬 컴퓨터에서 이벤트를 시뮬레이션하고, API를 테스트하고, 함수를 간접 호출하는 등 다양한 작업을 수행하여 애플리케이션을 디버깅 및 테스트할 수 있습니다.

여기서는 **sam local invoke** 명령을 사용하여 로컬에서 `HelloWorldFunction`를 간접 호출합니다. 이를 위해 AWS SAMCLI는 로컬 컨테이너를 만들고, 함수를 빌드하고, 간접 호출하고, 결과를 출력합니다. Docker와 같은 애플리케이션을 사용하여 시스템에서 컨테이너를 실행할 수 있습니다.

![\[sam local invoke 명령을 사용하여 함수를 로컬로 호출합니다 AWS SAM CLI.\]](http://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/images/what-is-sam-04.gif)


자세한 내용은 [애플리케이션 테스트](serverless-test-and-debug.md) 및 [애플리케이션 디버깅](debug-application.md) 섹션을 참조하세요.

### 애플리케이션 배포
<a name="what-is-sam-cli-deploy"></a>

애플리케이션의 배포 설정을 구성하고 AWS 클라우드에 배포하여 리소스를 프로비저닝합니다.

여기서는 **sam deploy --guided** 명령을 사용하여 대화형 흐름을 통해 애플리케이션을 배포합니다. 는 AWS SAM CLI 애플리케이션의 배포 설정을 구성하는 과정을 안내하고, 템플릿을 로 변환하고 CloudFormation,에 배포하여 CloudFormation 리소스를 생성합니다.

![\[sam deploy 명령을 사용하여 AWS SAM CLI AWS 클라우드에 애플리케이션을 배포합니다.\]](http://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/images/what-is-sam-03.gif)


자세한 내용은 [애플리케이션 및 리소스 배포](serverless-deploying.md) 섹션을 참조하세요.

### CI/CD 배포 파이프라인 구성
<a name="what-is-sam-cli-cicd"></a>

지원되는 CI/CD 시스템을 사용하여 안전한 *지속적 통합 및 제공(CI/CD)* 파이프라인을 생성합니다.

여기서는 **sam pipeline init --bootstrap** 명령을 사용하여 애플리케이션을 위한 CI/CD 배포 파이프라인을 구성합니다. 는 AWS SAM CLI 옵션을 안내하고 CI/CD 시스템과 함께 사용할 AWS 리소스 및 구성 파일을 생성합니다.

![\[sam pipeline init --bootstrap 명령을 사용하여 AWS SAM CLI 선호하는 CI/CD 시스템으로 CI/CD 파이프라인을 구성합니다.\]](http://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/images/what-is-sam-07.gif)


자세한 내용은 [CI/CD 시스템 및 파이프라인을 사용하여 배포](deploying-options.md#serverless-deploying-ci-cd) 섹션을 참조하세요.

### 클라우드에서 애플리케이션 모니터링 및 문제 해결
<a name="what-is-sam-cli-monitor"></a>

배포된 리소스에 대한 중요한 정보를 보고, 로그를 수집하고, AWS X-Ray와 같은 기본 제공 모니터링 도구를 활용합니다.

여기서는 **sam list** 명령을 사용하여 배포된 리소스를 확인합니다. API 엔드포인트를 가져와서 간접 호출하면 함수가 트리거됩니다. 그런 다음 **sam logs**를 사용하여 함수의 로그를 확인합니다.

![\[sam list 명령을 사용하여 API 엔드포인트를 AWS SAM CLI 가져옵니다. 그런 다음, sam logs는 함수의 로그를 보는 데 사용됩니다.\]](http://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/images/what-is-sam-08.gif)


자세한 내용은 [애플리케이션 모니터링](serverless-monitoring.md) 섹션을 참조하세요.

### 개발 과정에서 로컬 변경 사항을 클라우드에 동기화
<a name="what-is-sam-cli-sync"></a>

로컬 시스템에서 개발할 때 변경 내용을 클라우드에 자동으로 동기화합니다. 변경 사항을 빠르게 확인하고 클라우드에서 테스트 및 검증을 수행할 수 있습니다.

여기서는 **sam sync --watch** 명령을 사용하여 AWS SAMCLI가 로컬 변경 사항을 감시하도록 합니다. `HelloWorldFunction` 코드를 수정하면 AWS SAMCLI가 변경 사항을 자동으로 감지하고 업데이트를 클라우드에 배포합니다.

![\[sam sync 명령을 사용하여 로컬 변경 사항을 AWS 클라우드에 동기화합니다 AWS SAM CLI.\]](http://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/images/what-is-sam-05.gif)


### 클라우드에서 지원되는 리소스 테스트
<a name="what-is-sam-cli-remote-invoke"></a>

이벤트를 간접 호출하고 클라우드의 지원되는 리소스에 전달합니다.

여기서는 **sam remote invoke** 명령을 사용하여 클라우드에 배포된 Lambda 함수를 테스트합니다. Lambda 함수를 간접 호출하고 해당 로그와 응답을 받습니다. 응답을 스트리밍하도록 구성된 Lambda 함수를 사용하면 AWS SAMCLI가 실시간으로 응답을 다시 스트리밍합니다.

![\[sam remote invoke 명령을 사용하여 AWS 클라우드에 배포된 함수를 테스트합니다 AWS SAM CLI.\]](http://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/images/what-is-sam-09.gif)


## 자세히 알아보기
<a name="what-is-sam-learn"></a>

계속 알아보려면 다음 리소스를 AWS SAM참조하세요.
+ **[전체 AWS SAM 워크숍 ](https://s12d.com/sam-ws-en-intro)**-가 AWS SAM 제공하는 많은 주요 기능을 가르치도록 설계된 워크숍입니다.
+ **[ SAM을 사용한 세션](https://www.youtube.com/playlist?list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd)** -를 사용하는 서버 AWS 리스 개발자 지지 팀이 만든 비디오 시리즈입니다 AWS SAM.
+ **[서버리스 랜드](https://serverlessland.com/)** - AWS 서버리스에 대한 최신 정보, 블로그, 비디오, 코드 및 학습 리소스를 통합하는 사이트입니다.

## 다음 단계
<a name="what-is-sam-next"></a>

를 처음 사용하는 경우 단원을 AWS SAM참조하십시오[시작하기 AWS SAM](serverless-getting-started.md).

# 에 대한 서버리스 개념 AWS Serverless Application Model
<a name="what-is-concepts"></a>

 AWS Serverless Application Model ()를 사용하기 전에 기본 서버리스 개념에 대해 알아봅니다AWS SAM.

## 서버리스 개념
<a name="what-is-concepts-terms"></a>

**이벤트 중심 아키텍처**  <a name="what-is-concepts-terms-eda"></a>
서버리스 애플리케이션은 컴퓨팅용 및 데이터베이스 관리를 AWS Lambda 위한 Amazon DynamoDB와 같이 각각 특수 역할을 수행하는 개별 AWS 서비스로 구성됩니다. 이러한 서비스는 이벤트 기반 아키텍처를 통해 서로 느슨하게 통합됩니다. 이벤트 기반 아키텍처에 대해 자세히 알아보려면 [이벤트 기반 아키텍처란 무엇인가요?](https://aws.amazon.com/event-driven-architecture/)를 참조하세요.

**코드형 인프라(IaC)**  <a name="what-is-concepts-terms-iac"></a>
코드형 인프라(IaC)는 개발자가 코드를 다루는 것과 동일한 방식으로 인프라를 취급하는 방식으로, 인프라 프로비저닝에도 동일하게 애플리케이션 코드 개발의 엄격함을 적용합니다. 템플릿 파일에서 인프라를 정의하고, 배포하고 AWS, 리소스를 AWS 생성합니다. IaC를 사용하면 프로비저닝 AWS 할 항목을 코드로 정의합니다. 에 사용할 수 있는 IaC 도구의 비교는 섹션을 AWS참조하세요[코드형 인프라(IaC)](what-is-iac.md).

**서버리스 기술**  <a name="what-is-concepts-terms-serverless"></a>
 AWS 서버리스 기술을 사용하면 자체 서버를 관리할 필요 없이 애플리케이션을 구축하고 실행할 수 있습니다. 모든 서버 관리는에서 수행되므로 자동 조정 및 기본 제공 고가용성과 같은 많은 이점을 AWS제공하므로 프로덕션에 신속하게 아이디어를 사용할 수 있습니다. 서버리스 기술을 사용하면 서버 관리 및 운영에 대해 걱정할 필요 없이 제품의 핵심에만 집중할 수 있습니다. 서버리스에 대한 자세한 내용은 다음 주제를 참조하세요.  
+ [의 서버리스 AWS](https://aws.amazon.com/serverless/)
+ [서버리스 개발자 가이드](https://docs.aws.amazon.com/serverless/latest/devguide/serverless-preface.html) - AWS 클라우드에서의 서버리스 개발에 대한 개념적 개요를 제공합니다.
코어 AWS 서버리스 서비스에 대한 기본 소개는 [Serverless 101: Understanding the serverless services](https://serverlessland.com/learn/serverless-101) at *Serverless Land*를 참조하세요.

**서버리스 애플리케이션**  <a name="what-is-concepts-terms-serverless"></a>
를 사용하면 AWS SAM 프로젝트와 템플릿으로 구성된 애플리케이션에서 관련 리소스를 AWS SAM관리합니다. 애플리케이션의 모든 리소스는 AWS SAM 템플릿에서 정의되거나 참조됩니다. 가 템플릿을 AWS SAM 처리할 때 CloudFormation 리소스를 생성합니다. 에서 CloudFormation리소스는 스택이라는 단일 단위로 관리되며 스택의 모든 리소스는 스택의 CloudFormation 템플릿에 의해 정의됩니다.

# 코드형 인프라(IaC)
<a name="what-is-iac"></a>

코드형 인프라(IaC)를 사용하면 서버리스 애플리케이션을 포함한 AWS 리소스의 배포 및 관리를 자동화할 수 있습니다. IaC를 사용하면 코드를 사용하여 인프라를 정의할 수 있으므로 배포를 버전 관리, 공유 및 복제하기가 더 쉽습니다. 이 접근 방식은 다음과 같은 이점을 제공합니다.
+ 개발 주기 단축
+ 구성 관리 간소화
+ 배포의 안정성 및 일관성 향상

## AWS 서버리스 애플리케이션을 위한 IaC 도구
<a name="iac-tools-aws"></a>

AWS 는 클라우드 리소스를 빌드, 배포 및 관리하는 데 도움이 되는 여러 IaC 도구를 제공합니다. 이 섹션에서는가이 에코시스템에 얼마나 AWS SAM 적합하고 다른 AWS IaC 도구에서 어떻게 작동하는지 설명합니다.

**AWS CloudFormation**  
를 사용하면 YAML 또는 JSON 템플릿을 사용하여 전체 AWS 인프라를 모델링하고 프로비저닝[CloudFormation](https://aws.amazon.com/cloudformation/)할 수 있습니다.는 리소스 생성, 업데이트 및 삭제를 자동으로 CloudFormation 처리합니다. AWS SAM 애플리케이션을 배포할 때는 변환된 템플릿을 CloudFormation 처리하여 리소스를 생성하고 관리합니다.

**AWS Serverless Application Model (AWS SAM)**  
AWS SAM 를 사용하면 서버리스 리소스를 정의하기 위한 간소화된 구문으로 서버리스 애플리케이션을 구축할 수 있습니다. AWS SAM 템플릿을 사용하여 간결한 YAML 구문을 사용하여 Lambda 함수, APIs, 데이터베이스 및 이벤트 소스를 프로비저닝할 수 있습니다.는 배포 중에 이러한 템플릿을 CloudFormation 템플릿으로 AWS SAM 변환합니다.  
는 서버리스 애플리케이션을 AWS SAM 전문으로 하지만 AWS SAM 템플릿의 모든 CloudFormation 리소스 유형을 사용할 수 있습니다. 이를 통해 필요할 때 비서버리스 리소스를 유연하게 포함할 수 있습니다.

**AWS 클라우드 개발 키트(AWS CDK)**  
[AWS CDK](https://aws.amazon.com/cdk/)을(를) 사용하면 TypeScript, Python, Java, C\$1/.Net, 또는 Go와 같은 친숙한 프로그래밍 언어를 사용하여 서버리스 인프라를 정의할 수 있습니다. 루프 및 조건과 같은 프로그래밍 구문을 사용하여 인프라를 정의하고 배포용 CloudFormation 템플릿을 AWS CDK 생성할 수 있습니다. 를 AWS SAM CLI 사용하여 로 생성된 애플리케이션을 로컬에서 테스트하고 디버깅할 수 있습니다 AWS CDK. 자세한 내용은 [로컬에서 CDK 애플리케이션 테스트](https://docs.aws.amazon.com/cdk/v2/guide/testing-locally.html)를 참조하세요.

## 서버리스 애플리케이션을 위한 IaC 도구 비교
<a name="comparing-iac-tools"></a>

서버리스 애플리케이션을 위한 IaC 도구를 선택할 때는 팀의 선호도, 프로젝트 요구 사항 및 기존 워크플로를 고려하세요. 다음 표에서는 서버리스 개발을 위한 AWS IaC 도구의 주요 특성을 비교합니다.


| **도구** | **프라이머리 사용** | **최적의 용도** | **에서 작동 AWS SAM** | **선택 시기** | 
| --- | --- | --- | --- | --- | 
| **CloudFormation** | 복잡한 AWS 인프라 관리 |  AWS 리소스를 세부적으로 제어해야 하는 애플리케이션 | AWS SAM 배포 중 템플릿이 CloudFormation 템플릿으로 변환됨 | 비서버리스 리소스에 대한 세밀한 제어의 경우 | 
| **AWS SAM** | 서버리스 애플리케이션 개발 | Lambda를 사용하여 서버리스 애플리케이션을 구축하는 팀 | 네이티브 기능 | Lambda 함수, API Gateway API 및 기타 서버리스 리소스로 구성된 서버리스 아키텍처에 주로 초점을 맞출 때 | 
| **AWS CDK** | 프로그래밍 언어를 사용한 인프라 정의 | 입력한 언어와 코드 우선 접근 방식을 선호하는 팀 |  AWS SAM 템플릿 생성 및 테스트에 사용 AWS SAM CLI  | 프로그래밍 방식의 인프라 정의 또는 복잡한 리소스 구성 로직이 필요할 때 | 

**참고**  
이 가이드에서는 AWS네이티브 IaC 도구를 중점적으로 다루지만 Terraform은 서버리스 애플리케이션을 정의하는 데 사용할 수 있는 또 다른 인기 있는 IaC 솔루션입니다. AWS SAM CLI은(는) Terraform에 정의된 Lambda 함수의 로컬 테스트를 지원합니다. 자세한 내용은 [AWS SAM CLI Terraform 지원](terraform-support.md) 단원을 참조하십시오.

## 자세히 알아보기
<a name="iac-learn-more"></a>
+ 의 DevOps 사례에 대한 자세한 내용은의 DevOps 소개를 AWS참조하세요. [ DevOps AWS](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html)
+ 다양한 IaC 도구와 함께 Lambda를 사용하는 방법에 대한 자세한 내용은 [코드형 인프라(IaC)와 함께 Lambda 사용](https://docs.aws.amazon.com/lambda/latest/dg/foundation-iac.html)을 참조하세요.