홈페이지에 있는 내용입니다.

A -> B
note right : 기본으로 시퀀스가 그려집니다.

AABB기본으로 시퀀스가 그려집니다.

:A: -> (B) 
note left of A : :: 을 사용하여 액터로 표시.
note right of B : () 을 사용하여 유즈케이스로 표시.

AB:: 을 사용하여 액터로 표시.() 을 사용하여 유즈케이스로 표시.

A -> B
B : B클래스
note right of B : : 를 사용하여 클래스로 표시

ABB클래스: 를 사용하여 클래스로 표시

note right : :; 를 사용하여 액티비티로 표시

A:; 를 사용하여 액티비티로 표시B

()A -> [B]
note left of A : () 을 사용하여 인터페이스로 표시.
note right of B : [] 을 사용하여 컴포넌트로 표시.

AB() 을 사용하여 인터페이스로 표시.[] 을 사용하여 컴포넌트로 표시.

[*] -> A 
A : A State
note right of A : [*] 을 사용하여 스테이트로 표시.

AA State[*] 을 사용하여 스테이트로 표시.

  • 화살표 ->
  • 점선 -->

Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response

AliceAliceBobBobAuthentication RequestAuthentication ResponseAnother authentication Requestanother authentication Response

  • 한줄 주석 : ' 로 시작
  • 문단 주석 : /' ……….. '/

actor Foo1
boundary Foo2
control Foo3
entity Foo4
database Foo5
Foo1 -> Foo2 : To boundary
Foo1 -> Foo3 : To control
Foo1 -> Foo4 : To entity
Foo1 -> Foo5 : To database

Foo1Foo1Foo2Foo2Foo3Foo3Foo4Foo4Foo5Foo5To boundaryTo controlTo entityTo database

색 지정

actor Bob #red
' The only difference between actor
'and participant is the drawing
participant Alice
participant "I have a really\nlong name" as L #99FF99
/' You can also declare:
   participant L as "I have a really\nlong name"  #99FF99

Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction

BobBobAliceAliceI have a reallylong nameI have a reallylong nameAuthentication RequestAuthentication ResponseLog transaction

Bob -> Alice : hello

create Other
Alice -> Other : new

create control String
Alice -> String
note right : You can also put notes!

Alice --> Bob : ok

BobBobAliceAliceOtherStringhellonewOtherStringYou can also put notes!ok

  • 괄호를 사용해서 표현 ( )
  • usecase 키워드 사용

(First usecase)
(Another usecase) as (UC2)  
usecase UC3
usecase (Last\nusecase) as UC4

First usecaseAnother usecaseUC3Lastusecase

  • 콜론을 사용해서 표현 : :
  • actor 키워드 사용

:First Actor:
:Another\nactor: as Men2  
actor Men3
actor :Last actor: as Men4

First ActorAnotheractorMen3Last actor

  • <|– 심볼 사용

:Main Admin: as Admin
(Use the application) as (Use)

User <|-- Admin
(Start) <|-- (Use)

Main AdminUse the applicationUserStart

  • note left of
    • note right of
    • note top of
    • note bottom
    • .. : 점선연결

:Main Admin: as Admin
(Use the application) as (Use)

User -> (Start)
User --> (Use)

Admin ---> (Use)

note right of Admin : This is an example.

note right of (Use)
  A note can also
  be on several lines
end note

note "This note is connected\nto several objects." as N2
(Start) .. N2
N2 .. (Use)

Main AdminUse the applicationUserStartThis is an example.A note can alsobe on several linesThis note is connectedto several objects.

  • -- : 수직 연결
  • - : 수평 연결
  • .. : 점선 연결
  • left, right, up or down

:user: -left-> (dummyLeft) 
:user: -right-> (dummyRight) 
:user: -up-> (dummyUp)
:user: -down-> (dummyDown)


  • 기본 : top to bottom
  • 변경 : top to bottom

left to right direction
user1 --> (Usecase 1)
user2 --> (Usecase 2)

user1Usecase 1user2Usecase 2

left to right direction
skinparam packageStyle rect
actor customer
actor clerk
rectangle checkout {
  customer -- (checkout)
  (checkout) .> (payment) : include
  (help) .> (checkout) : extends
  (checkout) -- clerk


Extension <|--
Composition *--
Agregation o--

scale 900 width
Class01 <|-- Class02
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 -- Class10
Class11 <|.. Class12
Class13 --> Class14
Class15 ..> Class16
Class17 ..|> Class18
Class19 <--* Class20


  • cardinality : “”
  • label : :

Class01 "1" *-- "many" Class02 : contains

Class03 o-- Class04 : agregation

Class05 --> "1" Class06


Character Visibility
~package private

class Dummy {


  • {abstract}
  • {static} or {classifier}

class Dummy {
  {static} String id
  {abstract} void methods()

DummyString idvoid methods()

  • --
  • ..
  • ==
  • __

class Foo1 {
  You can use
  several lines
  as you want
  and group
  things together.
  You can have as many groups
  as you want
  End of class

class User {
  .. Simple Getter ..
  + getName()
  + getAddress()
  .. Some setter ..
  + setName()
  __ private data __
  int age
  -- crypted --
  String password

Foo1You can useseveral linesas you wantand groupthings together.You can have as many groupsas you wantEnd of classUsergetName()getAddress()Simple GettersetName()Some setterint ageprivate dataString passwordcrypted

package "Classic Collections" #DDDDDD {
  Object <|-- ArrayList

package net.sourceforge.plantuml {
  Object <|-- Demo1
  Demo1 *- Demo2

Classic CollectionsnetsourceforgeplantumlObjectArrayListDemo1Demo2

  • page (hpages)x(vpages)

' Split into 4 pages
page 2x2

class BaseClass

namespace net.dummy #DDDDDD {
    .BaseClass <|-- Person
    Meeting o-- Person
    .BaseClass <|- Meeting


namespace {
  net.dummy.Person  <|- Person
  .BaseClass <|-- Person

  net.dummy.Meeting o-- Person

BaseClass <|-- net.unused.Person


title Servlet Container

(*) --> "ClickServlet.handleRequest()"
--> "new Page"

if "Page.onSecurityCheck" then
  ->[true] "Page.onInit()"
  if "isForward?" then
   ->[no] "Process controls"
   if "continue processing?" then
     -->[yes] ===RENDERING===
     -->[no] ===REDIRECT_CHECK===
   -->[yes] ===RENDERING===
  if "is Post?" then
    -->[yes] "Page.onPost()"
    --> "Page.onRender()" as render
    --> ===REDIRECT_CHECK===
    -->[no] "Page.onGet()"
    --> render
  -->[false] ===REDIRECT_CHECK===

if "Do redirect?" then
 ->[yes] "redirect request"
 if "Do Forward?" then
  -left->[yes] "Forward request"
  -right->[no] "Render page template"

--> "Page.onDestroy()"

Servlet ContainerClickServlet.handleRequest()new PagePage.onInit()Process controlsPage.onPost()Page.onRender()Page.onGet()redirect requestForward requestRender page templatePage.onDestroy()Page.onSecurityChecktrueisForward?nocontinue processing?yesnoyesis Post?yesnofalseDo redirect?yesDo Forward?yesno

:new page;
if (Page.onSecurityCheck) then (true)
  if (isForward?) then (no)
    :Process controls;
    if (continue processing?) then (no)
    if (isPost?) then (yes)
    else (no)
else (false)

if (do redirect?) then (yes)
  :redirect process;
  if (do forward?) then (yes)
    :Forward request;
  else (no)
    :Render page template;


ClickServlet.handleRequest()new pagePage.onInit()Process controlscontinue processing?noisPost?yesnoPage.onPost()Page.onGet()Page.onRender()noisForward?truePage.onSecurityCheckfalsedo redirect?yesredirect processdo forward?yesnoForward requestRender page template

Project starts the 20th of september 2018
saturday are closed
sunday are closed
[Prototype design] lasts 13 days and is colored in Lavender/LightBlue
[Test prototype] lasts 9 days and is colored in Coral/Green and starts 3 days after [Prototype design]'s end
[Write tests] lasts 5 days and ends at [Prototype design]'s end
[Hire tests writers] lasts 6 days and ends at [Write tests]'s start
[Init and write tests report] is colored in Coral/Green
[Init and write tests report] starts 1 day before [Test prototype]'s start and ends at [Test prototype]'s end

actor actor
agent agent
artifact artifact
boundary boundary
card card
cloud cloud
component component
control control
database database
entity entity
file file
folder folder
frame frame
interface  interface
node node
package package
queue queue
stack stack
rectangle rectangle
storage storage
usecase usecase


  • open/plantuml.txt
  • 마지막으로 수정됨: 2021/11/25 06:52
  • 저자