AWS CDK: Context & Parameters

김기현·2026년 2월 2일

AWS

목록 보기
39/44

AWS CDK에서 배포 시점에 값을 동적으로 주입하는 방법은 크게 Context와 Parameters 두 가지가 있다. 두 방싱은 값을 주입하는 시점과 철학에 큰 차이가 있다.


1. Context vs Parameters 비교

구분Context (컨텍스트)Parameters (파라미터)
결정 시점합성(Synthesis) 시점배포(Deployment) 시점
저장 위치cdk.json 또는 명령행 인수CloudFormation 템플릿의 Parameters 섹션
주요 용도환경별 설정 (dev/prod 구분)배포 시 사용자로부터 직접 값을 입력받을 때
특징코드 내에서 조건문 분기가 자유로움AWS 콘솔이나 CLI에서 배포 직전에 값 변경 가능
권장 여부강력 권장 (결정론적 인프라)특수한 경우 외엔 권장하지 않음

2. CDK Context

Context는 합성(Synth)가 일어날 때 (코드가 템플릿으로 변환될 때) 값을 주입하는 방식이다. cdk.json파일에 저장하거나, 명령행에서 -c옵션으로 전달한다.

Java에서 Context 읽기

node.tryGetContext 메서드를 사용하여 값을 가져온다.

public class MyStack extends Stack {
    public MyStack(final Construct scope, final String id, final StackProps props) {
        super(scope, id, props);

        // 'env'라는 키로 전달된 컨텍스트 값을 읽어온다.
        String env = (String) this.getNode().tryGetContext("env");

        if ("prod".equals(env)) {
            // 운영 환경일 때의 로직
            System.out.println("운영 환경 배포 중...");
        } else {
            // 개발 환경일 때의 로직
            System.out.println("개발 환경 배포 중...");
        }
    }
}

실행 방법 (CLI)

명령행에서 -c옵션을 통해 직접 값을 주입한다.

cdk synth -c env=prod
cdk deploy -c env=dev

3. CDK Parameter

Parameters는 CloudFormation의 기능을 그대로 활용하는 방식이다. 템플릿이 이미 생성된 후 AWS에 배포되는 단계에서 값을 결정한다.

Java에서 Parameter 정의

CfnParameter객체를 사용하여 정의한다.

public class MyStack extends Stack {
    public MyStack(final Construct scope, final String id, final StackProps props) {
        super(scope, id, props);

        // 배포 시점에 입력받을 파라미터 정의
        CfnParameter bucketNameParam = CfnParameter.Builder.create(this, "BucketName")
                .type("String")
                .description("생성할 버킷의 이름을 입력하세요")
                .build();

        // 파라미터 값 사용 (배포 전까지는 실제 값을 알 수 없음)
        Bucket.Builder.create(this, "MyBucket")
                .bucketName(bucketNameParam.getValueAsString())
                .build();
    }
}

실행 방법 (CLI)

cdk deploy --parameters BucketName=my-unique-bucket-name-123

4. Context가 더 권장되는 이유

CDK의 핵심 철학 중 하나는 코드가 생성하는 결과물은 항상 예측 가능해야 한다는 것이다.

  1. 조건문 활용: Context는 합성 시점에 값이 결정되므로 Java의 if-else문을 사용하여 리소스 구조 자체를 바꿀 수 있다. 반면 Parameters는 리소스의 속성값만 바꿀 수 있을 뿐 리소스의 존재 유무를 제어하기는 매우 까다롭다.
  2. 검증 (Validation): Context는 코드가 실행되는 동안 타입 체크나 유효성 검사를 수행할 수 있다.
  3. 코드와 함께 관리: cdk.json에 환경별 설정을 적어두면 누가 배포하더라도 동일한 인프라가 생성됨을 보장할 수 있다.
profile
백엔드 개발자를 목표로 공부하는 대학생

0개의 댓글