CDK의 기본 구조를 넘어 실제 운영 환경에서 복잡한 인프라를 안전하고 유연하게 관리하기 위해 반드시 알아야 하는 핵심 철학이 존재한다. 이 개념들은 CDK가 단순한 스크립트 도구를 넘어 왜 프레임워크인지를 증명하는 요소들이다.
시스템 전체에 일관된 규칙을 어떻게 적용할 것인가?에 대한 답
Aspect는 객체 지향의 방문자 패턴(Visitor Pattern)을 인프라에 적용한 개념이다. 특정 범위(Scope) 내의 모든 리소스를 순회하며 일괄적인 변경이나 검증을 수행할 때 사용한다.
public class BucketTaggingAspect implements IAspect {
@Override
public void visit(IConstruct node) {
// 노드가 S3 버킷(L1)인 경우 태그를 추가한다.
if (node instanceof CfnBucket) {
Tag.add(node, "CreatedBy", "CDK-Team");
}
}
}
// App에서 적용
Aspects.of(app).add(new BucketTaggingAspect());
추상화의 한계를 인정하고 탈출구를 제공한다
CDK의 고수준 객체(L2)가 AWS의 모든 최신 기능을 즉시 지원하지 못할 때가 있다. 이때 Escape Hatches를 사용하여 하위 수준의 CloudFormation 리소스(L1)에 직접 접근한다.
Bucket bucket = Bucket.Builder.create(this, "MyBucket").build();
// L2 객체에서 L1 객체(CfnBucket)를 추출한다.
CfnBucket cfnBucket = (CfnBucket) bucket.getNode().getDefaultChild();
// L2에는 없는 로우 레벨 속성을 설정한다.
cfnBucket.addPropertyOverride("NotificationConfiguration.LambdaConfigurations", someValue);
언제 어디서 배포해도 결과가 같아야 한다
CDK 코드는 실행될 때마다 항상 같은 결과(CloudFormation 템플릿)를 만들어내야 한다. 이를 결정론(Determinism)이라고 한다. 하지만 VPC ID나 가용 영역(AZ) 정보처럼 AWS 환경에서 가져와야 하는 동적 정보가 코드의 결과에 영향을 줄 수 있다.
cdk.json에 외부 조회 결과를 저장하여 다음 합성(Synth) 시에는 네트워크 통신 없이 저장된 값을 사용하여 동일한 결과를 보장한다.배포를 하기 위해 필요한 최소한의 기반 시설을 정의한다
CDK 프로젝트를 특정 AWS 계정과 리전에 처음 배포할 때 CDK가 작동하기 위한 기반 리소스를 생성하는 과정이다.
CDKTookit이라는 스택 이름으로 먼저 생성한다.cdk bootstrap aws://ACCOUNT-NUMBER/REGION| 개념 | 핵심 철학 | 주요 이점 |
|---|---|---|
| Aspects | 방문자 패턴 적용 | 전역적인 보안 정책 및 규정 준수 강제 |
| Escape Hatches | 추상화 계층 관통 | 미지원 기능 구현 및 세밀한 속성 제어 |
| Context | 결정론적 합성 | 환경 변화에 무관한 안정적인 템플릿 생성 |
| Bootstrapping | 배포 기반 마련 | 대규모 자산(Asset) 배포를 위한 파이프라인 구축 |