안녕하세요. 우리는 이전 포스팅에서 클래스 다이어그램에 대해서 이야기 해본적이 있습니다. 구조 다이어그램(Structural Diagram)의 대표로써 이야기 했었지요. 이어서 오늘은 동적 다이어그램(Behavioral Diagram)의 대표격인 시퀀스 다이어그램에 대해서 알아보는 시간을 가져보도록 하겠습니다. 정의와 목적시퀀스 다이어그램(Sequence Diagram)은 어떠한 순서로 어떤 객체들과 어떻게 생호작용했는지를 표현하는 다이어그램입니다.이 다이어그램은 현재 존재하는 시스템이 이떠한 시나리오로 움직이고 있는지를 나타내는데 장점을 가지고 있습니다. 시퀀스 다이어그램을 이용하면 API 등의 유즈케이스를 디테일하게 알 수 있습니다. 또한 메서드 콜, DB 조회, 타 시스템의 API 호출등 로직을 모델링할 수 있습니다. 그렇기 때문에 시나리오를 파악하기 좋습니다. 유즈케이스시퀀스 다이어그램은 다양한 View의 시나리오를 표현할 수 있습니다.
세부요소시퀀스 다이어그램에서 사용되는 세부요소에 대해서 자세히 알아보도록 하겠습니다. LifeLine모델링 되는 개개의 인스턴스를 나타냅니다. LifeLine은 네모박스와 점선으로 이루어져 있으며 네모박스는 Object 관점이라면 Class, Service 관점이라면 Component가 될것입니다. 그리고 점선은 위에 아래로 내려올수록 시간이 경과됨을 나타냅니다. lifeLineActivationsActivations는 LifeLine의 인스턴스가 실제로 다른 인스턴스와 상호작용을 하며 활성화되어있는 것을 나타냅니다. message메시지는 실제로 인스턴스간의 주고받는 데이터를 나타냅니다. 일반적으로 request(요청)과 response(응답)으로 구성됩니다. call Message & return message (sync)call message는 요청을 하는 메시지입니다. 메시지에 대해서 받은
인스턴스는 특정 작업을 진행할 것입니다. 그리고 작업을 마무리하고 return message를 돌려줍니다. call message를 통해 호출할 때 call Message (async)파일을 쓰거나 타 서버와 통신을 할 때 등 우리는 async IO를 진행할 때가 있습니다. IO는 상대적으로 느리기 때문에 그 시간중에 다른일을 같이하기 위해서죠. 이런 async message에 대해서도 시퀀스 다이어그램은 지원해주고 있습니다. sync 메시지가 가득차있는 삼각형 화살표라면 async 메시지는 골격만 가지고 있는 화살표로 표시합니다. 아래 이미지를 참고하시죠. async callself & recursive인스턴스간의 상호작용 뿐만 아니라 하나의 인스턴스에서 처리를 하는 방법도 종종있습니다. 이럴때는 self 메시지를 사용할 수 있습니다. self message는 본인의 lifeline으로 재귀 하는 화살표를 가지고 있습니다. self call흐름제어 : guard & Sequence Fragments프로그램 로직을 구성하다 보면 반드시 작성하게 되는것이 if, for, while 등과 같은 흐름 제어 표현입니다. Sequence Diagram은 시간 순의 인스턴스간의 상호작용을 표현하기 때문에 흐름 제어 표현들이 필요 할 수 있습니다. 이때 사용하는 요소가 guard와 Sequence Fragments입니다. 먼저 guard에 대해서 알아보도록 하겠습니다. guard는 단일 메시지에 대해서 조건을 명시할 수 있는 방법입니다. guard는 메시지의 Text의 앞쪽에 guard가 한 메시지에 대해서 조건을 명시했다면, sequnce fragments는 범위로 조건을 명시할 수 있습니다. 즉, 특정 부분에 대해서 일정 부분의 메시지를 반복하던지 조건을 명시하던지 할때는 sequence fragments가 명확할 수 있습니다. sequnce fragments로 명시할 수 있는 대표적인 것은 3가지 입니다. alternatives, options, loop를 알아보도록 하겠습니다. alternatives는 줄여서 alt로 표기합니다. 이 타입은 options는 opt로 표기할 수 있습니다. 이 타입은 loop는 우리가 일반적으로 아는 예제seqence diagram example위에서 구성요소에 대해서 살펴보며 만들어본 Sequence Diagram입니다. 우리는 이 예제가 시퀀스 다이어그램만으로 id를 통해 photo를 가져와 해상도를 조절하는 구나라는 사실을 알 수 있었습니다. 이렇게 시퀀스 다이어그램을 이용하면 시나리오가 어떤 것을 하고자 하는지 이정도면 한눈에 들어온다고 볼 수 있습니다. 마무리오늘은 이렇게 시퀀스 다이어그램에 대해서 알아보았습니다. 문서를 만드는 것은 개발자로서 가지고 있어야하는 덕목이라고 생각합니다. 하지만 정말 귀찮은 일이라는 것은 누구나 아는 사실입니다. 하지만 클래스 다이어그램, 시퀀스 다이어그램 그리고 API 문서정도는 작성할 줄 아는게 좋은 덕목이지 않을까 생각해 봅니다. 감사합니다. 참조what-is-sequence-diagram/ understanding-basics-sequence-diagrams |