[AWS] DevTools 에반젤리즘 CDK 에디션
Source: Dev.to
Introduction
이 글은 2025년 일본 AWS 최고 엔지니어 어드벤트 캘린더의 네 번째 포스트입니다.
AWS CDK에 대해 이야기할 예정이며, 이는 IaC 코드를 작성할 때 흔히 사용되는 도구입니다.
다른 AWS IaC 도구인 CloudFormation은 텍스트 편집기만 있으면 쉽게 사용할 수 있지만, 중복된 코드가 생기기 쉽습니다. AWS CDK는 설정이 다소 복잡하지만, 더 적은 코드로 효율적으로 IaC 코드를 작성할 수 있게 해줍니다.
Japan AWS Top Engineers Advent Calendar 2025
What is the AWS CDK?
**AWS Cloud Development Kit (CDK)**는 인프라스트럭처 구성(configuration)을 코드화하는 Infrastructure as Code(IaC) 도구입니다.
Benefits of IaC
Reduced manual configuration errors and repetitive tasks
인프라스트럭처는 AWS Management Console에서도 정의할 수 있지만, 매번 수동으로 수행하면 시간도 많이 걸리고 오류가 발생하기 쉽습니다. 구성을 코드화하면 동일한 코드를 재사용할 수 있어 수동 실수와 번거로움을 없앨 수 있습니다.
Ease of sharing and version control
코드화된 인프라스트럭처는 하나의 코드 블록으로 팀 내에서 공유할 수 있습니다. 버전 관리 시스템으로 관리하면 차이를 추적하기 쉬워지고, 코드가 올바르게 정의되었는지 테스트하는 것도 가능해집니다.
다음 이미지에서 대략적인 흐름을 확인할 수 있습니다:

Differences between CloudFormation and CDK
CloudFormation은 상세한 정의가 가능하지만, 결과 IaC 코드는 매우 길어져 작성 시간이 늘어나고 가독성이 떨어집니다.
CDK는 constructs를 통해 추상화를 제공합니다. 일부 정의를 자동으로 구성해 주므로 IaC 코드를 더 적은 줄 수로 작성할 수 있습니다.
프로세스 흐름을 대략적으로 보면 다음과 같습니다:

Initializing AWS CDK
Creating a Project
mkdir my-project
cd my-project
CDK 프로젝트를 초기화합니다 (예시: TypeScript):
cdk init app --language typescript

AWS CDK Implementation Example
Note (Test Environment)
Windows PC에서 Kiro(IDE)를 사용했습니다.
Implementing an API using API Gateway, Lambda, and S3
구현은 Amazon Q Developer와 Kiro를 이용한 Vibe 코딩으로 진행했습니다.
요청 내용은: “API Gateway와 Lambda를 사용해 API를 정의하고, Lambda 함수는 TypeScript로 작성한다. Lambda 함수는 S3 버킷에 있는 파일 목록을 반환한다.”
개발 중에 Kiro와 채팅으로 S3 버킷 이름과 Lambda 함수 이름을 수정하도록 상담했습니다.
Implementation Details
Folder Structure
Lambda 함수 코드는 lambda 폴더에, CDK IaC 코드는 lib 폴더에 위치합니다.

lib Folder
스택 정의는 이 폴더 안의 파일들에 배치합니다.
Imports, Classes, and Constructs
필요한 모듈을 import하고, 클래스명 및 생성자를 정의한 뒤 각 리소스를 선언합니다.

S3 Bucket Definition
버킷 정의에 포함되는 내용:
- bucketName – 고정 버킷 이름(선택 사항; 지정하지 않으면 CDK가
myprojectstack-mybucket-와 같은 이름을 생성). - removalPolicy –
DESTROY(스택이 삭제될 때 버킷도 삭제). - autoDeleteObjects –
true(버킷에 객체가 있어도 삭제 허용).

Lambda Function Definition
Lambda 정의에 포함되는 내용:
- functionName – 고정 함수 이름(선택 사항; 지정하지 않으면 CDK가
MyProjectStack-ListFilesFunction-와 같은 이름을 생성). - runtime – Node.js 20.x.
- handler –
index.js의 엔트리 포인트. - code –
lambda/디렉터리의 소스. - environment – 버킷 이름을 환경 변수로 전달.

Lambda 함수가 S3 버킷의 파일 목록을 가져오므로, 버킷에 대한 읽기 권한을 부여합니다.
