본문 바로가기
도메인 주도 설계

상태 머신 다이어그램은 무엇일까?

by simplify-len 2021. 1. 30.

그림 1 위키백과에서 말하는 상태머신다이어그램

 

상태 머신은 전이 트리거 및 제약 사항에 따라 동작을 분류하고 상태 간을 이동하는 방법을 보여준다.

이번에 사이드 프로젝트를 하면서 상태 머신 다이어그램을 그리는 도메인이 존재했다.

상품을 보여주는 Goods, Product와 달리 Goods는 소비자 관점에서 보여지는 물건으로서 노출될 수도 있고 노출되지 않을수도 있는데, 이 때 상태값에 따라 이동하는 상태머신 다이어그램을 만들어 보고 싶었다.

문제의 시작

처음에 상태머신 다이어그램을 그려보려고 했을 때 나의 시도는 아래와 같았다.

물건 생성 > 판매중 > 판매 중지 > 판매 종료 > 다시 판매 중 > …

이 얼마나 단조롭고 심플한가?

저 텍스트에서 발견할 수 있었던 나의 모습은 머릿속에 펜을 놓고 화살표를 그려보는 것이였다.

그러나, 정돈되지 않는 느낌이 계속되서 이번에 한번 그려보기로 했다.

그래서 조금 더 발전한 형태로 이런 그림을 그려봤다.

그림 2 -  텍스트에서 아주 살짝 진화한 형태

 

맨 처음에 언급했던 말을 다시 상기시켜보자.

"상태 머신은 전이 트리거 및 제약 사항에 따라 동작을 분류하고 상태 간을 이동하는 방법을 보여준다."

 전이트리거가 보이는가? 제약사항에 따른 동작이 보이는가? 상태 간에 이동하는 방법이 보이는가?

그 어느것 하나 보이지 않는다.

또한 상태 전이 다이어그램 을 만든다는 것은 위 정의에서 얻는 것 말고 또다른 의미가 있는 것 같다.

바로 도메인을 풍부하게 만들어주는 역할 이 바로 또다른의미 라는 것의 실체이다.

음?

도메인을 풍부하게 해준다라... 이 얘기를 하고 싶어서 지금 포스트가 도메인주도설계에 있는게 아닐까?
어떻게 도메인을 풍부하게 해줄까? 라는 생각을 하게 될 것이다. 

상태 머신 다이어그램은 어떻게 생겼을까?

주요 용어

  • 상태: 특정 시점에서 객체나 시스템의 상황을 의미하는 것으로 객체의 상태는 주어진 시점에서 객체의 속성 값들로 표현된다.

  • 상태 전이: 한 상태에서 다른 상태로 상태가 변경되는 것으로, 트리거에 의해 또는 이전 상태의 내부 행위가 종료되면 발생할 수 있다.

  • 트리거: 상태 전이를 일으키는 이벤트를 트리거 또는 트리거링 이벤트라고 한다.

  • 상태 머신 다이어그램: 객체, 서브시스템 또는 전체 시스템의 상태와 상태 전이를 표현하여 행위를 모델링하는 UML 다이어그램이다.

그림 3 상태머신다이어그램 간략화

시작할 때 어떤 트리거(Request XXX)에 의해서 상태(State)가 변하게 될 것이고, 이때 도메인에서는 어떤 액션(Actions)들이 일어날 수 있는가? 또는 어떤 상태를 지닐수 있을까?

간단한 예로는 CPU 프로세스의 다이어그램이 생각난다.

그림 4 프로레스 관리

 

다시 본론으로 돌아가서 어떻게 상태 다이어그램을 만들 수 있을까?

상태가 변한다 라는 의미는 전이를 의미한다. 즉, 어떤 이벤트 또는 트리거에 의해서 동작되는 것이다.

우리는 이 트리거에 집중해보자. 그리고 아래와같이 생각해보자.

어떤 Actor가 이 트리거를 일으킬까? 트리거가 발동되었을 때, 해당 도메인말고, 다른 도메인들은 어떻게 동작될까? 이 부분을 끝까지 고민하다보면 새로운 다이어그램을 필요로 할 수도 있고, 새로운 도메인이 도출될 수도 있다.

그림 1 에서 나왔던 텍스트는 끊임없는 대화를 통해 아래와 같은 상태 다이어그램이 만들어졌다.

그림 5 - 완성된 상태 다이어 그램

 

상태 다이어그램이 무엇인지 이해했다.

다음에는 상태다이어그램을 만들면서 유즈케이스를 만들고, 나아가 이벤트스토밍 했던 부분을 소개하겠다.

댓글