AWS CDK: 합성과 배포

김기현·2026년 2월 3일

AWS

목록 보기
40/44

AWS CDK의 합성(Synthesis)과 배포(Deployment)는 우리가 짠 Java 코드가 실제 AWS 리소스로 변신하는 핵심 과정이다. 쉽게 비유하면 합성은 설계도를 그리는 과정이고 배포는 그 설계도대로 집을 짓는 과정이라 할 수 있다.

1. 합성 (Synthesis): cdk synth

합성은 Java 코드를 실행하여 AWS의 표준 언어인 CloudFormation 템플릿(JSON/YAML)으로 번역하는 단계이다.

  • 동작 원리: Java의 main 메서드가 실행되면서 app.synth()가 호출된다. 이때 CDK는 메모리에 구축된 객체 트리(App-Stack-Construct)를 훑으며 cdk.out폴더에 Cloud Assembly라 불리는 결과물들을 만들어낸다.
  • 핵심 결과물: *.template.json: 실제 CloudFormation 템플릿.
    • manifest.json: 자산(Assets)의 위치와 스택 간 의존성 확보

cdk synth는 로컬에서만 실행되므로 AWS 비용이 전혀 들지 않는다. 배포 전 설계도가 잘 그려졌는지 확인하는 용도로 자주 사용한다.


2. 배포 (Deployment): cdk deploy

합성된 설계도를 AWS CloudFormation 서비스로 전달하여 실제 리소스를 생성하는 단계이다.

배포의 세부 라이프사이클

  1. Diff (차이 분석): 현재 클라우드에 배포된 상태와 내 코드를 비교한다. (cdk diff를 통해 미리 볼 수 있다.)
  2. Asset Publishing (자산 업로드): 로컬의 Lambda 코드나 Docker 이미지를 S3나 ECR로 먼저 올린니다. (여기서 Bootstrap 때 만든 리소스들이 사용된다)
  3. ChangeSet 생성: CloudFormation이 "이런 리소스들을 새로 만들거나 수정하겠습니다"라는 계획서를 작성한다.
  4. Execution (실행): 실제 리소스 프로비저닝이 시작된다.

3. Java 코드로 보는 실행 시점

우리가 작성하는 main 클래스가 바로 이 모든 과정의 지휘자이다.

public class MyProjectApp {
    public static void main(final String[] args) {
        App app = new App();

        // 1. Construction: 객체들이 메모리에 생성됨
        new MyStack(app, "MyStack", StackProps.builder().build());

        // 2. Synthesis: 이 메서드가 호출될 때 cdk.out에 템플릿이 구워짐
        app.synth();
    }
}

4. 자주 쓰는 CLI 명령어

합성과 배포를 더 효율적으로 관리하기 위한 도구들이다.

명령어단계설명
cdk synth합성Java 코드를 CloudFormation 템플릿으로 변환해 본다.
cdk diff비교배포 전 필수! 현재 클라우드 상태와 내 코드의 차이점을 보여준다.
cdk deploy배포실제 AWS에 리소스를 생성/수정한다.
cdk watch배포코드를 수정하면 자동으로 감지해서 HotSwap 배포를 시도한다. (개발 속도 향상)
cdk destroy제거배포된 모든 리소스를 안전하게 삭제한다.

5. 핵심 정리: 왜 이렇게 나누었을까?

  • 안정성: synth 단계에서 문법이나 논리 오류를 먼저 잡아낼 수 있다.
  • 확장성: Java 코드 한 줄로 수만 줄의 CloudFormation을 생성할 수 있다.
  • 일관성: cdk.out에 저장된 합성 결과물은 결정론(Determinism) 원칙에 따라 어디서 배포하든 같은 결과를 보장한다.
profile
백엔드 개발자를 목표로 공부하는 대학생

0개의 댓글