Construct는 AWS 리소스를 하나 이상의 단위로 묶어 정의하는 논리적 단위이다. 모든 CDK 리소스(S3, VPC, EC2 등)는 Construct 클래스를 상속받는다.
AWS CDK는 리소스의 추상화 정도에 따라 세 가지 레벨을 제공한다.
Cfn으로 시작한다. (예: CfnBucket)Bucket)grantRead())등을 아주 쉽게 처리할 수 있따.ApplicationLoadBalancedFargateService)자바에서 Construct를 생성할 때 공통저긍로 들어가는 인자이다.
public MyResource(Construct scope, String id, MyProps props) { ... }
/**
* 보안 설정이 적용된 공통 S3 버킷 커스텀 컨스트럭트
*/
public class SecureBucket extends Construct {
private final Bucket bucket;
public SecureBucket(final Construct scope, final String id) {
super(scope, id);
// L2 Construct인 Bucket을 사용하여 보안 강화된 버킷 생성
this.bucket = Bucket.Builder.create(this, "InternalBucket")
.encryption(BucketEncryption.S3_MANAGED) // KMS 암호화 적용
.blockPublicAccess(BlockPublicAccess.BLOCK_ALL) // 외부 접근 전면 차단
.versioned(true) // 버전 관리 활성화
.build();
}
public Bucket getBucket() {
return this.bucket;
}
}
Cfn으로 시작하는 L1보다 L2를 사용하는 것이 코드가 훨씬 안전하고 간결해진다.SecureBucket처럼 커스텀 Construct로 만들어 팀 전체에서 재사용한다.Id는 스택 내에서만 유일하면 된다. CDK가 실제 리소스 배포 시에는 Id + 랜덤 해시값을 붙여 글로벌하게 고유한 이름을 만들어 준다.bucket.grantRead(user) 처럼 객체지향적인 메서드를 활용하여 최소 권한 원칙을 지킨다.Construct는 AWS의 복잡한 설정을 자바 클래스로 캡슐화한 것이다.
백엔드 개발자에게 있어 CDK의 매력은 바로 이 Construct를 사용하여 인프라를 객체지향적으로 설계(추상화, 상속, 합성)할 수 있다는 점이다.