해당 스터디는 90DaysOfDevOps
https://github.com/MichaelCade/90DaysOfDevOps
를 기반으로 진행한 내용입니다.
Day 76 - All you need to know about AWS CDK
AWS에서 기존의 관리 콘솔을 통한 수동 작업은 오류가 발생할 확률이 높다. 이러한 문제를 해결하기 위해 등장한 것이 바로 AWS CDK이다.
CDK(Cloud Development Kit)는 코드를 사용하여 클라우드 인프라를 정의할 수 있게 해주는 프레임워크이자 툴킷이다.
즉, 일반적인 소프트웨어를 개발하듯이 인프라를 코딩(Infrastructure as Code)하는 것이다.

사용자가 배포하고자 하는 인프라를 코드로 정의하면, CDK는 이를 AWS 리소스를 설정해 주는 서비스인 CloudFormation 템플릿으로 변환하여 배포한다.
CloudFormation은 리소스의 프로비저닝, 구성, 의존성 관리를 자동으로 처리해 준다.
CDK를 이해할 때 가장 중요한 점은 작성한 코드가 AWS에 직접 배포되는 것이 아니라는 점이다.
코드 작성: 사용자가 CDK를 이용해 인프라를 코딩
변환: 작성된 코드는 JSON 또는 YAML 형태의 CloudFormation 템플릿으로 변환됨.
배포: 변환된 CloudFormation 템플릿이 AWS에 업로드되고, 이를 통해 리소스가 생성된다.
관리 콘솔(Console) 대비 장점
S3 버킷을 생성하고 객체를 업로드하는 단순한 작업은 콘솔에서도 가능하지만, S3와 DynamoDB를 연동하는 등 복잡한 인프라를 구축할 때는 이야기가 다르다.
콘솔에서의 수동 클릭은 실수를 유발하기 쉽다.
복잡한 아키텍처를 단 몇 줄의 코드로 구현하여 빠르게 배포할 수 있다.
CloudFormation 직접 사용 대비 장점
"어차피 CloudFormation으로 변환되는데, 처음부터 CloudFormation(JSON/YAML)으로 작성하면 되지 않나?"라는 의문이 들 수 있다. 하지만 CDK는 다음과 같은 강력한 이점을 가진다.
프로그래밍 언어 선택권:
CloudFormation은 오직 JSON이나 YAML만 사용해야 하므로 복잡한 로직을 구현하기 어렵다.
반면, CDK는 Python, Java, TypeScript, JavaScript, .NET(C#), Go 등 친숙한 프로그래밍 언어를 사용하여 인프라를 구축할 수 있다.

App (앱):
가장 상위 개념으로, Container 역할을 한다.
내부에 여러 개의 Stack을 담는다.
Stack (스택):
기본적으로 Template과 같은 개념이다.
리소스 간의 관계를 설정하는 단위
Stack이 나중에 CloudFormation 템플릿으로 변환된다.
Construct (컨스트럭트):
Stack 내부에서 정의되며, 실제 AWS 리소스들을 보유하고 그룹화하는 구성 요소
예를 들어, S3 버킷과 같은 구체적인 리소스 정의가 이곳에서 이루어진다.
AWS CDK는 복잡한 클라우드 인프라를 익숙한 프로그래밍 언어로 효율적으로 관리하고 배포할 수 있게 해주는 강력한 도구이다.
Terraform과 같은 대안도 존재하지만, AWS 환경에서 프로그래밍 언어의 이점을 살려 인프라를 구축하고 싶다면 CDK는 최적의 선택이 될 것이다.