[Diagrams] 클라우드 아키텍처 as Code
IaC는 알겠는데, DaC는 뭐야?
모두들 아시다시피 IaC는 Infrastructure as Code의 약자로, 인프라를 코드로 관리하는 것을 말합니다. 이와 비슷하게 DaC는 Diagram as Code의 약자입니다. Diagrams라는 패키지를 사용하면 클라우드 시스템 아키텍처를 Python 코드로 그릴 수 있습니다. 기존에 draw.io / canva / figma 등의 툴로 아키텍처 다이어그램을 그려왔던 것처럼, 코드로 이를 대신할 수 있다는 것이 재밌는 것 같습니다.
예상되는 DaC의 주요 장점은 아키텍처 다이어그램의 변경 사항을 버전 관리 시스템에서 추적할 수 있다는 것입니다. 이는 XaC 모두에 해당하는 장점일 것이라고 생각합니다. Diagrams는 AWS, Azure, GCP, Kubernetes, Alibaba Cloud, Oracle Cloud 등 주요 클라우드 프로바이더를 지원하며, 온프레미스 노드, SaaS, 주요 프로그래밍 프레임워크 및 언어도 지원합니다.
사용해보자!
설치
Python 3.6 혹은 그 이상의 버전을 필요로 합니다. 코드로 짜여진 다이어그램을 렌더링하기 위해서 Graphviz 을 사용합니다. 설치해주겠습니다.
# Windows (with Chocolatey)
choco install graphviz
# Mac (with Homebrew)
brew install graphviz
graphviz 를 성공적으로 설치했다면, 본인이 사용 중인 파이썬 패키지 매니저를 이용하여 diagrams 패키지를 설치해주겠습니다.
# using pip (pip3)
$ pip install diagrams
# using pipenv
$ pipenv install diagrams
# using poetry
$ poetry add diagrams
다이어그램 코드 작성
# diagram.py
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
with Diagram("Web Service", show=False):
ELB("lb") >> EC2("web") >> RDS("userdb")
위 코드를 실행시켜본 결과 아래와 같은 아래와 같은 사진이 코드와 같은 작업 위치에 렌더링 됩니다.
저장되는 이미지 파일 이름과 확장자 등 여러가지를 변경할 수 있는 옵션을 제공합니다. 자세한 옵션은 공식 가이드에서 확인하실 수 있습니다. 그러면 조금 더 다양한 다이어그램을 생성해보겠습니다.
위 다이어그램은 https://shrink.caput.cloud 서비스의 아주 간단한 클라우드 아키텍처 다이어그램입니다. 이를 코드로 표현해보면 아래와 같습니다.
# diagram.py
from diagrams import Diagram, Cluster
from diagrams.aws.network import APIGateway
from diagrams.aws.compute import Lambda
from diagrams.aws.database import Dynamodb
from diagrams.custom import Custom
with Diagram("Web Service", show=False):
cc_user = Custom("User", "./icons/user.png")
with Cluster("AWS Cloud"):
cc_apigw = APIGateway("API Gateway")
cc_lambda_shrink = Lambda("shrink(/create)")
cc_lambda_redirection = Lambda("redirection(/key)")
cc_db = Dynamodb("dynamoDB")
cc_user >> cc_apigw >> [cc_lambda_shrink, cc_lambda_redirection] >> cc_db
그리고 이 코드로 렌더링한 다이어그램은 아래와 같습니다.
정말 짧은 코드로 어떤 흐름으로 서비스가 작동되는지를 잘 표현할 수 있었던 것 같습니다.
아쉬웠던 점
다이어그램을 코드로 작성해보면서 아직 기본적인 기능조차 지원하지 않는 점이 많이 아쉬웠습니다.
양방향 화살표부터 시작해서, 아이콘 사이즈 조정 등의 기본적인 기능이 아직 지원되지 않습니다. 정말 간단한 다이어그램 생성에만 사용할 수 있을 것 같습니다. 꾸준히 업데이트가 되고 있는 것 같은데, 얼마나 어떻게 발전할지 기대가 됩니다.
댓글
이 글 공유하기
다른 글
-
[Script] 많은 .heic 사진 파일을 .jpg 로 모두 변경하기
[Script] 많은 .heic 사진 파일을 .jpg 로 모두 변경하기
2024.08.17 -
[AWS] 계정 생성일 확인하기(프리티어 만료 확인)
[AWS] 계정 생성일 확인하기(프리티어 만료 확인)
2024.08.17 -
[Ubuntu] Welcome Message 바꾸기
[Ubuntu] Welcome Message 바꾸기
2023.09.19 -
[Ubuntu] Windows 부팅 디스크 만들기(WoeUSB-ng)
[Ubuntu] Windows 부팅 디스크 만들기(WoeUSB-ng)
2023.09.18