시퀀스 다이어그램(Sequence Diagram)은 UML(Unified Modeling Language)의 여러 다이어그램 중 하나로, 시스템이나 특정 기능이 실행될 때 관련된 객체들 사이의
상호작용
을
시간 순서에 따라
자세히 보여주는 동적 모델링 도구입니다.
이름에서 알 수 있듯이, '순서(Sequence)'가 핵심입니다. 어떤 객체가 다른 객체에게 요청을 보내고, 그 요청을 받은 객체가 응답하거나 또 다른 객체에게 일을 시키는 일련의 과정을 시간 축을 따라 위에서 아래로 표현합니다.
Sequence diagram
클래스 다이어그램이 시스템의 '등장인물 소개'라면, 시퀀스 다이어그램은 그 등장인물들이 특정 '장면(시나리오)'에서 어떤 '대사(메시지)'를 주고받으며 '연기(동작)'하는지를 보여주는 '대본'과 같습니다.
특히 다음과 같은 경우에 매우 유용하게 활용됩니다.
유스케이스(Use Case) 실현
사용자의 특정 요구사항(유스케이스)이 시스템 내부에서 어떤 객체들의 협력을 통해 이루어지는지 구체적으로 보여줄 때.
복잡한 로직 분석
여러 객체가 복잡하게 얽혀 있는 작업의 흐름이나 로직을 명확하게 파악하고 싶을 때.
설계 검증 및 의사소통
설계 단계에서 시스템의 동적 행위를 미리 시뮬레이션해보고 문제점을 발견하거나, 개발팀 내에서 시스템 동작 방식에 대한 공통된 이해를 구축할 때.
시스템 외부에서 시스템과 상호작용하는 사람, 다른 시스템, 또는 장치 등을 나타냅니다.
일반적으로 막대기 사람 모양의 아이콘으로 표현되며, 다이어그램의 가장 왼쪽이나 오른쪽에 위치하여 상호작용의 시작점이나 종착점이 되는 경우가 많습니다.
예시: 사용자, 외부 API 서버, 센서 장치
객체 (Object) 와 라이프라인 (Lifeline)
다이어그램에 참여하여 메시지를 주고받는 각 객체를 의미합니다.
사각형 안에 객체이름:클래스이름 (예: myOrder:Order) 또는 클래스 이름만 :클래스이름 (익명 객체, 예: :DatabaseManager) 형태로 표시합니다.
각 객체 아래로는 세로로 점선이 길게 이어지는데, 이를
라이프라인(Lifeline, 생명선)
이라고 부릅니다.
라이프라인은 해당 객체가 시나리오가 진행되는 동안 존재하며 활동하는 시간을 시각적으로 나타냅니다.
동기 메시지에 대한 작업 결과를 수신 객체가 송신 객체에게 돌려주는 것을 나타냅니다.
제어의 흐름이 다시 송신자에게 돌아옴을 의미합니다.
최근에는 다이어그램을 간결하게 하기 위해 명시적인 응답 메시지를 생략하고, 동기 메시지에 대한 활성화(아래 설명)의 종료로 암묵적으로 표현하기도 합니다.
예시
데이터베이스가 사용자정보조회() 동기 메시지에 대해 사용자정보객체를 응답 메시지로 반환하는 상황.
인 상태를 나타냅니다.
라이프라인 위에 얇고 긴 직사각형 모양으로 표시되며, 이 직사각형(활성화 박스)의 세로 길이는 작업 수행 시간을 의미합니다.
동기 메시지를 수신하면 해당 객체의 라이프라인에 새로운 활성화 박스가 시작되고, 이 활성화가 종료되어야(즉, 작업이 완료되어야) 송신 객체에게 제어권이 돌아갑니다.
여러 조건 중 하나에 해당하는 상호작용 블록이 실행됩니다. (프로그래밍의 if-else if-else 구문과 유사)
프레임 내부는 각 조건(가드 컨디션, [조건문])을 명시한 점선으로 구분된 영역(피연산자, Operand)들로 나뉩니다.
예시: 로그인 시도 시, [인증 성공]인 경우와 [인증 실패]인 경우의 서로 다른 처리 흐름.
오늘은 UML 시퀀스 다이어그램을 통해 시스템 내 객체들이 시간의 흐름에 따라 마치 대화를 나누듯 메시지를 주고받으며 상호작용하는 동적인 모습을 그리는 방법을 알아보았습니다.
라이프라인, 다양한 종류의 메시지, 활성화, 그리고 복잡한 흐름을 제어하는 제어 프레임 등 핵심 구성 요소를 이해하고, 실제 유스케이스를 바탕으로 다이어그램 작성 예시도 살펴보았습니다.
다음 시간에는 이렇게 설계된 소프트웨어가 얼마나 튼튼하고 유연한지 평가하고 개선하는 데 도움이 되는 중요한 설계 원칙들인