1. 도구개요 소개 은 UML Diagram 을간단한스크립트언어를사용하여작성할수있는툴 주요기능 Sequence Diagram, Use case Diagram, Class Diagram, Activity Diagram, Component Diagram, State Diagram, Object Diagram 카테고리 세부카테고리설계모델링 커버리지 도구난이도중 라이선스형태 / 비용 GNU General Public License v3 / 무료사전설치도구 Java 1.5 이상, Graphviz 2.28, 2.26.3 운영체제 Cross-Platform 도구버전 7947 (2012/12) 특징 간단한스크립트언어를사용하여빠르게 UML 작성가능 Eclipse, Word, LaTex 의 Plug-in 제공 Java 기반으로작성되어다양한운영체제지원 적용회사 / 프로젝트 관련도구 제작사 공식홈페이지 Eclipse, LaTeX, StarUML, ArgoUML, Visio SourceForge http://plantuml.sourceforge.net 1
2. 기능요약 오픈소스기반의 UML Diagram 을간단한스크립트언어로손쉽고빠르게작성가능 주요기능 Sequence Diagram Use Case Diagram Class/Object Diagram Activity Diagram Component Diagram State Diagram 지원내용지원지원지원지원지원지원 1
3. 도구실행환경 자바환경에서개발되어 JRE 환경에서동작 다양한 OS 를지원 Windows : Windows XP / Windows 7 (32, 64-bit 모두지원 ) Linux : 32, 64-bit 지원 Mac OS X : 32, 64-bit 지원 UNIX : 32, 64-bit 지원 JRE (Java Runtime Environment) 필요 JRE 1.5 이상 JRE (Java Runtime Environment) Windows / Linux / Mac OS / UNIX 1
4. 도구설치방법 세부목차 4.1 JDK 설치하기 4.2 Eclipse 설치하기 4.3 설치하기 4.4 Graphviz 설치하기 1
4. 도구설치방법 4.1 JDK 설치하기 (1/2) 다음의사이트에서 JDK 다운 http://www.oracle.com/technetwork/java/javase/downloads/index.htm JDK Download 를클릭하여자신의운영체제에맞는버전을다운받고설치 2
4. 도구설치방법 4.1 JDK 설치하기 (2/2) 다음과같이홖경변수를등록한다 시스템속성 고급 홖경변수 시스템변수 Path 항목의맨뒤에 JDK 가설치된폴더의 bin 폴더를추가함 본예제에서는 C:\Program Files\Java\jdk1.7.0_09\bin 위치추가 3
4. 도구설치방법 4.2 Eclipse 설치하기 (1/2) 다음의사이트에서 Eclipse 다운 http://www.eclipse.org/downloads/ 자신의운영체제에맞는버전을다운받고압축해제 4
4. 도구설치방법 4.2 Eclipse 설치하기 (2/2) Eclipse 를실행한첫화면 5
4. 도구설치방법 4.3 설치하기 (1/6) 은 Eclipse Plug-in 으로지원이됨 Help Install New Software 선택 6
4. 도구설치방법 4.3 설치하기 (2/6) Add 를선택하여 Add Repository 에다음과같이입력 Name: Location: http://plantuml.sourceforge.net/updatesite 추가된 을선택후 Next 선택 7
4. 도구설치방법 4.3 설치하기 (3/6) 설치할사항을확인후 Next 선택 약관에동의후 Finish 를선택하여설치시작 설치완료후, Eclipse 재시작 8
4. 도구설치방법 4.3 설치하기 (4/6) 사용하기 Show View Other 선택 9
4. 도구설치방법 4.3 설치하기 (5/6) 선택 10
4. 도구설치방법 4.3 설치하기 (6/6) 창이생성된걸볼수있음 11
4. 도구설치방법 4.4 Graphviz 설치하기 (1/5) 에서몇몇의 Diagram 을그리기위해서는 Graphviz 의설치가필요함 http://www.graphviz.org/download.php 접속 자신의운영체제에맞는패키지선택 12
4. 도구설치방법 4.4 Graphviz 설치하기 (2/5) 최신버전인 graphviz-2.28.0.msi 다운 본예제에선윈도우홖경에서진행 13
4. 도구설치방법 4.4 Graphviz 설치하기 (3/5) 설치안내에따라설치 본예제에서는설치폴더는기본값으로설정 14
4. 도구설치방법 4.4 Graphviz 설치하기 (4/5) 계속하여설치 15
4. 도구설치방법 4.4 Graphviz 설치하기 (5/5) 다음과같이홖경변수를추가시켜준다 변수이름 : GRAPHVIZ_DOT 변수값 : C:\Program Files (x86)\graphviz 2.28\bin\dot.exe 16
5. 도구기능소개 세부목차 5.1 소개 5.2 Sequence Diagram 5.3 Use Case Diagram 5.4 Class Diagram 5.5 Activity Diagram 5.6 Component Diagram 5.7 State Diagram 5.8 Object Diagram 5.9 Export 1
5. 도구기능소개 5.1 소개 (1/2) 은갂단한스크립트언어로손쉽게 UML 을작성가능한도구 지원하는 Diagram Sequence Diagram Use Case Diagram Class Diagram Activity Diagram Component Diagram State Diagram Object Diagram Add-on 형식을지원하여다른툴들과연동가능 Eclipse Word LaTeX 2
5. 도구기능소개 5.1 소개 (2/2) 본예제에서는 Eclipse Add-on 으로실습 편의성을위하여주석라인에작성하도록함 의코드를작성하면자동적으로 UML 이그려짐 3
5. 도구기능소개 5.2 Sequence Diagram (1/3) Object, Message 두객체사이의메세지는다음과같이나타냄 Object1 -> Object2 : is Request Objec2 --> Object1 : is Response Footer 를없애기위해선다음과같이함 hide footbox Actor, Boundary, Control, Entity 각각을나타나기위해서는다음키워드사용 actor Foo1 boundary Foo2 control Foo3 entity Foo4 예제코드 @startuml hide footbox actor Actor Actor -> Alice Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response Alice -> Bob: Another authentication Request Alice <-- Bob: another authentication Response Alice --> Alice : Message to Self /' is comment '/ @enduml 결과화면 Message to Self 자싞에게의메세지는다음과같이표현 Object1 --> Object1 Comment 주석은 또는 / / 으로표현 4
5. 도구기능소개 5.2 Sequence Diagram (2/3) Arrow style 다양한화살표모양을지원함 ->, ->>, -\, -\\, -//, ->o, -\\o Group 메세지를그룹지정가능 alt, else, pot, loop, par, break, critical, group 예제코드 @startuml Alice -> Bob: Authentication Request alt successful case Bob -> Alice: Authentication Accepted else some kind of failure Bob -> Alice: Authentication Failure group My own label Alice ->> Log : Log attack start...delay Time... Alice -\\ Log : Log attack end end end @enduml 결과화면 Delay 딜레이를나타내기위해선다음과같음 Object1 --> Object2...Delay... Object2 -->Object1 5
5. 도구기능소개 5.2 Sequence Diagram (3/3) Divider 메시지갂나누고싶을때는 == 사용 ==Divider== Object1 --> Object2 ==Divider== Object2 --> Object1 Lifeline activate, deactivate 를사용하여객체의 Lifeline 을표현 Object1 ->A activate A A -> Object1 deactivate A 예제코드 @startuml ==Divider== [-> A: DoWork activate A A -> A: Internal call activate A A ->] : << createrequest >> A<--] : RequestCreated deactivate A [<- A: Done deactivate A ==Divider== @enduml 결과화면 Incoming, Outcoming message 외부에서들어오거나나가는메세지표현 [-> Object1 Object -> ] 6
5. 도구기능소개 5.3 Usecase Diagram (1/7) Usecase Usecase 생성은다음과같음 (Usecase_name) usecase Usecase_name as 를사용하여별명지정가능 (Usecase) as (UC1) 줄바꿈시에는 \ 사용 (Use\case) 예제코드 @startuml (First usecase) (Another usecase) as (UC2) usecase UC3 usecase (Last\nusecase) as UC4 @enduml 결과화면 7
5. 도구기능소개 5.3 Usecase Diagram (2/7) Actor Actor 생성은다음과같음 :Actor_name: actor Actor_name as 를사용하여별명지정가능 :Actor_name: as Act 줄바꿈시에는 \ 사용 :Actor\name: 예제코드 @startuml :First Actor: :Another\nactor: as Men2 actor Men3 actor :Last actor: as Men4 @enduml 결과화면 8
5. 도구기능소개 5.3 Usecase Diagram (3/7) Description 여러줄에걸쳐 Description 을작성하거나구분선을둘경우에는다음을사용 -- ==.. 예제코드 @startuml usecase UC1 as "You can use several lines to define your usecase. You can also use separators. -- Several separators are possible. == And you can add titles:..conclusion.. This allows large description." @enduml 결과화면 9
5. 도구기능소개 5.3 Usecase Diagram (4/7) Link Actor, Usecase 갂의관계나타내기 -> -- ---> - -- ---.......>..>...>» - 의개수가많을수록선이길어짐 예제코드 @startuml User - (Start) User..> (Use the application) : A small label User < -- Admin :Main Admin: ---> (Use the application) : This is\nyet another\nlabel @enduml 결과화면 Extend Extend 관계는다음과같이나타냄 - >, -- >» - 의개수가많을수록선이길어짐 10
5. 도구기능소개 5.3 Usecase Diagram (5/7) Note Usecase 나 Actor 에노트를추가 note left of, note right of, note top of, note bottom of note right of 대상 : 노트내용 note left of ( 대상 ) 노트내용 1 노트내용 2 end note 여러대상을연결하는노트 대상 1.. 노트노트.. 대상 2 예제코드 @startuml :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) @enduml 결과화면 11
5. 도구기능소개 5.3 Usecase Diagram (6/7) Stereotype 스테레오타입표시 << 내용 >> Title 타이틀표시 title 내용 title 내용 1 내용 2 end title 예제코드 @startuml title Usecase User << Human >> :Main Database: as MySql << Application >> (Start) << One Shot >> (Use the application) as (Use) << Main >> User -> (Start) User --> (Use) MySql --> (Use) @enduml 결과화면 12
5. 도구기능소개 5.3 Usecase Diagram (7/7) Boundary 경계는다음과같이나타냄 rectangle 이름 { 내용 } Skinparam Usecase 의스킨을지정할수있음 skinparam 이름 { 내용 } 예제코드 @startuml left to right direction skinparam packagestyle rect actor customer actor clerk rectangle checkout { customer -- (checkout) (checkout).> (payment) : include (help).> (checkout) : extends (checkout) -- clerk } @enduml 결과화면 13
5. 도구기능소개 5.4 Class Diagram (1/4) Class 클래스는다음과같이생성 ClassName Relation 클래스갂의관계는다음과같이나타냄 Extension: < -- Composition: *-- Agregation: o-- Association: -- <-- Dependence:.. <.. Realization: <.. 예제코드 @startuml Class01 1 <-- many Class02 : contains Class03 o-- Class04 : agregation Class05 --> "1" Class06 Class07 -- > Class08 : act > @enduml 결과화면 연관관계의라벨은다음과같이나타냄 : Class01 1 <-- many Class02 : contains > 을사용하여 Act 표현가능 Driver - Car : drives > 14
5. 도구기능소개 5.4 Class Diagram (2/4) Method, Variable 메소드, 변수표현은다음과같음 Classname : Method() Classname : var_type var_name class Classname{ var_type var_name return_type method_name() } Static, Abstract 는다음과같이사용 {static} var_type var_name {abstract} return_type method_name() 예제코드 @startuml class Dummy { -field1 #field2 {static} String id ~method1() +method2() {abstract} void methods() } @enduml 결과화면 Visibility 메소드, 변수앞에붙여서사용 Character Icon for field Icon for method Visibility - private # protected ~ package private + public 15
5. 도구기능소개 5.4 Class Diagram (3/4) Stereotype 스테레오타입표시 class Classname <<name>> Abstract class, Interface 추상클래스, 인터페이스표시 abstract class Classname interface Interfacename Lolipop interface 는다음과같이표시 interfacename ()- Classname 예제코드 @startuml class Class01 <<general>> abstract class Class02 interface Interface01 class Class02 <T> note top: generic class bar ()-- Class02 @enduml 결과화면 Generic 제네릭클래스표시 class Classname <name> 16
5. 도구기능소개 5.4 Class Diagram (4/4) Package 패키지다이어그램은다음과같이사용 package package_name 내용 end package package package_name {Z 내용 } 패키지갂의연관관계는다음과같이사용 package01 +-- package02 예제코드 @startuml package "Classic_Collections" #DDDDDD { Object < -- ArrayList } package net.sourceforge.plantuml Object < -- Demo1 Demo1 *- Demo2 end package Classic_Collections +-- net.sourceforge.plantuml @enduml 결과화면 17
5. 도구기능소개 5.5 Activity Diagram (1/3) Start, End, Activity 시작점, 종료점, 행동은다음과같이나타냄 (*) --> Activity Activity --> (*) Label 은 [] 을사용하여나타냄 (*) --> [lable] Act1 --> (*) 예제코드 @startuml (*) -up-> [label1] "First Activity" -right-> [label2] "Second Activity" --> [label3] "Third Activity" -left-> (*) @enduml up, down, right, left 를사용하여방향지정가능 (*) -up-> Act1 -right-> Act2 -down-> (*) 결과화면 18
5. 도구기능소개 5.5 Activity Diagram (2/3) Branch 분기를나타낼경우에는 if/then/else 를사용 if test then --> [true] act1 else --> [false] act2 endif 다중 if 문사용가능 Synchronization Fork/Join 을나타내기위해 ===name=== 사용 ===B1=== --> parallel Act1 -->===B2=== 예제코드 @startuml (*) --> ===B1=== --> "Parallel Activity 1" --> ===B2=== ===B1=== --> if "Parallel Activity 2" then -->[true]"act 1" -->===B2=== else -->[flase]"act 2" endif --> ===B2=== --> (*) @enduml 결과화면 ===B1=== --> paraller Act2 -->===B2=== 19
5. 도구기능소개 5.5 Activity Diagram (3/3) Partition 파티션을나타내기위해선 partition 을사용 partition Partition_name{ 내용 } 예제코드 @startuml partition Conductor { (*) --> "Climbs on Platform" --> === S1 === --> Bows } partition Audience LightSkyBlue { === S1 === --> Applauds } @enduml 결과화면 20
5. 도구기능소개 5.6 Component Diagram (1/2) Component component, [] 을사용하여생성 [Component] [Component_2] as Comp2 component Comp3 Interface interface, () 을사용하여생성 () Interface_1 () Interface_2 as Interf2 interface Interf3 예제코드 @startuml interface "Data Access" as DA DA - [First Component] [First Component]..> HTTP : use note left of HTTP : Web Service only note right of [First Component] A note can also be on several lines end note @enduml 결과화면 Relation Class Diagram 과동일 DataAccess - [First Component] [First Component]..> HTTP :use Note 다른다이어그램과동일 21
5. 도구기능소개 5.6 Component Diagram (2/2) Group Component, Interface 의 Grouping interface, node, folder, frame, cloud database 키워드사용. interface Group { 내용 } UML2 notation skinparam componentstyle uml2 를사용하여 UML2 notation 으로변경가능 skinparam componentstyle uml2 예제코드 @startuml skinparam componentstyle uml2 package "Some Group" { HTTP - [First Component] [Another Component] } node "Other Groups" { FTP - [Second Component] [First Component] --> FTP } cloud { [Example 1] } [Another Component] --> [Example 1] @enduml 결과화면 22
5. 도구기능소개 5.7 State Diagram (1/2) Start, End, State 시작점, 종료점, 상태는다음과같이나타냄 [*] --> State1 State1 --> [*] State 의내부는다음과같이나타냄 State1 : content1 State1 : content2 예제코드 @startuml [*] --> Active Active --> Inactive : This is Label Inactive -left-> [*] Active : Content note left of Active : this is a short\nnote note right of Inactive A note can also be defined on several lines end note @enduml 결과화면 Label Label 은 : 을사용하여나타냄 State1 --> State2 : Label 23
5. 도구기능소개 5.7 State Diagram (2/2) Composite Composite 표현은다음과같음 state State{ 내용 } Concurrent 동시상태를나타내기위해선 -- 을사용 state State{ 내용 -- 내용 } 예제코드 @startuml [*] --> Active state Active { [*] -> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] -> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] -> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } @enduml 결과화면 24
5. 도구기능소개 5.8 Object Diagram (1/2) Object 객체의생성 object Obejct_name object Object_name as Obj Relation 객체갂의관계는다음과같이나타냄 Extension: < -- Composition: *-- Aggregation: o-- Link : -- <-- Dependence:.. <.. Realization: <.. 예제코드 @startuml object Object01 object Object02 object Object03 object Object04 Object01 < -- Object02 Object03 *-- Object04 Object05 o-- "4" Object06 Object07.. Object08 : some labels @enduml 결과화면 Label 라벨을나타나기위해선 : 사용 obejct Object_name : Label 25
5. 도구기능소개 5.8 Object Diagram (2/2) Object Field 객체내의필드는다음과같이정의 object user user : name = Dummy user : id = 123 object user{ name = Dummy id = 123 } 나머지접근지정자, 패키지, 노트등의기능들은 Class Diagram 과동일 예제코드 @startuml object user user : name = "Dummy" user : id = 123 object user2 { name = "Dummy2" id = 456 } @enduml 결과화면 26
5. 도구기능소개 5.9 Export 생성된 Diagram 에오른쪽마우스선택을하여 Export 가능 Export 시.png 파일로저장됨 27
6. 도구활용예제 세부목차 6.1 예제소개 6.2 Usecase Diagram 작성 6.3 Class Diagram 작성 6.4 Sequence Diagram 작성 6.5 Activity Diagram 작성 1
6. 도구활용예제 6.1 예제소개 본예제에서는생산관리시스템을예로표현함 요구사항 업무담당자는시스템에접속하여발주, 매입, 매출, 회계, 재고, 기준정보관리가가능. 승인자는발주와매입에대한승인을하며, 시스템관리자는매출, 회계재고, 기준정보에대한시스템관리수행 발주가등록되면발주를위한준비를하여재고여부조사후상품을배송 2
6. 도구활용예제 6.2 Usecase Diagram (1/2) 을사용하여생성된 Usecase Diagram 3
6. 도구활용예제 6.2 Usecase Diagram (2/2) Source Code @startuml : 업무담당자 : as a : 승인자 : as b : 시스템관리자 : as c a --> ( 발주관리 ) a --> ( 매입관리 ) a --> ( 매출관리 ) a --> ( 회계관리 ) a --> ( 재고관리 ) a --> ( 기준정보관리 ) b --> ( 발주관리 ) b --> ( 매입관리 ) c --> ( 매출관리 ) c --> ( 회계관리 ) c --> ( 재고관리 ) c --> ( 기준정보관리 ) @enduml 4
6. 도구활용예제 6.3 Class Diagram (1/2) PlnatUML 을사용하여생성된 Class Diagram 5
6. 도구활용예제 6.3 Class Diagram (2/2) Source Code @startuml class " 발주 Header"{ + 발주전표일자 : string + 전표구분 : string + 운송구분 : string } class " 사원 "{ + 사원번호 : string + 성명 : string +Password : string + 업무권한 : string } class " 발주 Detail"{ + 발주순번 : string + 단위 : string + 수량 : Num + 단가 : Num + 금액 : Num + 배송일 : Date } class " 매장 "{ + 매장코드 : string + 지역정보 : string } class " 매입 Header"{ + 매입일자 : string + 매입전표번호 : string + 매입구분 : string + 매입참조구분 : string + 매입총액 : Num + 부가세액 : Num + 기타비용 : Num + 결재유형 : Char } class " 매입 Detail"{ + 발주번호 : string + 단위 : string + 수량 : Num + 단가 : Num + 금액 : Num + 배송일 : Date } class " 상품 "{ + 상품코드 : string + 품명 : string + 판매단가 : Num + 부가세율 : Num + 자동발주구분 : Char + 이익률 : String } class " 거래처 "{ + 거래처코드 : string + 업체명 : string + 업체담당자 : string + 결재일 : Date } " 발주 Header" -down- "1..*" " 사원 " " 발주 Header" -- " 거래처 " " 발주 Header" -down- " 매장 " " 발주 Header" "1..*" - " 발주 Detail" " 발주 Detail" "1..*" - "1" " 상품 " " 매입 Header" "*" -down- "*" " 거래처 " " 매입 Header" "1..*" -right- " 매입 Detail" " 매입 Detail" -down- " 상품 " @enduml 6
6. 도구활용예제 6.4 Sequence Diagram (1/2) PlnatUML 을사용하여생성된 Sequence Diagram 7
6. 도구활용예제 6.4 Sequence Diagram (2/2) Source Code @startuml hide footbox autonumber 발주등록 -> 발주 : 준비 () activate 발주발주 -> 발주처리 : 준비 () activate 발주처리 deactivate 발주발주처리 -> 재고 : 점검 () activate 재고 deactivate 발주처리재고 -> 재고 : 재주문이필요한가 () deactivate 재고재고 -> 재주문 : new() activate 재주문 deactivate 재주문재고 --> 발주처리 : Reutrn() 발주처리 -> 배송상품 activate 배송상품 deactivate 배송상품 @enduml 8
6. 도구활용예제 6.5 Activity Diagram (1/2) 을사용하여생성된 Activity Diagram 9
6. 도구활용예제 6.5 Activity Diagram (2/2) Source Code @startuml (*)--> " 재고파악 " " 재고파악 "--> ===a=== --> " 발주거래처선정 " --> ===b=== ===a=== --> " 발주데이터입력 " --> ===b=== ===b=== -->" 발주서송신 " " 발주서송신 " --> ===c=== " 배송예정서수신 " --> ===c=== ===c=== --> " 상품입고 / 검수 " " 상품입고 / 검수 " --> " 검수확인서송신 " " 검수확인서송신 " --> " 재고등록 " " 재고등록 " --> (*) @enduml 10
7. FAQ 질문 1) UML2 를지원하나요? 답변 1 : 네. skinparam 이라는키워드를통하여 UML2 형태의다이어그램을생성할수있습니다. 질문 2) 다른모델링툴과의차이점은뭔가요? 답변 2 : 다른모델링툴과는달리, 은스크립트언어를사용하여 UML 을작성하고자동적으로다이어그램을생성하게됩니다. 질문 3) 생성된다이어그램을다른모델링툴처럼조작이가능한가요? 답변 3 : 아니요. 은스크립트언어로만 UML 작성이가능하며, 생성된다이어그램은이미지파일형태로출력되기때문에, 수정이어렵습니다. 1
8. 도구평가 활용성 스크립트언어를이용하여빠르게 UML 제작및편집가능 범용성 다양한프로그램에서의 Add-on 기능지원 호환성 대부분의 OS 에서설치및사용가능 성능 Java 기반이지만, 실사용에는문제없음 기타 스크립트언어를이용한 UML 작성 다양한스킨제공 ASCII Art로표현가능 도구평가의견 Cross-Platform 기반으로써, 대부분의운영체제에서사용가능 스크립트언어사용으로인하여 UML 제작및편집이빠름 다양한프로그램에 Add-on 을제공함으로써, 다른프로그램과연동가능 1
9. 용어정리 본매뉴얼에서사용하고있는용어의정리 UML Sequence Diagram Unified Modeling Language 의약자이며요구분석, 시스템설계, 시스템구현등의시스템개발과정에서, 개발자간의의사소통을원활하게이루어지게하기위하여표준화한모델링언어. 문제해결에필요한객체를정의하고객체간동적상호관계를시간순서에따라정의하는모델. Class Diagram 시스템에서사용되는객체타입 ( 클래스 ) 을정의하고그들간에존재하는정적인관계를표현한다이어그램. Use Case Diagram 사용자관점에서 SW 시스템의범위와기능을정의하고, 시스템이해야할무엇을작성하는모델. 1