흰 스타렉스에서 내가 내리지

AWS CloudFormation 와 AWS CDK : 차이점과 장단점, 그리고 추천 방법 본문

AWS

AWS CloudFormation 와 AWS CDK : 차이점과 장단점, 그리고 추천 방법

주씨. 2024. 9. 21. 21:14
728x90

# 개요 

AWS 에서 인프라를 정의하고 관리하는 방법으로 CloudFormation 과 AWS CDK 가 있다. 

두 도구 모두 AWS 리소스를 프로비저닝하고 관리하는 데 사용되지만, 각각의 방식에는 장단점이 존재하며, 특정 상황에서 더 적합한 도구를 선택하는 것이 중요하다. 

 

 

1. CloudFormation 

AWS CloudFormation 은 AWS 리소스를 JSON 또는 YAML 형식으로 정의할 수 있는 서비스이다.

리소스 간의 의존성, 조건 등을 선언적으로 정의할 수 있으며, 이러한 템플릿을 사용하여 AWS 에서 인프라를 배포하고 관리할 수 있다. 

 

# 장점 

  • 직접적인 제어 : 사용자는 템플릿 파일에서 모든 리소스를 상세하게 정의하여 완전히 통제할 수 있다. 
  • 간결한 리소스 정의 : 간단한 리소스는 비교적 짧은 템플릿으로 정의할 수 있다. 예를 들어, 하나의 S3 버킷을 생성하거나, 간단한 IAM 정책을 추가하는 작업은 CloudFormation 템플릿에서 쉽게 처리할 수 있다. 

# 단점 

  • 복잡한 인프라 관리의 어려움 : 복잡한 리소스 간의 관계나 조건을 처리하려면 템플릿이 매우 복잡해질 수 있다. 여러 리소스가 엮인 인프라를 정의하려면 템플릿이 길어지고, 유지보수가 어려워진다. 
  • 재사용성 부족 : CloudFormation 은 함수나 객체 지향적인 코드를 지원하지 않으므로 코드 재사용성이 떨어진다. 반복 작업이 많으면 매우 비효율적이다. 
  • 유연성 부족 : 선언적인 방식으로 작동하므로, 동적 값 생성이나 조건부 논리 처리에는 제약이 있다

 

# 언제 CloudFormation 을 사용하면 좋을까?

CloudFormation 은 비교적 간단한 인프라, 예를 들어 S3 버킷, 단일 EC2 인스턴스 등 단순한 리소스를 빠르게 배포해야 하는 상황에서 적합하다.

또한 프로그래밍 언어를 사용하지 않고 AWS 리소스를 관리해야 하는 상황에서도 유리하다. 

 

 


2. AWS CDK

AWS CDK (Cloud Development Kit) 는 프로그래밍 언어를 사용해 AWS 인프라를 정의하고 배포할 수 있는 Infrastructure as Code(IaC) 도구이다. 

JavaScript, Python 과 같은 언어를 사용하여 인프라를 코드로 정의하고, 이 코드를 통해 CloudFomation 템플릿이 생성되어 AWS 에 배포된다. 

CDK 는 AWS 리소스에 대해 상위 수준의 추상화를 제공해 간결한 코드로 복잡한 인프라를 쉽게 관리할 수 있게 해준다. 

 

예시 : JavaScript 코드로 S3 버킷을 생성할 수 있다. 

const bucket = new s3.Bucket(this, 'MyBucket', {
  versioned: true,
  removalPolicy: RemovalPolicy.DESTROY,
});

 

# 장점

  • 프로그래밍 언어 지원 : CDK 는 TypeScript, Python, Java 등 프로그래밍 언어를 사용해 인프라를 정의할 수 있어, 복잡한 로직과 조건을 처리할 때 매우 유리하다. 
  • 코드 재사용성 : 객체지향 프로그래밍의 강점을 활용해 코드 모듈화가 가능하고, 재사용성이 뛰어나다. 여러 리소스를 필요에 따라 재사용하거나 조합하여 사용할 수 있다. 
  • 유연한 확장성 : 복잡한 인프라를 체계적으로 관리할 수 있으며, 조건문, 반복문, 함수 등 프로그래밍 언어의 모든 기능을 사용할 수 있다.

 

# 단점

  • 학습 곡선 : CloudFormation 템플릿과 비교했을 때, 프로그래밍 언어를 배워야 하므로 초반 학습 곡선이 있다. 
  • 의존성 관리 : 프로그래밍 언어의 패키지 의존성 관리가 필요하며, 특히 CI/CD 파이프라인에 통합할 때에는 추가적인 관리가 필요할 수 있다. 

 

# 언제 AWS CDK 를 사용하면 좋을까?

AWS CDK 는 복잡한 인프라를 배포할 떄 특히 유용하다. 

여러 AWS 리소스 간의 상호작용을 정의하거나, 조건부 로직이 필요할 떄, 그리고 코드의 재사용성을 극대화해야 하는 경우 CDK 가 적합하다.

또한 장기적으로 관리와 확장이 필요한 프로젝트에서도 유리하다. 

 


# 요약

  • CloudFormation 은 간단한 리소스에 적합하며, 빠른 배포와 직관적인 선언적 정의가 장점이다.
  • AWS CDK 는 복잡한 인프라를 체계적으로 관리하고, 재사용 가능한 코드를 작성할 수 있어 확장성과 유지보수성이 뛰어나다.

 

 

AWS CDK 로 S3 버킷 생성 하기 ------→ https://thisisjoos.tistory.com/799