AWS CDK 개요, TypeScript 및 Python 예제와 성능

AWS 플랫폼 엔지니어링에 유용한 도구

Page content

AWS Cloud Development Kit (AWS CDK) 는 TypeScript, Python, Java, Go와 같은 익숙한 프로그래밍 언어를 사용하여 클라우드 인프라를 정의하고 배포할 수 있도록 해주는 프레임워크입니다.
TypeScript, Python, Java 및
Go와 같은 언어를 사용할 수 있습니다.

aws cdk chain of events

이 오픈소스 프레임워크는 AWS 리소스를 고급 구성 요소로 모델링하여 CloudFormation 템플릿으로 합성함으로써 인프라 코드화를 간소화합니다.
이로 인해 AWS 인프라를 더 유지보수가 쉽고 테스트 가능한 방식으로 개발하고 배포하며 반복이 가능해집니다.

AWS CDK에서 TypeScript와 Python을 사용하는 짧은 예제 조각을 아래에 보여줍니다:

TypeScript 예제:

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';

export class MyStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new s3.Bucket(this, 'MyFirstBucket', {
      versioned: true,
      removalPolicy: cdk.RemovalPolicy.DESTROY
    });
  }
}

이 예제는 버전 관리가 활성화된 S3 버킷을 생성합니다.

Python 예제:

from aws_cdk import (
    Stack,
    aws_s3 as s3,
    RemovalPolicy
)
from constructs import Construct

class MyStack(Stack):
    def __init__(self, scope: Construct, id: str, **kwargs):
        super().__init__(scope, id, **kwargs)

        s3.Bucket(self, "MyFirstBucket",
                  versioned=True,
                  removal_policy=RemovalPolicy.DESTROY)

이 예제는 스택 삭제 시 버킷을 삭제하는 제거 정책을 가진 버전 관리가 활성화된 S3 버킷을 생성합니다.

이 예제들은 AWS CDK가 익숙한 언어 구조, 클래스 및 객체를 사용하여 인프라를 정의하고 이를 cdk deploy를 통해 쉽게 배포할 수 있음을 보여줍니다.

AWS CDK는 이 간단한 예제를 넘어 다른 리소스와 더 복잡한 인프라 패턴을 지원합니다. 또한 IDE, 테스트 프레임워크 및 CI/CD 파이프라인과의 잘된 통합으로 개발자 경험과 자동화를 향상시킵니다.

TypeScript vs Python for AWS CDK

TypeScript와 Python은 모두 AWS CDK 개발 및 배포에 완전히 지원되는 언어이지만, 몇 가지 주요 차이점이 있습니다:

TypeScript

  • AWS CDK는 원래 TypeScript로 구현되어 있으며, 이는 네이티브 타입 체크, 인터페이스 및 강력한 정적 타이핑을 제공합니다.
  • TypeScript는 가장 포괄적인 공식 문서, 예제 및 커뮤니티 지원을 제공하므로, 자원을 찾고 문제를 해결하는 것이 더 쉬워집니다.
  • Visual Studio Code와 같은 IDE는 스마트 완성, 오류 강조 및 리팩토링을 제공하는 뛰어난 TypeScript 지원을 제공합니다.
  • CDK 자체가 TypeScript로 작성되어 있기 때문에, 사용자는 더 “네이티브"하고 매끄러운 경험을 느끼며, 더 적은 추상화가 필요합니다.
  • TypeScript의 정적 타이핑은 빌드 시 많은 문제를 조기에 포착하여 일부 런타임 오류를 피할 수 있습니다.
  • 엄격한 타입 안전성과 더 많은 커뮤니티 자원을 원하는 개발자는 CDK에 TypeScript를 선호할 수 있습니다.

Python

  • Python 지원은 안정적이며 완전히 기능적이지만, jsii를 통해 TypeScript 핵심에 대한 바인딩을 사용하는 것으로, 선택적 타입 힌트와 동적 타이핑에 의존합니다.
  • Python은 TypeScript의 camelCase 대신 snake_case 명명 규칙을 사용하므로, 예제를 변환할 때는 작은 문법 조정이 필요합니다.
  • 공식 예제와 커뮤니티 자원이 적기 때문에, 초보자에게는 학습과 디버깅이 더 어려울 수 있습니다.
  • 동적 타이핑은 일부 타입 오류가 컴파일 시간이 아닌 런타임에만 나타나므로, 오류 감지가 지연될 수 있습니다. 그러나 Python 모듈에는 IDE 또는 MyPy와 같은 정적 분석 도구와 함께 사용할 수 있는 타입 주석이 포함되어 있습니다.
  • Python 개발자는 가상 환경(virtualenv) 및 pip와 같은 익숙한 도구를 사용하여 패키지 관리를 할 수 있습니다.
  • 팀이나 프로젝트가 이미 Python 중심이라면, 문서 및 커뮤니티 지원이 다소 적더라도 Python을 선호할 수 있습니다.

개발 및 배포

  • CDK 툴킷(cdk deploy)은 언어 선택에 관계없이 동일하게 작동하며, CDK는 내부적으로 AWS CloudFormation 템플릿을 합성합니다.
  • 두 언어 모두 AWS 리소스 및 구성 요소의 전체 범위를 지원합니다.
  • 선택은 일반적으로 팀의 언어 전문성, 사용 가능한 커뮤니티 지원, 정적 타이핑과 동적 타이핑 선호에 달려 있습니다.

요약

  • TypeScript는 CDK가 그 자체로 구축되어 있기 때문에 가장 성숙하고 다듬어진 경험을 제공하며, 풍부한 문서, 강력한 타이핑 및 네이티브 통합을 제공합니다.
  • Python은 Python 프로그래머에게는 강력한 기능과 사용이 용이하지만, 동적 타이핑과 언어 관용 표현 간의 변환으로 인해 예제가 적고 일부 추가적인 도전이 있을 수 있습니다.
  • 많은 자원과 빠른 개발을 원한다면 TypeScript가 일반적으로 권장되며, 프로젝트나 팀이 Python 중심이라면 Python은 여전히 완전히 지원되는 좋은 선택입니다.

이것은 커뮤니티 피드백과 공식 AWS 문서에서 설명한 AWS CDK 개발 및 배포에 대한 각 언어의 장단점을 반영합니다. 두 언어 모두 효과적으로 사용할 수 있으며, 선택은 타이핑 규율, 언어 익숙성 및 생태계 지원에 따라 달라집니다.

AWS CDK에 공식적으로 지원되는 언어

AWS Cloud Development Kit(AWS CDK)는 다음 프로그래밍 언어를 공식적으로 지원합니다:

  • TypeScript
  • JavaScript
  • Python
  • Java
  • C# (.NET)
  • Go

이 언어들은 모두 첫 번째 등급으로 지원되며, CDK는 원래 TypeScript로 개발되어 이후 JSII라는 도구를 사용하여 다른 언어로 확장되어 각 언어의 문법과 관용 표현에 자연스럽게 느껴질 수 있도록 언어 바인딩을 생성합니다.

어떤 언어가 더 나은지에 대해서는 선호도와 맥락에 따라 달라집니다:

  • TypeScript는 일반적으로 가장 권장되는 선택이며, AWS CDK가 원래 TypeScript로 개발되었기 때문입니다. 가장 성숙한 생태계, 가장 풍부한 공식 문서 및 커뮤니티 예제를 제공합니다. 정적 타이핑과 강력한 IDE 지원은 개발자 생산성을 향상시키고, 많은 오류를 조기에 포착합니다.

  • Python은 Python 배경을 가진 사람들에게 매우 인기 있는 대안이며, 간결한 문법으로 초보자에게 직관적입니다. 그러나 동적 타이핑으로 인해 일부 오류는 런타임에만 포착됩니다. Python의 도구 및 예제 제공은 탄탄하지만 TypeScript만큼은 아닙니다.

  • Java, C#, Go는 모두 완전히 지원되지만, TypeScript 및 Python에 비해 커뮤니티 예제와 문서가 상대적으로 적습니다. 팀이 해당 언어에 숙련되어 있다면 적합한 선택입니다.

요약하면:

  • TypeScript는 AWS CDK 개발에 있어 가장 네이티브, 다듬어지고 널리 지원되는 경험을 제공합니다.
  • Python은 간단한 문법과 초보자 친화적인 경험을 제공하며, CDK 지원이 완전하지만 도구의 다듬기 정도는 약간 떨어집니다.
  • Java, C#, Go는 기존 기술에 적합하다면 좋은 선택이지만, 학습 자료를 찾는 데 더 많은 노력이 필요할 수 있습니다.

선택은 팀의 언어 전문성, 예제 및 지원의 가용성, 정적 타이핑(JavaScript, Java, C#) 또는 동적 타이핑(Python) 선호에 따라 달라야 합니다. TypeScript와 Python은 일반적으로 AWS CDK 프로젝트에 가장 인기 있고 권장되는 선택입니다.

AWS CDK 개발 및 배포에서의 언어 성능

AWS CDK 개발 및 배포에서의 최상의 성능을 고려할 때, AWS CDK의 핵심 기능 자체, 즉 인프라 코드화를 CloudFormation 템플릿으로 합성하고 배포하는 것은 언어와 무관합니다. 지원되는 모든 언어(Typescript, Python, Java, C#, Go)는 동일한 AWS CloudFormation 템플릿으로 컴파일되므로, 언어에 따라 배포 시 런타임 성능 차이가 없습니다.

그러나 개발 성능, 즉 효율성, 오류 감지, 도구, 코딩 용이성의 관점에서 TypeScript는 일반적으로 AWS CDK에 대한 가장 우수한 언어 환경으로 간주됩니다:

  • TypeScript는 AWS CDK의 원래 언어이며, 이로 인해 가장 매끄러운 도구, 가장 강력한 정적 타이핑, 개발 중 가장 빠른 오류 감지가 가능하여, 코딩이 더 빠르고 오류가 적습니다.
  • TypeScript에는 가장 풍부한 문서, 커뮤니티 예제 및 IDE 지원(예: Visual Studio Code의 스마트 완성 및 리팩토링)이 존재하여, 개발자 생산성을 높입니다.
  • TypeScript 코드는 컴파일 시 많은 오류를 포착하여, 런타임의 놀라움과 배포 문제를 피하고, 반복 개발 및 디버깅을 가속화합니다.

Python은 개발 경험에서 매우 가까운 두 번째로, DevOps에서 인기 있는 간단하고 읽기 쉬운 문법을 제공합니다. 그러나 동적 타이핑과 TypeScript 핵심에 대한 JSII 언어 바인딩으로 인해 일부 오류는 런타임에만 나타나며, 이는 디버깅 및 개발을 약간 느리게 할 수 있습니다.

Java, C#, Go와 같은 다른 언어는 지원되지만 일반적으로 자원이 적고, 도구가 덜 성숙하여 개발 속도가 상대적으로 느릴 수 있습니다.

요약:

항목 TypeScript Python 기타 (Java, C#, Go)
네이티브 CDK 구현 아니오 아니오
정적 타이핑 강력 (컴파일 시간) 동적 (런타임) 강력 (컴파일 시간)
도구 및 IDE 지원 최고 (VS Code, 자동 완성) 좋음, 그러나 덜 성숙 덜 성숙
커뮤니티/예제 가장 풍부 좋음, 그러나 TypeScript보다 적음 제한적
개발 속도 빠름, 오류가 적음 동적 타이핑으로 인해 느림 일반적으로 느림
배포 성능 동일 (CloudFormation 출력) 동일 동일

따라서, TypeScript는 AWS CDK와 함께 사용할 때 가장 우수한 개발 성능을 제공하며, 인프라 코딩을 더 빠르고 안전하게, 효율적으로 수행할 수 있습니다. 배포 성능은 모든 지원 언어에서 동일합니다. 모든 언어는 동일한 CloudFormation 템플릿을 생성하기 때문입니다.

이것은 AWS 공식 지침과 광범위한 커뮤니티 경험에서 강조하는 TypeScript의 네이티브 및 최적화된 AWS CDK 개발 지원과 일치합니다. Python은 팀이 선호하거나 문법 간결성을 중시하는 경우 강력한 대안이지만, 다른 언어는 일반적으로 빠른 개발에 적합하지 않습니다.

AWS CDK 관련 링크

기타 유용한 링크

구독하기

시스템, 인프라, AI 엔지니어링에 관한 새 글을 받아보세요.