티스토리 뷰
AWS CDK 개념
AWS CDK(AWS Cloud Development Kit)는 AWS 인프라를 프로그래밍 언어로 정의하고, CloudFormation을 통해 자동으로 배포할 수 있도록 하는 도구입니다. 기존의 AWS CloudFormation을 활용한 인프라 배포는 JSON 또는 YAML 파일을 직접 작성해야 했기 때문에 코드의 복잡성이 높고 유지보수가 어려웠습니다.
또한 기존의 IaC 방식(CloudFormation, Terraform 등)은 JSON 또는 YAML을 사용해 인프라를 정의하는 것이 일반적이었지만, AWS CDK는 TypeScript, Python, Java, C# 등의 객체지향 프로그래밍 언어를 활용하여 보다 직관적이고 효율적으로 AWS 리소스를 구성할 수 있도록 합니다.
AWS CDK의 주요 특징
- 다양한 프로그래밍 언어 지원 – TypeScript, Python, Java, C# 등 사용 가능
- CloudFormation 기반 – AWS CloudFormation을 활용해 안전하고 신뢰성 높은 배포 가능
- 재사용 가능한 구성 요소 제공 – L1, L2, L3 컨스트럭트(Construct)를 활용해 코드 재사용성 향상
- 더 적은 코드로 인프라 구축 – YAML 대신 객체지향 방식으로 정의하여 가독성과 유지보수성 개선
- AWS 서비스와 긴밀한 연동 – S3, Lambda, DynamoDB 등 다양한 AWS 서비스와 손쉽게 연결 가능
구성 요소
AWS CDK의 프로젝트 구조는 앱(App) → 스택(Stack) → 리소스(Resources)의 계층 구조로 구성됩니다.
1) 앱(App)
AWS CDK 앱은 CDK 프로젝트의 최상위 단위입니다.
- 하나의 앱(App)은 여러 개의 스택(Stack)을 포함할 수 있습니다.
- CDK CLI(Command Line Interface)를 사용해 실행됩니다.
#!/usr/bin/env python3
import os
import aws_cdk as cdk
from cdk_hello_world.cdk_hello_world_stack import CdkHelloWorldStack
app = cdk.App()
CdkHelloWorldStack(app, "CdkHelloWorldStack",)
app.synth()
2) 스택(Stack)
스택은 AWS 인프라 리소스를 배포하는 단위로, AWS CloudFormation 스택과 1:1로 매칭됩니다.
- 하나의 앱 안에 여러 개의 스택(Stack)이 존재할 수 있습니다.
- 스택은 인프라 리소스를 포함하며, AWS CDK가 이를 CloudFormation으로 변환하여 배포합니다.
#!/usr/bin/env python3
import aws_cdk as cdk
from multistack.multistack_stack import MultistackStack
app = cdk.App()
MultistackStack(app, "MyWestCdkStack",
env=cdk.Environment(region="us-west-1"),
encrypt_bucket=False)
MultistackStack(app, "MyEastCdkStack",
env=cdk.Environment(region="us-east-1"),
encrypt_bucket=True)
app.synth()
3) 리소스(Resources)
리소스는 AWS 인프라를 구성하는 기본 단위입니다.
- S3 버킷, Lambda 함수, VPC, DynamoDB 테이블 등 다양한 리소스를 생성할 수 있습니다.
- AWS CDK는 L1, L2, L3 컨스트럭트(Constructs)를 활용해 리소스를 관리합니다.
CloudFormation 차이점
비교 항목 | AWS CDK | CloudFormation |
---|---|---|
언어 지원 | TypeScript, Python, Java, C# | JSON, YAML |
코드 가독성 | 객체지향 프로그래밍 가능 | YAML/JSON으로 인해 복잡 |
코드 재사용성 | 모듈화 및 패턴 사용 가능 | 제한적 |
CloudFormation 연동 | CloudFormation으로 변환 후 배포 | 직접 CloudFormation 템플릿 작성 |
리소스 정의 방식 | new s3.Bucket(...) 등 객체 사용 |
YAML/JSON의 키-값 구조 |
유지보수성 | 프로그래밍 언어의 기능 활용 가능 (루프, 조건문) | 복잡한 논리를 표현하기 어려움 |
배포 속도 | CloudFormation과 유사 | CloudFormation과 동일 |
CloudFormation (YAML)
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
VersioningConfiguration:
Status: Enabled
AWS CDK (TypeScript)
new s3.Bucket(this, 'MyBucket', {
versioned: true
});
AWS CDK는 더 직관적이고 유지보수하기 쉬운 코드로 AWS 리소스를 정의할 수 있습니다.
AWS CDK는 기존 CloudFormation보다 더 적은 코드로 AWS 인프라를 효율적으로 정의하고 배포할 수 있도록 도와줍니다. 앱(App), 스택(Stack), 리소스(Resources) 개념을 이해하면 AWS CDK를 더욱 효과적으로 활용할 수 있으며, CloudFormation과 비교했을 때 코드 가독성, 유지보수성, 재사용성이 뛰어납니다.