-
[UML] 시퀀스 다이어그램 (Sequence Diagram)공부 2020. 8. 1. 22:51
시퀀스 다이어그램은 특정 행동이 어떠한 순서로 어떤 객체와 어떻게 상호작용을 하는지 표현하는 행위 다이어그램입니다. 현재 존재하는 시스템이 어떠한 시나리오로 움직이고 있는지를 나타내는데 장점을 가지고 있습니다. 시퀀스 다이어그램을 이용하면 API 등의 유즈 케이스를 디테일하게 알 수 있고 타 시스템의 API 호출 등의 로직을 모델링할 수 있어 시나리오를 파악하기 좋습니다.
예를 들어, 고객이 29CM 사이트 주문을 했을 때 고객이 주문한 시점부터 29CM 사이트의 주문 처리 순서, 이후 반환 케이스를 연속적으로 표현할 수 있습니다.
Lifeline
모델링 되는 인스턴스를 나타냅니다. Lifeline은 네모와 점선으로 이루어져 있으며 네모가 객체의 관점으로 표현했다면 클래스이고 서비스 관점으로 표현했으면 컴포넌트가 됩니다. 점선은 시간의 경과를 나타냅니다.
Activation
Activation은 Lifeline의 인스턴스가 다른 인스턴스와 상호 작용을 하며 활성화 되어 있는 것을 나타냅니다. Activation은 직사각형의 막대로 Lifeline의 점선 가운데에 표시합니다.
Message
메시지는 인스턴스 간 주고 받은 데이터를 나타냅니다. 일반적으로 요청과 응답 (HTTP 통신 기준)으로 나타냅니다.
메시지는 아래와 같은 유형을 가집니다.
유형 내용 동기 메시지 (Sync message)
요청을 보낸 후 반환이 올때까지 대기 비동기 메시지 (Async message) 요청을 보낸 다음 반환을 기다리지 않고 다른 작업을 수행 자체 메시지 (Self message) 자기 자신에게 요청을 보냄 반환 메시지 (Reply/Return message) 요청에 대해 메시지를 반환
동기 메시지
동기 메시지는 실선과 꽉 찬 화살표로 표현을 합니다. 동기 메시지 이므로 요청을 보낸 후, 결과가 올 때까지 기다립니다.
비동기 메시지
비동기 메시지는 실선과 선으로 이뤄진 화살표로 표현을 합니다. 비동기 메시지이므로 요청을 보낸 후, 결과를 기다리지 않습니다.
자체 메시지
자체적으로 작업을 처리할 때, 자체 메시지를 사용합니다. 자체 메시지는 본인의 Lifeline으로 회귀하는 화살표를 그립니다.
반환 메시지
동기 메시지에서 표현했던 것과 같이 요청에 대한 결과를 반환합니다. 점선과 선으로 이뤄진 화살표로 표현합니다.
흐름 제어
위의 표현으로도 충분히 시퀀스 다이어그램을 그릴 수 있습니다. 여기선 좀 더 프로그래밍적인 표현을 설명합니다. 로직에서는 if, for, while과 같은 흐름을 제어하는 표현식이 있는데 시퀀스 다이어그램은 시간 순으로 인스턴스 간 상호작용을 표현하기 때문에 흐름을 제어하는 표현들이 필요할 수 있습니다. 여기서 사용하는 요소가 Guard와 Sequence Fragment입니다.
Guard
Guard는 단일 메시지에 대해 조건을 명시할 수 있는 방법입니다. 사용법은 메시지의 앞 쪽에 [ ] 대괄호로 감싼 후 조건을 명시합니다. 예를 들어, 가격이 10,000원 이상이라고 하면 [price > 10000]이라고 명시합니다. 아래는 가격이 10000원 이상이라면 배송비를 무료로 처리하도록 하는 예시입니다. 만약 가격이 10000원 미만이면 해당 메시지는 호출되지 않습니다.
Sequence Fragment
Sequence Fragment는 범위로 조건을 명시할 수 있습니다. 특정 부분에 대해서 메시지를 반복하거나 조건을 명시할 때 사용됩니다.
alternative
alternative는 alt로 줄여서 사용합니다. alt는 조건문인 if/else문을 Guard를 사용해 표현할 수 있습니다. 즉, 조건에 따라 선택 사항이 여러 개일 경우 사용됩니다. 아래는 가격이 10000원 이상이면 배송비를 무료로 처리하고 그렇지 않으면 배송비를 유료로 사용하는 것을 표현한 예시입니다.
option
option은 opt로 줄여서 사용합니다. opt는 조건문인 if문을 Guard를 사용해 표현할 수 있습니다. 즉, 조건에 따라 선택 사항이 단 한 개일 경우에 사용됩니다. 아래는 가격이 10000원 이상이라면 배송비를 무료로 처리하고 고객이 추가 할인 쿠폰을 요청한 다음 쿠폰을 제공하는 예시입니다. 만약 가격이 10000원 미만이라면 해당 로직을 타지 않습니다.
opt를 보면 Guard만 사용한 것과 유사해 보입니다.
opt를 사용했는데 처리하는 내용이 1개라면 Guard와 동일한 효과를 나타냅니다.
두 개의 차이는 Guard는 'A라면 B한다.' 와 같이 1개에 대해 1가지의 결과를 보여주는 반면, opt는 'A라면 B도 하고 C도 하고 D도 하고 등등을 한다.' 와 같이 1개에 대해 여러 결과를 나타낼 수 있습니다.
loop
loop은 단어 의미 그대로 for, while과 같은 반복문을 표현합니다. 아래는 입력된 시간이 2020-08-01보다 작을때 반복문을 실행하고 그 하위 조건으로 처리를 하는 예시입니다.
parallel
parallel은 단어 그대로 병렬 처리를 의미하며 par로 줄여서 사용합니다. 아래는 상품 주문이 들어왔을 때, 상품 확인과 배송 여부 확인을 병렬로 진행하는 것을 표현한 예시입니다.