세록세록
💻 개발

[Markdown] mermaid로 UML 만들기

들어가며

이번 주차 우테코 미션에서 페어 분의 제안으로 프로그램의 동작 과정을 시각화한 플로우차트를 만들어보았는데, 리뷰어님께서 플로우차트를 그리는 데 mermaid라는 플러그인을 사용해보는 것은 어떻겠냐 제안을 해주셨다. 그리고 마침 같은 코스의 크루분이 mermaid의 사용법을 발표하셔서 유용한 툴인 것 같아 한 번 사용해보기로 하였다.
이 글은 사용 방법을 숙지하기 위해 공부 목적으로 작성하는 글이다.

소개

mermaid는 시각화 다이어그램(UML)을 그릴 수 있는 언어이다. markdown에 포함하여 사용할 수 있으며, 다음과 같이 노드와 화살표를 사용하여 다이어그램을 그리는 것이 가능하다.
```mermaid flowchart LR A-->B A-->C B-->D ```
notion image

개발환경 설정

IntelliJ

먼저 도움말>정보 로 들어가 설치된 IntelliJ의 버전을 확인한다.
notion image
  1. 버전이 2022.3.3 이상인 경우
    1. 파일>설정> Plugin > Marketplace로 들어가 Mermaid를 검색하고 설치해준다.
  1. 버전이 2022.2.3 미만인 경우
    1. 파일>설정으로 들어가 🔍검색창에 Markdown을 검색한다.
notion image
언어 및 프레임워크>Markdown으로 들어간 후 Markdown 확장에서 Mermaid에 체크하여 확장 프로그램을 설치해준다.

VSCode

Plugin 창으로 들어가 mermaid를 검색하고 Markdown Preview Mermaid Support 플러그인을 설치해준다.
notion image
notion image

사용법

```mermaid 다이어그램의 종류 이름 세부 코드 작성 ```
  1. MarkDown 문법에서는 코드 블럭 코드```(백틱 3개)를 사용하여 외부 코드를 첨부할 수 있는데, 코드블럭 시작점에 mermaid라고 지정해준다.
  1. 코드 첫 줄에 작성하고자 하는 UML의 종류를 작성해준다.
      • 플로우 차트(flowchart)
      • 클래스 다이어그램(classDiagram)
      • 시퀀스 다이어그램(sequenceDiagram)
      • …
  • 그 외 공통 기능
  • 그 외 공통 기능
    • 주석 : %% 를 사용한다.
      • ```mermaid classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() } ```

플로우 차트(흐름도)

  • UML 작성 방향
    • ```mermaid flowchart LR ... ```
      예시에서 flowchart 키워드 우측의 키워드 LR은 플로우 차트의 작성 방향을 의미한다.
    • LR : Left→Right(좌측에서 우측으로)
    • RL : Right→Left(우측에서 좌측으로)
    • TD, TB : Top→Down(상단에서 하단으로)
    • BT : Bottom→Top(하단에서 상단으로)
  • 노드 표현
    • 노드 1개는 노드식별자[노드이름] 로 표현 가능하다.(노드 이름을 작성하지 않을 경우 노드 식별자로 표현됨)
    • 괄호에 따른 노드 모양
      • ```mermaid flowchart LR A[밥을 먹었다] B(물을 마셨다) C{간식을 먹었다} ```
        notion image
  • 화살표
    • 화살표는 다음과 같은 양식이 존재한다. 상황에 맞게 사용하면 된다.
      ```mermaid flowchart LR A --> B C --- D E -- 텍스트입니다 --- F ---| 텍스트입니다2 | G H -->| 텍스트 | I -- 텍스트 --> J K -.-> L -. 텍스트 .-> M N ==> O == 텍스트 ==> P Q --o R S --x T U <--> V o--o W x--x X ```
      notion image
  • Subgraph 만들기
    • 흐름도를 세분화할 때 용이하다.
      ```mermaid flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end ```
      notion image

클래스 다이어그램

  • 클래스 내 속성과 메서드를 표현할 때
    • 클래스 블럭을 만들고 안에 요소를 넣으면 클래스의 속성 공간에 들어가고, 뒤에 ()을 붙여주면 메소드 공간에 들어간다.
      ```mermaid class A{ variable1 variable2 method2() method2() ... } ```
      notion image
    • 여기에 자료형과 접근 제어자(-, +, #)를 표현해줄 수 있다.
      • ```mermaid classDiagram class Square~Shape~{ int id List~int~ position setPoints(List~int~ points) getPoints() List~int~ } Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ Square : +getDistanceMatrix() List~List~int~~ ```
        notion image
  • 인터페이스/enum 표현
    • ```mermaid classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK } ```
      notion image
  • 화살표 표현
    • 관계 유형
      • <| : 상속관계(Inheritance)
      • \* : 조합 관계(Composition)
      • o : 집합 관계(Aggregation)
      • >, < : 연관관계(Association)
      • |> : 실현관계(Realization)
    • 선 유형
      • -- : 기본(Solid)
      • .. : 점선(Dashed)
더 다양한 활용 방법은 아래에 첨부해둔 공식 문서를 통해 확인할 수 있다.
  • 사용 예시 - 미션에 첨부한 클래스 다이어그램의 일부
notion image
참고 자료