시퀀스 다이어그램은 시스템이나 소프트웨어에서 객체 간의 상호작용을 시간 순서에 따라 시각적으로 표현하는 도구입니다.
특히 소프트웨어 설계나 분석 과정에서 많이 사용됩니다.
이 글에서는 PlantUML을 사용하여 시퀀스 다이어그램을 그리는 방법을 간략히 설명합니다.

1. 시퀀스 다이어그램이란?

시퀀스 다이어그램은 시스템의 객체들이 서로 주고받는 메시지와 그 흐름을 시간 순서대로 보여줍니다. 이 다이어그램은 다음의 상황에서 유용합니다:

  • 객체 간 상호작용: 객체들이 시스템에서 어떻게 서로 통신하고 상호작용하는지 시각적으로 설명합니다.
  • 시간의 흐름을 표현: 상호작용이 일어나는 순서를 강조하여 시스템 동작을 시간 흐름에 따라 명확하게 보여줍니다.

PlantUML을 사용하면 간단한 텍스트 기반의 문법으로 이러한 시퀀스 다이어그램을 빠르고 쉽게 그릴 수 있습니다.

2. PlantUML 시퀀스 다이어그램 기본 문법

2.1 기본적인 구조

PlantUML에서 시퀀스 다이어그램을 작성할 때는 다음과 같이 @startuml@enduml 사이에 다이어그램을 작성합니다. 아래는 두 객체가 서로 상호작용하는 간단한 예시입니다.

@startuml
participant 사용자
participant "웹 서버" as WS
participant "데이터베이스" as DB

사용자 -> WS : 데이터 요청
WS -> DB : 데이터 조회
WS <-- DB : 데이터 응답
WS --> 사용자 : 결과 반환
@enduml

2.2 구성 요소 설명

  • participant: 객체나 시스템을 다이어그램에 추가할 때 사용합니다. 사용자, 웹 서버, 데이터베이스와 같은 시스템의 요소들을 정의합니다.
  • ->와 <– 화살표: 객체 간의 메시지를 나타내는 화살표로, ->메시지를 보낼 때, <--응답 메시지를 받을 때 사용합니다.

3. PlantUML의 다양한 구성 요소

3.1 Actor (행위자)

Actor는 시스템과 상호작용하는 외부 사용자나 시스템을 나타냅니다. 주로 시스템이 사용자와 어떻게 상호작용하는지를 설명하는 데 사용됩니다.

@startuml
actor 사용자
participant "웹 서버" as WS

사용자 -> WS : 데이터 요청
@enduml

위 예시에서 사용자는 시스템 외부의 행위자로, 웹 서버에 요청을 보냅니다.

3.2 Boundary (경계)

Boundary는 시스템의 경계를 나타내며, 시스템의 인터페이스를 표현합니다. 일반적으로 사용자가 상호작용하는 화면이나 인터페이스를 나타내는 데 사용됩니다.

@startuml
boundary "사용자 인터페이스" as UI
participant "웹 서버" as WS

UI -> WS : 로그인 요청
@enduml

위 예시에서 사용자 인터페이스는 사용자가 웹 서버에 로그인 요청을 보내는 경계를 표현합니다.

3.3 Control (제어)

Control은 시스템의 비즈니스 로직이나 제어 흐름을 나타내며, 주로 시스템의 규칙을 처리하는 컴포넌트를 나타냅니다.

@startuml
control "비즈니스 로직" as BL
participant "웹 서버" as WS

WS -> BL : 요청 처리
@enduml

여기서 비즈니스 로직은 웹 서버가 요청을 처리하는 과정에서 필요한 제어 컴포넌트를 나타냅니다.

3.4 Entity (엔티티)

Entity는 데이터 저장소를 나타내며, 데이터 모델을 표현합니다. 주로 데이터베이스와 연결된 개체를 나타내는 데 사용됩니다.

@startuml
entity "사용자 데이터" as UD
participant "웹 서버" as WS

WS -> UD : 사용자 정보 조회
@enduml

위 예시에서 사용자 데이터는 웹 서버가 사용자 정보를 조회하는 데이터 모델을 나타냅니다.

3.5 Database (데이터베이스)

Database는 데이터베이스를 나타내며, 데이터 저장소에 대한 상호작용을 표현합니다.

@startuml
database "사용자 DB" as DB
participant "웹 서버" as WS

WS -> DB : 데이터 저장
@enduml

여기서 사용자 DB는 웹 서버가 데이터를 저장하는 데이터베이스를 나타냅니다.

3.6 Collections (컬렉션)

Collections는 객체의 그룹을 나타내며, 여러 객체를 하나의 단위로 처리할 때 유용합니다.

@startuml
collection "상품 목록" as CL
participant "웹 서버" as WS

WS -> CL : 상품 리스트 요청
@enduml

이 예시에서 상품 목록은 웹 서버가 요청한 여러 상품 정보를 나타냅니다.

3.7 Queue (큐)

Queue는 메시지나 작업을 일시적으로 저장하는 구조를 나타내며, 비동기 작업 처리를 표현할 때 유용합니다.

@startuml
queue "작업 큐" as Q
participant "웹 서버" as WS

WS -> Q : 작업 추가
@enduml

위 예시에서 작업 큐는 웹 서버가 비동기 작업을 큐에 추가하는 과정을 나타냅니다.

4. 생명선의 활성화(Activation)와 비활성화(Deactivation)

생명선의 활성화는 객체가 특정 시점에서 동작 중임을 나타내며, 비활성화는 그 동작이 완료되었음을 나타냅니다. 객체의 생명선(lifeline)은 활성화된 동안 두꺼워지며, 비활성화되면 다시 얇아집니다.

4.1 활성화와 비활성화 예시

@startuml
actor 사용자
participant "웹 서버" as WS
participant "데이터베이스" as DB

사용자 -> WS : 데이터 요청
activate WS
WS -> DB : 데이터 조회
activate DB
WS <-- DB : 데이터 응답
deactivate DB
사용자 <-- WS : 결과 반환
deactivate WS
@enduml
  • activate: 객체가 활성화되었음을 나타내며, 생명선이 나타나며 객체가 작업 중임을 표시합니다.
  • deactivate: 객체가 작업을 완료하고 비활성화되었음을 나타냅니다. 생명선이 다시 사라집니다.

5. 루프(Loop)와 조건(Condition)

시스템 내에서 반복되거나 조건에 따라 다르게 동작하는 상호작용은 loopalt 키워드를 사용하여 시퀀스 다이어그램으로 표현할 수 있습니다.

5.1 반복문(Loop)

반복적인 상호작용은 loop 키워드를 사용하여 나타낼 수 있습니다. 예를 들어, 사용자가 서버에 지속적으로 하트비트를 전송하는 과정을 다이어그램으로 나타내 보겠습니다.

@startuml
actor 사용자
participant "웹 서버" as WS

loop 5초마다
    사용자 -> WS : 하트비트 전송
end
@enduml

5.2 조건문(Alternative)

조건에 따라 다른 메시지를 보내는 상호작용은 altelse 키워드를 사용해 표현할 수 있습니다.

@startuml
actor 사용자
participant "웹 서버" as WS
participant "데이터베이스" as DB

사용자 -> WS : 데이터 요청

alt 요청이 유효할 때
    WS -> DB : 데이터 조회
    DB --> WS : 데이터 응답
else 요청이 유효하지 않을 때
    WS --> 사용자 : 오류 메시지
end

WS --> 사용자 : 결과 반환
@enduml
  • alt: 조건이 참일 때 실행될 메시지를 나타냅니다.
  • else: 조건이 거짓일 때 실행될 메시지를 나타냅니다.

이 방식을 사용하면 조건에 따른 다양한 동작 경로를 시각적으로 표현할 수 있습니다.

6. 기타 고급 기능

6.1 참조(Reference)

복잡한 시퀀스 다이어그램을 여러 개의 작은 부분으로 나누고 싶을 때 ref over를 사용할 수 있습니다. 이는 코드나 다른 시퀀스 다이어그램의 일부를 참조하는 데 유용합니다.

@startuml
participant 사용자
participant WS

사용자 -> WS : 데이터 요청

ref over WS
    WS는 데이터를 처리하고 응답을 준비합니다.
end ref

WS --> 사용자 : 데이터 반환
@enduml

6.2 그룹화(Grouping)

비슷한 작업을 묶어 시퀀스 다이어그램을 깔끔하게 정리하고 싶을 때는 group 키워드를 사용하여 여러 메시지를 그룹화할 수 있습니다.

@startuml
participant 사용자
participant "웹 서버" as WS
participant "데이터베이스" as DB

group 사용자 요청
    사용자 -> WS : 데이터 요청
    WS -> DB : 데이터 조회
end

group 데이터 응답
    DB --> WS : 데이터 반환
    WS --> 사용자 : 결과 반환
end
@enduml

7. 시퀀스 다이어그램의 활용

7.1 소프트웨어 설계

시퀀스 다이어그램은 객체 간 상호작용을 명확하게 시각화하여, 개발자들이 시스템 내부의 동작을 설계하는 데 도움을 줍니다. 각 객체가 언제 어떤 메시지를 주고받는지 쉽게 이해할 수 있습니다.

7.2 시스템 분석

복잡한 시스템에서 문제를 분석하거나 병목 현상을 찾는 데 시퀀스 다이어그램이 매우 유용합니다. 특히 비동기 통신이 많을 때, 데이터 흐름을 시각화하여 문제를 쉽게 파악할 수 있습니다.

7.3 팀 간 커뮤니케이션

개발자뿐만 아니라 비개발자와도 쉽게 커뮤니케이션할 수 있는 도구입니다. 복잡한 시스템의 동작을 시각적으로 명확하게 보여줌으로써 시스템의 동작을 쉽게 설명할 수 있습니다.


참고 사이트

PlantUML 공식 안내문서