

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

# 를 사용하여 서버리스 애플리케이션 디버깅 AWS SAM
<a name="debug-application"></a>

애플리케이션을 테스트한 후에는 발견된 문제를 디버깅해야 합니다. AWS SAM 명령줄 인터페이스(CLI)를 사용하면 서버리스 애플리케이션을 AWS 클라우드에 업로드하기 전에 로컬에서 테스트하고 디버깅할 수 있습니다. 애플리케이션을 디버깅하여 애플리케이션의 문제 또는 오류를 식별하고 수정합니다.

 AWS SAM 를 사용하여 한 번에 한 줄 또는 명령을 실행하는 방법인 단계별 디버깅을 수행할 수 있습니다. 내에서 디버그 모드에서 Lambda 함수를 로컬로 호출하면 디버거를 연결할 AWS SAM CLI수 있습니다. 디버거를 사용하면 코드를 한 줄씩 단계별로 실행하고, 다양한 변수의 값을 확인하고, 다른 애플리케이션과 동일한 방식으로 문제를 해결할 수 있습니다. 애플리케이션 패키징 및 배포 단계를 진행하기 전에 애플리케이션이 예상대로 작동하는지 확인하고, 무엇이 잘못되었는지 디버깅하고, 문제를 해결할 수 있습니다.

**참고**  
애플리케이션에 하나 이상의 계층이 포함된 경우 로컬에서 애플리케이션을 실행하고 디버깅하면 계층 패키지가 다운로드되고 로컬 호스트에 캐시됩니다. 자세한 내용은 [레이어가 로컬에 캐싱되는 방법](serverless-sam-cli-layers.md#local-testing-with-layers) 단원을 참조하십시오.

**Topics**
+ [를 사용하여 함수를 로컬로 디버깅 AWS SAM](serverless-sam-cli-using-debugging.md)
+ [를 사용하여 디버깅할 때 여러 런타임 인수 전달 AWS SAM](serverless-sam-cli-using-debugging-additional-arguments.md)
+ [CloudFormation Linter를 사용하여 AWS SAM 애플리케이션 검증](validate-cfn-lint.md)

# 를 사용하여 함수를 로컬로 디버깅 AWS SAM
<a name="serverless-sam-cli-using-debugging"></a>

다양한 AWS 도구 키트 및 디버거와 AWS SAM 함께를 사용하여 서버리스 애플리케이션을 로컬에서 테스트하고 디버깅할 수 있습니다. Lambda 함수의 단계별 디버깅을 사용하면 로컬 환경에서 코드 줄이나 명령을 한 번에 하나씩 실행하여 애플리케이션의 문제를 식별하고 수정할 수 있습니다.

로컬 단계별 디버깅을 수행하는 방법에는 중단점을 설정하고, 변수를 검사하고, 함수 코드를 한 번에 한 줄씩 실행하는 것이 포함됩니다. 로컬 단계별 디버깅을 사용하면 클라우드에서 발생할 수 있는 문제를 찾아 해결할 수 있어 피드백 루프가 강화됩니다.

 AWS 도구 키트를 사용하여 디버깅할 수 있으며 디버그 모드에서 AWS SAM 를 실행할 수도 있습니다. 자세한 내용은 이 섹션의 주제를 참조하세요.

## AWS 도구 키트 사용
<a name="serverless-sam-cli-using-aws-toolkits"></a>

AWS 도구 키트는 중단점 설정, 변수 검사, 한 번에 한 줄씩 함수 코드 실행과 같은 많은 일반적인 디버깅 작업을 수행할 수 있는 기능을 제공하는 통합 개발 환경(IDE) 플러그인입니다. AWS 도구 키트를 사용하면를 사용하여 구축된 서버리스 애플리케이션을 더 쉽게 개발, 디버깅 및 배포할 수 있습니다 AWS SAM. IDE에 통합된 Lambda 함수를 구축, 테스트, 디버깅, 배포 및 간접 호출할 수 있는 환경을 제공합니다.

사용할 수 있는 AWS 도구 키트에 대한 자세한 내용은 다음을 AWS SAM참조하세요.
+ [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/)
+ [AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/)
+ [AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/)

다양한 IDEs 및 런타임 조합으로 작동하는 다양한 AWS 도구 키트가 있습니다. 다음 표에는 AWS SAM 애플리케이션의 단계별 디버깅을 지원하는 일반적인 IDE/런타임 조합이 나열되어 있습니다.


| IDE | 런타임 | AWS 도구 키트 | 단계별 디버깅 지침 | 
| --- | --- | --- | --- | 
| Visual Studio Code |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/serverless-sam-cli-using-debugging.html)  | AWS Toolkit for Visual Studio Code | [사용자 가이드 AWS 서버리스 애플리케이션](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/serverless-apps.html) 내 AWS Toolkit for Visual Studio Code 를 이용한 작업  | 
| AWS Cloud9 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/serverless-sam-cli-using-debugging.html)  | AWS Cloud9, AWS 도구 키트가 활성화된 경우1 |  *AWS Cloud9 사용 설명서*[의 AWS 도구 키트를 사용하여 AWS 서버리스 애플리케이션 작업](https://docs.aws.amazon.com/cloud9/latest/user-guide/serverless-apps-toolkit.html).  | 
| WebStorm | Node.js | AWS Toolkit for JetBrains2 |  [https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html)내 로컬 함수 *AWS Toolkit for JetBrains실행(간접적으로 호출) 또는 디버깅*  | 
| PyCharm | Python | AWS Toolkit for JetBrains2 |  [https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html)내 로컬 함수 *AWS Toolkit for JetBrains실행(간접적으로 호출) 또는 디버깅*  | 
| Rider | .NET | AWS Toolkit for JetBrains2 |  [https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html)내 로컬 함수 *AWS Toolkit for JetBrains실행(간접적으로 호출) 또는 디버깅*  | 
| IntelliJ | Java | AWS Toolkit for JetBrains2 |  [https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html)내 로컬 함수 *AWS Toolkit for JetBrains실행(간접적으로 호출) 또는 디버깅*  | 
| GoLand | Go | AWS Toolkit for JetBrains2 |  [https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html)내 로컬 함수 *AWS Toolkit for JetBrains실행(간접적으로 호출) 또는 디버깅*  | 

**참고**:

1.  AWS Cloud9 를 사용하여 AWS SAM 애플리케이션을 단계별로 디버그하려면 AWS 도구 키트를 활성화해야 합니다. 자세한 내용은 *AWS Cloud9 사용 설명서*[의 AWS 도구 키트 활성화](https://docs.aws.amazon.com/cloud9/latest/user-guide/toolkit-welcome.html#access-toolkit)를 참조하세요.

1.  AWS Toolkit for JetBrains 를 사용하여 AWS SAM 애플리케이션을 단계별로 디버그하려면 먼저의 설치에 있는 지침에 따라 [애플리케이션을 설치하고 AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/setup-toolkit.html) 구성해야 합니다*AWS Toolkit for JetBrains*.

## 디버그 모드에서 AWS SAM 로컬로 실행
<a name="serverless-sam-cli-running-locally"></a>

 AWS 도구 키트와 통합하는 것 외에도 AWS SAM 디버그 모드에서를 실행하여 [ptvsd](https://pypi.org/project/ptvsd/) 또는 [delve](https://github.com/go-delve/delve)와 같은 타사 디버거에 연결할 수도 있습니다.

 AWS SAM 디버그 모드에서를 실행하려면 [sam local invoke](sam-cli-command-reference-sam-local-invoke.md) 또는 `-d` 옵션과 [sam local start-api](sam-cli-command-reference-sam-local-start-api.md) 함께 `--debug-port` 또는 명령을 사용합니다.

예제:

```
# Invoke a function locally in debug mode on port 5858
sam local invoke -d 5858 <function logical id>

# Start local API Gateway in debug mode on port 5858
sam local start-api -d 5858
```

**참고**  
`sam local start-api`을 사용하는 경우 로컬 API 게이트웨이 인스턴스는 모든 Lambda 함수를 노출합니다. 하지만 단일 디버그 포트를 지정할 수 있으므로 한 번에 하나의 함수만 디버깅할 수 있습니다. AWS SAMCLI가 포트에 바인딩하기 전에 API를 직접 호출해야 디버거가 연결할 수 있습니다.

# 를 사용하여 디버깅할 때 여러 런타임 인수 전달 AWS SAM
<a name="serverless-sam-cli-using-debugging-additional-arguments"></a>

문제를 검사하고 변수를 보다 효과적으로 해결하기 위해에 추가 런타임 인수 AWS SAM 를 전달하도록 선택할 수 있습니다. 이렇게 하면 디버깅 프로세스에 대한 제어 및 유연성이 향상되어 사용자 지정 런타임 구성 및 환경에서 더 쉽게 작업할 수 있습니다.

함수를 디버깅할 때 추가 런타임 인수를 전달하려면 환경 변수 `DEBUGGER_ARGS`를 사용합니다. 그러면 함수를 시작하는 데 AWS SAMCLI가 사용하는 실행 명령에 인수 문자열이 직접 전달됩니다.

예를 들어, Python 함수의 런타임에 IkPDB와 같은 디버거를 로드하려면 다음 항목들을 `DEBUGGER_ARGS: -m ikpdb --ikpdb-port=5858 --ikpdb-working-directory=/var/task/ --ikpdb-client-working-directory=/myApp --ikpdb-address=0.0.0.0`로서 전달할 수 있습니다. 이렇게 하면 지정한 다른 인수와 함께 IkPDB가 런타임에 로드됩니다.

이 경우 전체 AWS SAMCLI 명령은 다음과 같습니다.

```
DEBUGGER_ARGS="-m ikpdb --ikpdb-port=5858 --ikpdb-working-directory=/var/task/ --ikpdb-client-working-directory=/myApp --ikpdb-address=0.0.0.0" echo {} | sam local invoke -d 5858 myFunction
```

모든 런타임의 함수에 디버거 인수를 전달할 수 있습니다.

# CloudFormation Linter를 사용하여 AWS SAM 애플리케이션 검증
<a name="validate-cfn-lint"></a>

 AWS CloudFormation Linter(cfn-lint)는 템플릿에 대한 세부 검증을 수행하는 데 사용할 수 있는 오픈 소스 도구입니다 CloudFormation . Cfn-lint에는 CloudFormation 리소스 사양에 따라 안내되는 규칙이 포함되어 있습니다. cfn-lint를 사용하여 리소스를 해당 규칙과 비교하여 오류, 경고 또는 정보 제안에 대한 자세한 메시지를 받을 수 있습니다. 또는 자체 사용자 지정 규칙을 만들어 유효성을 검사할 수도 있습니다. cfn-lint에 대해 자세히 알아보려면 *CloudFormation GitHub 리포지토리*에서 [cfn-lint](https://github.com/aws-cloudformation/cfn-lint)를 참조합니다.

 cfn-lint를 사용하여 **--lint** 옵션과 **sam validate** 함께를 실행하여 AWS SAM 명령줄 인터페이스( )를 통해 AWS Serverless Application Model (AWS SAM CLI)AWS SAM템플릿을 검증할 수 있습니다.

```
sam validate --lint
```

 사용자 지정 규칙 생성 또는 유효성 검사 옵션 지정과 같은 cfn-lint 동작을 사용자 지정하려면 구성 파일을 정의하면 됩니다. 자세한 내용은 *cfn-lint CloudFormation GitHub 리포지토리*의 [Config 파일을](https://github.com/aws-cloudformation/cfn-lint#config-file) 참조하세요. **sam validate --lint**를 실행하면 구성 파일에 정의된 cfn-lint 동작이 적용됩니다.

## 예제
<a name="validate-cfn-lint-examples"></a>

### AWS SAM 템플릿에 대한 cfn-lint 검증 수행
<a name="validate-cfn-lint-examples-example1"></a>

```
sam validate --lint --template myTemplate.yaml
```

## 자세히 알아보기
<a name="validate-cfn-lint-learn"></a>

 **sam validate** 명령에 대한 자세한 내용은 [sam validate](sam-cli-command-reference-sam-validate.md) 섹션을 참조하세요.