이 영역을 누르면 첫 페이지로 이동
caputdraconis 블로그의 첫 페이지로 이동

caputdraconis

페이지 맨 위로 올라가기

caputdraconis

네트워크 관점에서의 클라우드 컴퓨팅을 공부하는 중입니다 :)

[Diagrams] 클라우드 아키텍처 as Code

  • 2024.09.04 14:22
  • 알고 있으면 도움되지 않을까,,?
글 작성자: caputdraconis
반응형

IaC는 알겠는데, DaC는 뭐야?

https://diagrams.mingrammer.com/

 

모두들 아시다시피 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

그리고 이 코드로 렌더링한 다이어그램은 아래와 같습니다.

정말 짧은 코드로 어떤 흐름으로 서비스가 작동되는지를 잘 표현할 수 있었던 것 같습니다.

아쉬웠던 점

다이어그램을 코드로 작성해보면서 아직 기본적인 기능조차 지원하지 않는 점이 많이 아쉬웠습니다.

양방향 화살표부터 시작해서, 아이콘 사이즈 조정 등의 기본적인 기능이 아직 지원되지 않습니다. 정말 간단한 다이어그램 생성에만 사용할 수 있을 것 같습니다. 꾸준히 업데이트가 되고 있는 것 같은데, 얼마나 어떻게 발전할지 기대가 됩니다. 

반응형

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [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
다른 글 더 둘러보기

정보

caputdraconis 블로그의 첫 페이지로 이동

caputdraconis

  • caputdraconis의 첫 페이지로 이동

검색

메뉴

    카테고리

    • 분류 전체보기 (168)
      • Cloud (3)
      • Computer Network (12)
      • Database (2)
      • Terraform (2)
      • 🥚고리즘 (13)
      • 겅부겅부🙃 (10)
        • Naver CS50 코칭스터디 (2)
        • Machine Learning (1)
        • Computing System (6)
      • 언어&프레임워크 (20)
        • Python (4)
        • Django (10)
        • Node JS (1)
        • C++ (2)
        • Java (1)
        • Flutter (2)
      • Security (76)
        • WebHacking Study (11)
        • 지옥방 스터디 (22)
        • 여름방학 스터디 (2)
        • PWN Study (6)
        • SUA Reversing Study (3)
        • PWN (3)
        • WebHacking (20)
        • Reversing (4)
      • 알고 있으면 도움되지 않을까,,? (23)
      • 일상다반사 (1)
      • 근황 정리 (1)
      • 42 Seoul (1)
        • Setting (1)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • 파이썬기초
    • 파이썬함수
    • 드림핵
    • 파이썬
    • Python
    • 웹해킹.kr
    • 리스트함수
    • old-16

    나의 외부 링크

    • Github
    • solved.ac
    • caputdraconis@kakao.com

    정보

    caputdraconis의 caputdraconis

    caputdraconis

    caputdraconis

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. Copyright © caputdraconis.

    티스토리툴바