[AWS] DevTools 에반젤리즘 CDK 에디션

발행: (2025년 12월 2일 오후 10:19 GMT+9)
5 min read
원문: Dev.to

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

코드화된 인프라스트럭처는 하나의 코드 블록으로 팀 내에서 공유할 수 있습니다. 버전 관리 시스템으로 관리하면 차이를 추적하기 쉬워지고, 코드가 올바르게 정의되었는지 테스트하는 것도 가능해집니다.

다음 이미지에서 대략적인 흐름을 확인할 수 있습니다:

IaC Overview

Differences between CloudFormation and CDK

CloudFormation은 상세한 정의가 가능하지만, 결과 IaC 코드는 매우 길어져 작성 시간이 늘어나고 가독성이 떨어집니다.

CDK는 constructs를 통해 추상화를 제공합니다. 일부 정의를 자동으로 구성해 주므로 IaC 코드를 더 적은 줄 수로 작성할 수 있습니다.

프로세스 흐름을 대략적으로 보면 다음과 같습니다:

CDK Process Overview

Initializing AWS CDK

Creating a Project

mkdir my-project
cd my-project

CDK 프로젝트를 초기화합니다 (예시: TypeScript):

cdk init app --language typescript

CDK Init Output

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 폴더에 위치합니다.

Folder Structure

lib Folder

스택 정의는 이 폴더 안의 파일들에 배치합니다.

Imports, Classes, and Constructs

필요한 모듈을 import하고, 클래스명 및 생성자를 정의한 뒤 각 리소스를 선언합니다.

Imports and Constructs

S3 Bucket Definition

버킷 정의에 포함되는 내용:

  • bucketName – 고정 버킷 이름(선택 사항; 지정하지 않으면 CDK가 myprojectstack-mybucket-와 같은 이름을 생성).
  • removalPolicyDESTROY (스택이 삭제될 때 버킷도 삭제).
  • autoDeleteObjectstrue (버킷에 객체가 있어도 삭제 허용).

S3 Bucket Definition

Lambda Function Definition

Lambda 정의에 포함되는 내용:

  • functionName – 고정 함수 이름(선택 사항; 지정하지 않으면 CDK가 MyProjectStack-ListFilesFunction-와 같은 이름을 생성).
  • runtime – Node.js 20.x.
  • handlerindex.js의 엔트리 포인트.
  • codelambda/ 디렉터리의 소스.
  • environment – 버킷 이름을 환경 변수로 전달.

Lambda Definition

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

Lambda Permission

Back to Blog

관련 글

더 보기 »

계정 전환

@blink_c5eb0afe3975https://dev.to/blink_c5eb0afe3975 여러분도 알다시피 저는 다시 제 진행 상황을 기록하기 시작했으니, 이것을 다른…