InfoGrab DocsInfoGrab Docs

Kroki

요약

Kroki 통합을 사용하면 AsciiDoc, Markdown, reStructuredText, Textile 안에서 코드로 다이어그램을 작성할 수 있습니다. Kroki 통합을 켜려면 다음 단계를 수행합니다. 브라우저가 외부 Kroki 서비스로 다이어그램 콘텐츠를 보내지 않도록 하려면 다이어그램 프록시를 사용합니다.

Kroki 통합을 사용하면 AsciiDoc, Markdown, reStructuredText, Textile 안에서 코드로 다이어그램을 작성할 수 있습니다.

GitLab에서 Kroki 활성화#

사전 요구 사항:

  • 관리자 액세스 권한.

Kroki 통합을 켜려면 다음 단계를 수행합니다.

  1. 오른쪽 위 모서리에서 Admin을 선택합니다.
  2. Settings > General로 이동합니다.
  3. Kroki를 확장합니다.
  4. Enable Kroki 체크박스를 선택합니다.
  5. Kroki URL을 입력합니다. 예를 들면 https://kroki.io 입니다.

브라우저가 외부 Kroki 서비스로 다이어그램 콘텐츠를 보내지 않도록 하려면 다이어그램 프록시를 사용합니다.

Kroki 서버#

Kroki를 켜면 GitLab은 다이어그램을 이미지로 표시하기 위해 Kroki 인스턴스로 다이어그램을 보냅니다. 무료 공개 클라우드 인스턴스 https://kroki.io를 사용하거나 자체 인프라에 Kroki를 설치할 수 있습니다. Kroki를 설치한 뒤에는 설정의 Kroki URL 이 해당 인스턴스를 가리키도록 업데이트합니다.

Note

Kroki 다이어그램은 GitLab에 저장되지 않으므로 표준 GitLab 액세스 제어와 그 밖의 사용자 권한 제한이 적용되지 않습니다.

Docker#

Docker에서는 다음과 같이 컨테이너를 실행합니다.

docker run -d --name kroki -p 8080:8000 yuzutech/kroki

Kroki URL은 컨테이너를 실행하는 서버의 호스트명입니다.

yuzutech/kroki Docker 이미지는 대부분의 다이어그램 유형을 기본으로 지원합니다. 전체 목록은 Kroki 설치 문서를 참고합니다.

지원하는 다이어그램 유형은 다음과 같습니다.

다이어그램 라이브러리를 추가로 사용하려면 Kroki 설치 문서에서 Kroki 컴패니언 컨테이너를 시작하는 방법을 확인합니다.

다이어그램 생성#

Kroki 통합을 켜고 구성하면 구분 블록을 사용해 AsciiDoc 또는 Markdown 문서에 다이어그램을 추가할 수 있습니다.

  • Markdown

    <div class="diagram-placeholder"><div class="diagram-placeholder-header">PlantUML 다이어그램 (2줄)</div><details><summary>소스 코드 보기</summary><pre><code>Bob -&gt; Alice : hello
    Alice -&gt; Bob : hi</code></pre></details></div>
    
    
  • AsciiDoc

    [plantuml]
    ....
    Bob->Alice : hello
    Alice -> Bob : hi
    ....
    
  • reStructuredText

    .. code-block:: plantuml
    
      Bob->Alice : hello
      Alice -> Bob : hi
    
  • Textile

    bc[plantuml]. Bob->Alice : hello
    Alice -> Bob : hi
    

구분 블록은 Kroki 인스턴스를 가리키는 소스를 가진 HTML 이미지 태그로 변환됩니다. Kroki 서버가 올바르게 구성되어 있으면 블록 대신 다이어그램이 렌더링됩니다.

예제 코드로 렌더링한 PlantUML 다이어그램.

Kroki는 10여 종 이상의 다이어그램 라이브러리를 지원합니다. AsciiDoc 예시는 다음과 같습니다.

GraphViz

[graphviz]
....
digraph finite_state_machine {
  rankdir=LR;
  node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
  node [shape = circle];
  LR_0 -> LR_2 [ label = "SS(B)" ];
  LR_0 -> LR_1 [ label = "SS(S)" ];
  LR_1 -> LR_3 [ label = "S($end)" ];
  LR_2 -> LR_6 [ label = "SS(b)" ];
  LR_2 -> LR_5 [ label = "SS(a)" ];
  LR_2 -> LR_4 [ label = "S(A)" ];
  LR_5 -> LR_7 [ label = "S(b)" ];
  LR_5 -> LR_5 [ label = "S(a)" ];
  LR_6 -> LR_6 [ label = "S(b)" ];
  LR_6 -> LR_5 [ label = "S(a)" ];
  LR_7 -> LR_8 [ label = "S(b)" ];
  LR_7 -> LR_5 [ label = "S(a)" ];
  LR_8 -> LR_6 [ label = "S(b)" ];
  LR_8 -> LR_5 [ label = "S(a)" ];
}
....

예제 코드로 생성한 GraphViz 다이어그램.

C4(PlantUML 기반)

[c4plantuml]
....
@startuml
!include C4_Context.puml

title System Context diagram for Internet Banking System

Person(customer, "Banking Customer", "A customer of the bank, with personal bank accounts.")
System(banking_system, "Internet Banking System", "Allows customers to check their accounts.")

System_Ext(mail_system, "E-mail system", "The internal Microsoft Exchange e-mail system.")
System_Ext(mainframe, "Mainframe Banking System", "Stores all of the core banking information.")

Rel(customer, banking_system, "Uses")
Rel_Back(customer, mail_system, "Sends e-mails to")
Rel_Neighbor(banking_system, mail_system, "Sends e-mails", "SMTP")
Rel(banking_system, mainframe, "Uses")
@enduml
....

예제 코드로 생성한 C4 PlantUML 다이어그램.

Nomnoml

[nomnoml]
....
[Pirate|eyeCount: Int|raid();pillage()|
  [beard]--[parrot]
  [beard]-:>[foul mouth]
]

[<abstract>Marauder]<:--[Pirate]
[Pirate]- 0..7[mischief]
[jollyness]->[Pirate]
[jollyness]->[rum]
[jollyness]->[singing]
[Pirate]-> *[rum|tastiness: Int|swig()]
[Pirate]->[singing]
[singing]<->[rum]
....

예제 코드로 생성한 Nomnoml 다이어그램.

Kroki

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

Kroki 통합을 사용하면 AsciiDoc, Markdown, reStructuredText, Textile 안에서 코드로 다이어그램을 작성할 수 있습니다. Kroki 통합을 켜려면 다음 단계를 수행합니다. 브라우저가 외부 Kroki 서비스로 다이어그램 콘텐츠를 보내지 않도록 하려면 다이어그램 프록시를 사용합니다.

Kroki 통합을 사용하면 AsciiDoc, Markdown, reStructuredText, Textile 안에서 코드로 다이어그램을 작성할 수 있습니다.

GitLab에서 Kroki 활성화#

사전 요구 사항:

  • 관리자 액세스 권한.

Kroki 통합을 켜려면 다음 단계를 수행합니다.

  1. 오른쪽 위 모서리에서 Admin을 선택합니다.
  2. Settings > General로 이동합니다.
  3. Kroki를 확장합니다.
  4. Enable Kroki 체크박스를 선택합니다.
  5. Kroki URL을 입력합니다. 예를 들면 https://kroki.io 입니다.

브라우저가 외부 Kroki 서비스로 다이어그램 콘텐츠를 보내지 않도록 하려면 다이어그램 프록시를 사용합니다.

Kroki 서버#

Kroki를 켜면 GitLab은 다이어그램을 이미지로 표시하기 위해 Kroki 인스턴스로 다이어그램을 보냅니다. 무료 공개 클라우드 인스턴스 https://kroki.io를 사용하거나 자체 인프라에 Kroki를 설치할 수 있습니다. Kroki를 설치한 뒤에는 설정의 Kroki URL 이 해당 인스턴스를 가리키도록 업데이트합니다.

Note

Kroki 다이어그램은 GitLab에 저장되지 않으므로 표준 GitLab 액세스 제어와 그 밖의 사용자 권한 제한이 적용되지 않습니다.

Docker#

Docker에서는 다음과 같이 컨테이너를 실행합니다.

docker run -d --name kroki -p 8080:8000 yuzutech/kroki

Kroki URL은 컨테이너를 실행하는 서버의 호스트명입니다.

yuzutech/kroki Docker 이미지는 대부분의 다이어그램 유형을 기본으로 지원합니다. 전체 목록은 Kroki 설치 문서를 참고합니다.

지원하는 다이어그램 유형은 다음과 같습니다.

다이어그램 라이브러리를 추가로 사용하려면 Kroki 설치 문서에서 Kroki 컴패니언 컨테이너를 시작하는 방법을 확인합니다.

다이어그램 생성#

Kroki 통합을 켜고 구성하면 구분 블록을 사용해 AsciiDoc 또는 Markdown 문서에 다이어그램을 추가할 수 있습니다.

  • Markdown

    <div class="diagram-placeholder"><div class="diagram-placeholder-header">PlantUML 다이어그램 (2줄)</div><details><summary>소스 코드 보기</summary><pre><code>Bob -&gt; Alice : hello
    Alice -&gt; Bob : hi</code></pre></details></div>
    
    
  • AsciiDoc

    [plantuml]
    ....
    Bob->Alice : hello
    Alice -> Bob : hi
    ....
    
  • reStructuredText

    .. code-block:: plantuml
    
      Bob->Alice : hello
      Alice -> Bob : hi
    
  • Textile

    bc[plantuml]. Bob->Alice : hello
    Alice -> Bob : hi
    

구분 블록은 Kroki 인스턴스를 가리키는 소스를 가진 HTML 이미지 태그로 변환됩니다. Kroki 서버가 올바르게 구성되어 있으면 블록 대신 다이어그램이 렌더링됩니다.

예제 코드로 렌더링한 PlantUML 다이어그램.

Kroki는 10여 종 이상의 다이어그램 라이브러리를 지원합니다. AsciiDoc 예시는 다음과 같습니다.

GraphViz

[graphviz]
....
digraph finite_state_machine {
  rankdir=LR;
  node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
  node [shape = circle];
  LR_0 -> LR_2 [ label = "SS(B)" ];
  LR_0 -> LR_1 [ label = "SS(S)" ];
  LR_1 -> LR_3 [ label = "S($end)" ];
  LR_2 -> LR_6 [ label = "SS(b)" ];
  LR_2 -> LR_5 [ label = "SS(a)" ];
  LR_2 -> LR_4 [ label = "S(A)" ];
  LR_5 -> LR_7 [ label = "S(b)" ];
  LR_5 -> LR_5 [ label = "S(a)" ];
  LR_6 -> LR_6 [ label = "S(b)" ];
  LR_6 -> LR_5 [ label = "S(a)" ];
  LR_7 -> LR_8 [ label = "S(b)" ];
  LR_7 -> LR_5 [ label = "S(a)" ];
  LR_8 -> LR_6 [ label = "S(b)" ];
  LR_8 -> LR_5 [ label = "S(a)" ];
}
....

예제 코드로 생성한 GraphViz 다이어그램.

C4(PlantUML 기반)

[c4plantuml]
....
@startuml
!include C4_Context.puml

title System Context diagram for Internet Banking System

Person(customer, "Banking Customer", "A customer of the bank, with personal bank accounts.")
System(banking_system, "Internet Banking System", "Allows customers to check their accounts.")

System_Ext(mail_system, "E-mail system", "The internal Microsoft Exchange e-mail system.")
System_Ext(mainframe, "Mainframe Banking System", "Stores all of the core banking information.")

Rel(customer, banking_system, "Uses")
Rel_Back(customer, mail_system, "Sends e-mails to")
Rel_Neighbor(banking_system, mail_system, "Sends e-mails", "SMTP")
Rel(banking_system, mainframe, "Uses")
@enduml
....

예제 코드로 생성한 C4 PlantUML 다이어그램.

Nomnoml

[nomnoml]
....
[Pirate|eyeCount: Int|raid();pillage()|
  [beard]--[parrot]
  [beard]-:>[foul mouth]
]

[<abstract>Marauder]<:--[Pirate]
[Pirate]- 0..7[mischief]
[jollyness]->[Pirate]
[jollyness]->[rum]
[jollyness]->[singing]
[Pirate]-> *[rum|tastiness: Int|swig()]
[Pirate]->[singing]
[singing]<->[rum]
....

예제 코드로 생성한 Nomnoml 다이어그램.