.. Cover Letter

ㅇ공부#자동차/시스템 설계

PlantUML을 이용해 시퀀스 다이어그램 그리기

BrainKimDu 2025. 9. 20. 22:52

UML을 그리는 방법은 다양합니다.

Draw.io를 이용해서 손 수 그림을 그리는 방법이 있고

Gaphor라는 Sysml이 지원되는 툴도 있습니다.

gaphor

 

블록 다이어그램을 그려야하는 상황에서는 Draw.io나 Gaphor가 좋은 선택이될 수 있습니다.

다만 실제 업무에서 블록 다이어그램을 그려야하는 경우는 프로젝트 초창기에 

정적아키텍처인 Preliminary Architecture를 그리거나 System Overview를 그려야하는 상황이 되겠지만

동적 아키텍처를 그려야하는 시퀀스 다이어그램의 경우에는 이야기가 좀 달라집니다.

 

각각의 요구사양이 어떻게 동작하는지의 관점으로 설명해야하기 때문에

시퀀스다이어그램의 양이 상당히 방대해집니다.

보통 전문적인 툴을 쓰면 바로바로 그려지지만

 

무료툴을 사용해야하는 입장에서는 직접 손수 그림을 그리자니 상당히 비효율적입니다.

 

 

그래서 사용할 수 있는게 코딩입니다.

그 중에서도 PlantUML이라는 툴을 소개하고자합니다.

 

준비물은 VS Code가 필요합니다.

Extension에서 PlantUML을 다운로드해주시고 PlantUml을 사용할 수 있는 작업 공간을 하나 만들어 줍니다.

 

 

파일을 하나 생성하구요. 확장자명은 puml로 해주시면됩니다.

 

 

그전에 설정을 하나 해줘야하는데요.

우선 java를 다운받아야합니다.

Windows용 Java 다운로드

 

Windows용 Java 다운로드

 

www.java.com

 

터미널을 열고

Java를 입력하거나 Java -V를 입력하거나 Java -Version을 입력하거나 해서 아래가 안뜨면됩니다.

(VS Code 재부팅 필요)

 

우선 뼈대는 아래와 같습니다.

@startuml


@enduml

그러면 

내부에 원하는 내용을 넣어주면 됩니다. 

하나 예로 들어서 A가 B에게 돈을 주는 상황을 만들어보죠

@startuml

A -> B: 100만원

@enduml

보시면 아시겠지만 A가 B에게라는 느낌 100만원은 Test 느낌입니다.

plantuml의 장점은 코드를 작성함과 동시에 미리보기도 지원이됩니다.

ctrl + shift + p를 누르고 plantuml을 검색합니다.

그러면 여기서 preview current diagram을 선택합니다.

이런식으로 표현되는걸 볼 수 있습니다.

조금 바꿔서 A는 손님 B는 점원으로 합시다.

B가 5초 후에 A에게 거스름돈 50만원을 준다고 합시다.

이 경우에 B가 5초간 작업을 잡고 있어야합니다.

@startuml

A -> B: 100만원
B -> A: 50만원

@enduml

일단 돈을 돌려주는 것 까지는 확인을 했다 치고

B가 5초간 대기를 해야하는데 이때, 사용하는게 Activation입니다.

@startuml

A -> B: 100만원
activate B
note right of B: 5초 대기
B -> A: 50만원
deactivate B


@enduml

 

이런식으로 표현할 수도 있구요

@startuml

A -> B: 100만원
activate B
B -> B: 계산중
B -> A: 50만원
deactivate B


@enduml

이런 방법도 있을 수 있습니다.

A가 준돈이 100만원이라면 B는 50만원을 주고 50만원보다 적으면 "돈이적다"라고 말을 해봅시다.

@startuml

A -> B: 100만원
activate B
note right of B: 5초 대기

alt 100만원
    B -> A: 50만원
    deactivate B
else 50만원이하
    B -> A: "돈이 적다"
    deactivate B
end

@enduml

이런느낌으로 조건문도 만들 수 있죠

이제 50만원을 5만원권으로 10번 준다고 해봅시다.

@startuml

A -> B: 100만원
activate B
note right of B: 5초 대기

alt 100만원
    loop 10회 (5만원씩 지급)
    B --> A: 5만원
    end
else 50만원이하
    B -> A: "돈이 적다"
end
deactivate B

@enduml

이런 느낌으로 반복문도 만들 수 있죠.

 

 

 

다음은 병렬처리입니다. 같은 시간대에 돌아가는 경우 par를 통해서 나타내면 됩니다.

@startuml
participant A
participant B
participant C
participant D

par A와 B의 거래
    A -> B: 100만원 준다
else C와 D의 거래
    C -> D: 100만원 준다
end

A -> D: "안녕하세요"
D -> A: "네, 반갑습니다"
@enduml