AWS CDK: Construct

김기현·2026년 1월 30일

AWS

목록 보기
29/44

Construct는 AWS 리소스를 하나 이상의 단위로 묶어 정의하는 논리적 단위이다. 모든 CDK 리소스(S3, VPC, EC2 등)는 Construct 클래스를 상속받는다.

1. Construct의 계층 구조 (L1, L2, L3)

AWS CDK는 리소스의 추상화 정도에 따라 세 가지 레벨을 제공한다.

L1 Construct (CFN Recources)

  • 특징: CloudFormation의 리소스와 1대1로 매핑된다. 이름이 항상 Cfn으로 시작한다. (예: CfnBucket)
  • 장점: AWS의 최신 기능을 즉시 사용할 수 있다.
  • 단점: 모든 세부 설정을 직접 정의해야 하므로 코드가 길어진다.

L2 Construct (Curated Resoueces)

  • 특징: AWS가 권장하는 기본값이 포함된 클래스이다. (예: Bucket)
  • 장점: 보안 설정, 권한 관리(grantRead())등을 아주 쉽게 처리할 수 있따.

L3 Construct (Patterns)

  • 특징: 흔히 쓰이는 아키텍처 패턴을 통째로 구현안 클래스이다 (예: ApplicationLoadBalancedFargateService)
  • 장점: VPC, 로드밸런서, ECS를 코드 몇 줄로 한 번에 생성한다.

2. Construct의 필수 인자 3가지

자바에서 Construct를 생성할 때 공통저긍로 들어가는 인자이다.

public MyResource(Construct scope, String id, MyProps props) { ... }
  1. Scope: 이 리소스가 속한 부모 컨테이너 (보통 this를 사용하여 현재 스택에 속하게 함).
  2. Id: 스택 내에서 유일해야 하는 논리적 아이디 (CloudFormation 리소스 이름의 기반).
  3. Props: 리전, 이름, 용량 등 리소스의 세부 설정값들을 담은 객체.

3. Java 구현 예제

/**
 * 보안 설정이 적용된 공통 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;
    }
}

4. 실무 설계 팁 (Best Practices)

  1. L2 Construct 우선 사용: 특별한 이유가 없다면 Cfn으로 시작하는 L1보다 L2를 사용하는 것이 코드가 훨씬 안전하고 간결해진다.
  2. Composition (합성): 자주 쓰이는 보안 설정이나 태깅 로직은 위 예제의 SecureBucket처럼 커스텀 Construct로 만들어 팀 전체에서 재사용한다.
  3. Id의 고유성: Id는 스택 내에서만 유일하면 된다. CDK가 실제 리소스 배포 시에는 Id + 랜덤 해시값을 붙여 글로벌하게 고유한 이름을 만들어 준다.
  4. Grant Methods: IAM 정책을 직접 JSON으로 쓰지 말고 bucket.grantRead(user) 처럼 객체지향적인 메서드를 활용하여 최소 권한 원칙을 지킨다.

5. 요약

Construct는 AWS의 복잡한 설정을 자바 클래스로 캡슐화한 것이다.
백엔드 개발자에게 있어 CDK의 매력은 바로 이 Construct를 사용하여 인프라를 객체지향적으로 설계(추상화, 상속, 합성)할 수 있다는 점이다.

profile
백엔드 개발자를 목표로 공부하는 대학생

0개의 댓글