

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

# 모범 사례
<a name="best-practices"></a>

**L1 구문**
+ 항상 L1 구문의 직접 사용을 피할 수는 없지만 가능하면 사용하지 않아야 합니다. 특정 L2 구문이 엣지 사례를 지원하지 않는 경우 L1 구문을 직접 사용하는 대신이 다음과 같은 두 옵션을 탐색할 수 있습니다.
  + **`defaultChild`에 액세스**:** **필요한 CloudFormation 속성을 L2 구문에서 사용할 수 없는 경우 `L2Construct.node.defaultChild`를 사용하여 기본 L1 구문에 액세스할 수 있습니다. L1 구문을 직접 생성하는 대신 이 속성을 통해 액세스하여 L1 구문의 퍼블릭 속성을 업데이트할 수 있습니다.
  + **속성 재정의 사용**: 업데이트하려는 속성이 퍼블릭이 아니면 어떻게 해야 하나요? AWS CDK에서 CloudFormation 템플릿에서 가능한 모든 작업을 수행할 수 있는 최종 이스케이프 해치는 모든 L1 구문에서 사용할 수 있는 메서드인 [addPropertyOverride](https://docs.aws.amazon.com/cdk/v2/guide/cfn_layer.html)를 사용하는 것입니다. CloudFormation 속성 이름과 값을 이 메서드에 직접 전달하여 CloudFormation 템플릿 수준에서 스택을 조작할 수 있습니다.

**L2 구문**
+ L2 구문이 자주 제공하는 헬퍼 메서드를 활용해야 합니다. 계층 2에서 인스턴스화할 때 모든 속성을 전달할 필요가 없습니다. L2 헬퍼 메서드를 사용하면 특히 조건부 로직이 필요한 경우 리소스를 굉장히 편리하게 프로비저할 수 있습니다. 가장 편리한 헬퍼 메서드 중 하나는 [Grant](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.Grant.html) 클래스에서 파생됩니다. 이 클래스는 직접 사용되지 않지만 많은 L2 구문이 이를 사용하여 권한을 훨씬 더 쉽게 구현할 수 있는 헬퍼 메서드를 제공합니다. 예를 들어 L2 Lambda 함수에 L2 S3 버킷에 액세스할 권한을 부여하려면 새 역할 및 정책을 생성하는 대신 `s3Bucket.grantReadWrite(lambdaFunction)`를 직접 호출할 수 있습니다.

**L3 구문**
+ L3 구문은 스택의 재사용 및 사용자 지정 기능을 더 강화하려는 경우에 매우 편리할 수 있지만 신중하게 사용하는 것이 좋습니다. 어떤 유형의 L3 구문이 필요한지 또는 L3 구문이 필요한지를 고려합니다.
  + AWS 리소스와 직접 상호 작용하지 않는 경우 `Construct` 클래스를 확장하는 대신 헬퍼 클래스를 만드는 것이 더 적절한 경우가 많습니다. `Construct` 클래스가 기본적으로 AWS 리소스와 직접 상호 작용하는 경우에만 필요한 많은 작업을 수행하기 때문입니다. 따라서 이러한 작업을 수행할 필요가 없는 경우 이러한 작업을 피하는 것이 더 효율적입니다.
  + 새 L3 구문을 생성하는 것이 적합하다고 판단되면 대부분의 경우 `Construct` 클래스를 직접 확장하려고 합니다. 구문의 기본 속성을 업데이트하려는 경우에만 다른 L2 구문을 확장합니다. 다른 L2 구문 또는 사용자 지정 로직이 관련된 경우 `Construct`를 직접 확장하고 생성자 내의모든 리소스를 인스턴스화합니다.