시퀀스 다이어그램
“객체 간 메시지 흐름을 시간순으로 표현하는 동적 다이어그램.”
시퀀스 다이어그램이란
시퀀스 다이어그램(Sequence Diagram)은 객체 사이에 오가는 메시지를 시간 순서에 따라 표현하는 동적 다이어그램이다. 클래스 다이어그램이 시스템의 정적 구조를 보여 준다면, 시퀀스 다이어그램은 그 구조 위에서 실제로 일이 어떻게 진행되는지를 풀어낸다.
화면 위쪽에 참여하는 객체들을 나란히 배치하고, 위에서 아래로 흐르는 시간 축을 따라 어떤 객체가 어떤 객체에게 무엇을 요청하는지를 차례로 그린다. 따라서 하나의 기능이 여러 객체의 협력으로 완성되는 과정을 한눈에 추적할 수 있다.
생명선과 메시지의 흐름
각 객체에서 아래로 뻗는 점선을 생명선이라 부르며, 그 객체가 상호작용에 참여하는 기간을 나타낸다. 객체가 실제로 어떤 일을 수행하는 동안에는 생명선 위에 활성 구간을 막대로 표시해, 누가 언제 제어권을 쥐고 있는지를 명확히 한다.
메시지는 보내는 객체에서 받는 객체로 향하는 화살표로 그리며, 요청에 대한 응답은 별도의 반환 화살표로 구분한다. 이렇게 요청과 응답, 활성 구간을 함께 읽으면 처리 흐름의 어느 지점에서 책임이 넘어가는지를 정밀하게 파악할 수 있다.
UseCase를 행위로 구체화
시퀀스 다이어그램은 흔히 유스케이스 한 건을 입력으로 삼아 작성된다. 유스케이스가 사용자 관점에서 무엇을 하는지를 정의한다면, 시퀀스 다이어그램은 그 기능이 시스템 내부에서 어떤 객체들의 어떤 호출로 실현되는지를 구체화한다.
정상 흐름뿐 아니라 예외 상황과 분기까지 함께 그려 두면, 분석 단계에서 미처 드러나지 않았던 처리 누락을 설계 단계에서 발견할 수 있다. 즉 유스케이스의 추상적 시나리오를 실행 가능한 협력 구조로 번역하는 다리 역할을 한다.
| 요소 | 의미 |
|---|---|
| 생명선 | 참여 기간 표시 |
| 활성 구간 | 제어권 보유 |
| 요청 화살표 | 메시지 전달 |
| 반환 화살표 | 응답 구분 |
클래스 다이어그램과의 짝
시퀀스 다이어그램에서 한 객체가 다른 객체에게 보내는 메시지는, 받는 쪽 클래스가 반드시 제공해야 할 행위에 대응된다. 따라서 시퀀스를 그리는 작업은 곧 클래스 다이어그램의 행위 목록을 검증하고 보완하는 과정이 된다.
시퀀스에는 등장하는데 클래스에 정의되지 않은 호출이 있다면 그 클래스의 책임이 빠진 것이고, 반대로 어디에서도 호출되지 않는 행위는 불필요한 설계일 수 있다. 두 다이어그램을 나란히 두고 교차 점검해야 정적 구조와 동적 행위가 일관성을 갖춘 설계가 된다.
성능과 책임의 진단
시퀀스 다이어그램은 처리 흐름의 비효율을 시각적으로 드러내는 진단 도구이기도 하다. 하나의 요청을 처리하는 데 객체 사이의 왕복 메시지가 지나치게 길게 이어진다면, 호출 단계가 과도하거나 책임 배분이 잘못되었을 가능성이 크다.
특정 객체로 메시지가 집중된다면 그 객체가 병목이나 단일 실패 지점이 될 수 있음을 미리 경고하는 신호다. 이런 구조적 문제는 코드로 구현된 뒤에 발견하면 수정 비용이 크게 늘어나므로, 다이어그램 단계에서 흐름을 짧고 명확하게 다듬는 편이 유리하다.
ooCBD에서의 위치
객체지향 컴포넌트 기반 개발인 ooCBD 방법론에서 시퀀스 다이어그램은 설계 단계의 동적 모델을 대표하는 산출물로 쓰인다. 유스케이스로 범위를 정하고, 클래스 다이어그램으로 구조를 잡은 뒤, 시퀀스 다이어그램으로 그 구조가 실제 시나리오를 처리할 수 있는지를 확인하는 흐름이 방법론의 산출물 체계에 녹아 있다.
모든 유스케이스마다 빠짐없이 작성하려 하기보다, 협력 구조가 복잡하거나 위험이 큰 핵심 흐름을 선별해 집중적으로 그리는 편이 일정과 품질의 균형에 맞다.
관련 용어