이제 이를 하기 위해서 이벤트 스토밍을 할 차례입니다. 이벤트는 사용자가 행동을 해서 발생한 결과입니다. 이 때 각자 생각나는 event 즉 저희의 경우면 음식 주문, 음식 조회, 주문완료, 주문 취소,... 등등이 있겠습니다.를 다 일단 붙입니다. 그리고 상이하거나 중복된건 다 지우고, 이벤트가 발생하는 시간순서대로 붙입니다. 그리고 동시에 수행되는 작업은 수직으로 붙입니다.
그리고 이 떄 중요한 점은 비지니스 용어를 사용하면 안됩니다. 모든 파트의 사람이 참여하는 행위이기 때문에, 데이터베이스... 등등 시스템 내에서 발생되는것을 찾는게 아니기 때문입니다. 이런 것을 제외하고 적어야 합니다.
이는 이벤트 스토밍을 한 예시입니다.
그리고 프로세스를 그룹핑 하는 과정을 거칩니다. 맨 위의 경우는 주문을 하는 프로세스일 것이고, 두번째는 주문을 접수하는 프로세스, 세번째는 주문완료르를 누르는 프로세스... 가 될 것입니다,.
그리고 3번째로는 사용자의 Command를 정의합니다. 위 과정이 나타나려면 그 전에 사용자의 어떤 Command가 있어야 할것인데, 이를 옆에 적습니다.
4번째로는 Command를 수행하는 Actor를 정의해야 합니다. 그리고 이벤트 발생과 관련된 외부 시스템이 있다면 위에 적어야 합니다. 예를들면 결제를 한다하면, 결제 시스템이 동반되어야 하므로 이를 위에 적어주어야 하는 것입니다.
이에 대한 상태는 위와 같습니다.
저희가 만들어야 하는 시스템에는 음식점을 list up할 수 있고, 음식점의 음식 매뉴들을 list up할 수 있는 음식점 관리 시스템이 있어야 하고, 예상 소요시간이 입력되는 순간과 배송 완료를 하는 순간은 배송관리 시스템이 수반 되어야 합니다. ( 언제 완료가 되었고, 예상 소요 시간은 얼마였으며 ... )
5번째로는 Aggregate를 정의해야 합니다. 이 과정에서는 Command를 수행하기 위해 CRUD되어야 하는 데이터 객체를 정의합니다. Command를 수행해서 Event를 발생시키려면 어떠한 정보가 필요한지 각 Command와 Event사이의 위에 적어주는 과정입니다.
6번째로는 Bounded Context를 정의하겠습니다. 위에서는 지금까지 Event에 대한 메타정보를 추가하는 작업을 거친 것입니다. 저희는 이태까지 그룹핑을 하기 위해서 비슷한 Event가 뭔지 알기 위해서 메타 데이터를 추출한 것이라고 보시면 됩니다.
이렇게 주문, 주문관리, 배송이라는 3가지 Bounded Context를 묶어 버렸습니다.
다음과 같이 정리할 수 있습니다.
이제 7번째 과정입니다. 이 Bounded Context간의 Context Map을 작성해 줍니다.
이렇게 간략화 할 수 있는 겁니다.
사실 여기서 느꼈을 수도 있지만 마이크로 서비스도 DDD에서 시작된 개념인 것입니다. 각각의 기능들을 하나의 서비스로 만드는 것이 마이크로 서비스 인 것입니다. 하지만 다음시간 부터 할 서비스는 아직 모놀리식으로 구현해 보도록 하겠습니다.
'DevOps > AWS Architecture' 카테고리의 다른 글
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - Django 기초 - 2 (0) | 2022.06.28 |
---|---|
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - Django 기초 - 1 (0) | 2022.06.28 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - 도메인 주도 설계 (DDD) (0) | 2022.06.28 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - 프로젝트 개요 ( 온라인 주문 어플리케이션 ) (0) | 2022.06.28 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - 모놀리식 아키텍쳐 vs 마이크로서비스 아키텍쳐 (0) | 2022.06.28 |