UML을 그리는 방법은 다양합니다.
Draw.io를 이용해서 손 수 그림을 그리는 방법이 있고
Gaphor라는 Sysml이 지원되는 툴도 있습니다.

블록 다이어그램을 그려야하는 상황에서는 Draw.io나 Gaphor가 좋은 선택이될 수 있습니다.
다만 실제 업무에서 블록 다이어그램을 그려야하는 경우는 프로젝트 초창기에
정적아키텍처인 Preliminary Architecture를 그리거나 System Overview를 그려야하는 상황이 되겠지만
동적 아키텍처를 그려야하는 시퀀스 다이어그램의 경우에는 이야기가 좀 달라집니다.
각각의 요구사양이 어떻게 동작하는지의 관점으로 설명해야하기 때문에
시퀀스다이어그램의 양이 상당히 방대해집니다.
보통 전문적인 툴을 쓰면 바로바로 그려지지만
무료툴을 사용해야하는 입장에서는 직접 손수 그림을 그리자니 상당히 비효율적입니다.

그래서 사용할 수 있는게 코딩입니다.
그 중에서도 PlantUML이라는 툴을 소개하고자합니다.

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

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

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

그전에 설정을 하나 해줘야하는데요.
우선 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
