Tools/ETC

Plant UML 기본 사용방법

칼쵸쵸 2024. 7. 30. 16:36
반응형

https://plantuml.com/ko/

설명

PlantUML은 다이어그램과 차트를 만드는 데 사용되는 텍스트 기반 스크립팅 언어입니다. 소프트웨어 개발자들이 아키텍처나 설계를 문서화하는 데 자주 사용되며, 시퀀스 다이어그램, 유스케이스 다이어그램, 클래스 다이어그램 등 다양한 유형의 다이어그램을 지원합니다.

PlantUML 문법을 배우는 것이 필요한지 여부는 여러분의 작업과 요구에 따라 달라질 수 있습니다. 만약 여러분이 다음과 같은 상황에 있다면 PlantUML을 배우는 것이 도움이 될 수 있습니다:

  1. 소프트웨어 개발: 코드와 함께 시각적인 설계를 문서화하는 것이 중요하다면, PlantUML은 이를 효과적으로 도와줄 수 있습니다.
  2. 프로젝트 관리: 프로젝트의 흐름이나 프로세스를 명확하게 보여줄 필요가 있을 때 유용합니다.
  3. 문서화 요구: 팀이나 클라이언트에게 복잡한 정보를 명확하게 전달해야 할 때, 다이어그램을 이용한 시각화가 효과적일 수 있습니다.

예제 실행 : https://www.plantuml.com/plantuml/uml/LSz13e8m48NX_PpYXJqNO46OQho0yG0Jc6WJQB4pU7wjBeJrzze_CvXByMsPIKRF1JVJGgiKZsDS9JcQIopcECrYra0CVEIhZZbDEmz4zHEqFRZ3ESFoelw8wLuJyIMkOEBgeGEZw7DJypy62cZRlZx_igqvcTAakmN_5ZLK6-d0J8EcwNFJ6m00

 

기본 문법

1. 시작과 끝

모든 PlantUML 코드는 @startuml로 시작해서 @enduml로 끝납니다. 이 구문 사이에 다이어그램을 정의하는 코드를 작성합니다.

@startuml
' 여기에 다이어그램 코드 작성
@enduml

2. 클래스 다이어그램

클래스 다이어그램은 클래스들과 그 관계를 표현합니다. 간단한 클래스를 생성하고, 다른 클래스와의 관계를 나타내 보겠습니다.

@startuml
class Car {
  +startEngine()
  +stopEngine()
  +drive()
}

class Driver {
  +name: String
  +drive(car: Car)
}

Driver -right-> Car : drives >
@enduml

 

이 코드는 Car 클래스와 Driver 클래스를 만들고, Driver가 Car를 "drives" 관계로 연결합니다.

 

클래스 정의

클래스는 기본적으로 이름, 필드(속성), 메소드(함수)로 구성됩니다. 필드와 메소드 앞에는 접근 제어자(+, -, #, ~ 등)를 사용하여 공개(public), 비공개(private), 보호(protected), 패키지(package) 접근을 표시할 수 있습니다.

@startuml
class Car {
  -engine: Engine
  +startEngine(): void
  +stopEngine(): void
}
@enduml

 

이 코드에서 Car 클래스는 비공개 필드 engine과 공개 메소드 startEngine() 및 stopEngine()을 포함하고 있습니다.

 

관계 정의

클래스 다이어그램에서 클래스 간의 관계를 다음과 같이 표현할 수 있습니다:

  • 연관 관계 (Association): 일반적으로 두 클래스가 서로를 알고 있음을 나타냅니다. 화살표(-->)로 표시하며, 방향은 관계의 방향을 나타냅니다.
  • 집합 관계 (Aggregation): 전체와 부분의 관계를 나타내며, 빈 다이아몬드(o--)로 표시합니다.
  • 합성 관계 (Composition): 더 강한 형태의 집합 관계로, 부분이 전체 없이는 존재할 수 없음을 나타내며, 채워진 다이아몬드(*--)로 표시합니다.
  • 상속 관계 (Inheritance): 하위 클래스가 상위 클래스의 특성을 상속받음을 나타내며, 빈 삼각형(^--)으로 표시합니다.
@startuml
class Vehicle {
  +drive(): void
}

class Car extends Vehicle {
  +startEngine(): void
}

class Wheel {
  -rotate(): void
}

Car o-- Wheel : has >
@enduml

여기서 Car는 Vehicle로부터 상속받고, Wheel과는 집합 관계를 가집니다.

인터페이스와 구현

클래스 다이어그램에서 인터페이스는 일반적으로 <<interface>> 스테레오타입을 사용하여 표시하고, 구현은 점선 화살표(..|>)로 표현합니다.

@startuml
interface Movable {
  +move(): void
}

class Car implements Movable {
  +move(): void
}
@enduml

Car 클래스가 Movable 인터페이스를 구현하는 관계를 나타내고 있습니다.

패키지 사용

클래스들을 논리적으로 그룹화하기 위해 package 키워드를 사용할 수 있습니다. 이는 코드의 모듈성을 향상시키고, 복잡한 다이어그램을 더 쉽게 이해할 수 있게 합니다.

@startuml
package "Vehicle System" {
  class Car {
    +drive(): void
  }
  class Motorcycle {
    +drive(): void
  }
}
@enduml

이 예제에서는 Car와 Motorcycle을 "Vehicle System" 패키지로 그룹화하고 있습니다.

 

3. 시퀀스 다이어그램

시퀀스 다이어그램은 객체들 간의 상호작용을 시간 순서에 따라 나타냅니다. 메시지 전송과 처리 과정을 표현할 수 있습니다.

@startuml
actor User
participant "First Class" as A
participant "Second Class" as B

User -> A: Do something
activate A
A -> B: A request
activate B
B -->> A: A response
deactivate B
A -->> User: Done
deactivate A
@enduml

 

 

이 예제에서는 사용자가 첫 번째 클래스에게 작업을 요청하고, 그 요청이 두 번째 클래스로 전달되며, 최종적으로 사용자에게 응답이 돌아가는 과정을 보여줍니다.

 

시퀀스 다이어그램을 작성할 때 사용할 수 있는 PlantUML의 다양한 문법 요소들을 살펴보겠습니다. 이러한 요소들을 사용하면 보다 복잡하고 상세한 상호 작용을 표현할 수 있습니다.

객체 생성과 소멸

객체가 다이어그램의 특정 지점에서 생성되거나 소멸되는 것을 표현할 수 있습니다.

  • 생성: 객체를 생성할 때는 new 키워드를 사용합니다.
  • 소멸: 객체를 소멸시킬 때는 destroy 키워드를 사용합니다.
@startuml
actor User
participant "System" as Sys

create Sys
User -> Sys: Initialize()
activate Sys

Sys -> Sys: Process data
destroy Sys
@enduml

활성화 및 비활성화

객체가 활동 중인 상태를 표시하기 위해 activate 및 deactivate 키워드를 사용할 수 있습니다.

@startuml
actor User
participant "Database" as DB

User -> DB: Query
activate DB
DB -> DB: Process query
deactivate DB
DB --> User: Result
@enduml

 

분기 및 루프

분기(조건에 따라 다른 경로를 선택) 및 루프(동일한 작업을 반복)를 표현할 수 있습니다.

  • 분기:
@startuml
actor User
participant "System" as Sys

User -> Sys: Request
alt successful case
    Sys --> User: Success response
else error case
    Sys --> User: Error response
end
@enduml

 

  • 루프
@startuml
actor User
participant "Service" as Svc

loop each item
    User -> Svc: Process item
    Svc --> User: Item processed
end
@enduml

참조

다른 시퀀스 다이어그램을 참조하여 복잡한 다이어그램을 단순화할 수 있습니다.

@startuml
actor User
participant "Authentication" as Auth

User -> Auth: Login
ref over Auth: Check Credentials
Auth --> User: Login Response
@enduml

비동기 메시지

비동기 메시지를 표현하기 위해 화살표 끝에 x를 사용할 수 있습니다.

@startuml
actor User
participant "AsyncService" as Async

User -> Async: Start Operation
Async ->x User: Operation Completed
@enduml

 

Box

box 명령은 시퀀스 다이어그램에서 여러 참여자를 시각적으로 그룹화하기 위해 사용됩니다. 이를 통해 특정 서브시스템이나 모듈의 참여자들을 하나의 그룹으로 묶어 명확하게 표시할 수 있습니다. 박스는 선택적으로 색상과 제목을 지정할 수 있으며, 다이어그램의 가독성을 향상시키는 데 도움을 줍니다.

@startuml
box "인증 모듈" #LightBlue
participant "로그인 시스템"
participant "토큰 발급기"
end box
@enduml

이 예제에서는 "인증 모듈"이라는 제목과 함께 연한 파란색 배경의 박스를 사용하여 두 참여자를 그룹화하고 있습니다.

 

Group

group 명령은 특정 조건이나 반복되는 작업 등을 그룹화하여 다이어그램 내에서 명확하게 구분짓습니다. 이를 통해 다이어그램의 복잡성을 관리하고, 특정 프로세스의 시작과 끝을 시각적으로 표시할 수 있습니다. 일반적으로 alt, else, loop, group 등의 키워드와 함께 사용됩니다.

@startuml
actor 사용자
participant "시스템"

group 로그인 과정
    사용자 -> 시스템: 로그인 요청
    alt 성공적인 로그인
        시스템 -> 사용자: 로그인 성공
    else 로그인 실패
        시스템 -> 사용자: 로그인 실패
    end
end
@enduml

이 예제에서는 로그인 과정을 group으로 묶어 성공과 실패의 경우를 alt와 else로 나누어 표현하고 있습니다.

 

완료 (Completion)

PlantUML에서 "완료"는 특정 작업이나 상호작용이 끝났음을 나타내는 일반적인 용어입니다. 특별한 구문이나 명령어가 있는 것이 아니라, 메시지 전송을 통해 작업이 완료되었음을 표시합니다.

@startuml
actor 사용자
participant "서비스"

사용자 -> 서비스: 작업 시작
서비스 -> 사용자: 작업 완료
@enduml

 

이 경우, "작업 완료" 메시지는 서비스에서 사용자로 전송되어, 특정 작업이 끝났음을 알립니다.

 

4. 주석

코드에 주석을 추가하려면 한 줄 주석은 '를, 여러 줄 주석은 /''와 '/'를 사용합니다.

@startuml
' 이것은 한 줄 주석입니다.
/' 이것은
여러 줄
주석입니다. '/
@enduml

 

반응형

'Tools > ETC' 카테고리의 다른 글

Apache Iceberg 기본 구조  (0) 2025.01.16