기존 프로세스
각 프로세스에는 크게 5가지 역할이 존재하게 됩니다. 그리고 이 과정에서 관점 차이가 존재할 수 밖에 없는데, 이 과정에서 싸울 수가 있습니다. 이러한 감정소모를 해결하고, 일정을 관리하고, 프로젝트가 원만히 진행되도록 해주는 역할이 PM이 하는 역할입니다.
기획자의 입장에서 자기가 구상한 기능들이 있는데, 개발자는 이게 다 불가능 하다고 합니다. 그리고 개발자도 계속 해야할 일이 쌓입니다. 기획자의 애로사항이 점차 하나씩 늘어가기 때문입니다. 뭐도 더 추가해달라 뭐도... 등등으로요. 디자이너도 마찬가지 입니다. 개발자가 개발하는 것에 따라서 디자인도 다 변경해야 하기 때문입니다. 그리고 기획자가 구체적인 기획을 세우지 않으면 이 구체적인 디자인을 디자이너가 다 생각해야 하므로 디자이너도 매우 큰 스트레스를 받게 됩니다.
모든 스타트업의 프로세스는 위와 같습니다. 시장조사 하고, 이에 대한 서비스를 기획하고 베타서비스를 개발하고 소규모 마케팅을 진행합니다. 그리고 이 마케팅에 따른 기획을 수정하고 서비스를 수정 개발하고 다시 마케팅을 하고 다시 수정 기획,.. 즉 이 프로세스의 연속이라고 할 수밖에 없습니다.
즉 기획자와 개발자와의 불일치가 너무나도 크게 됩니다. 이러한 이유는 소프트웨어 개발과 도메인, 모델과 불일치가 발생합니다. 도메인이라는 것은 어떠한 분야를 말합니다. 만약 어떠한 도메인 knowledge가 있다고 해 봅시다. 그럼 이 도메인을 무조건 추상화를 해야 합니다. 너무 도메인이 복잡하기 때문입니다. 쳐낼건 쳐내고 최대한 간략하게 해야 한다는 것입니다. 이렇게 만들어진 모델을 바탕으로 소프트웨어를 만드는 것입니다.
정리하면 도메인은 기획자가 기획한 것이고, 모델은 개발자가 쳐내고 쳐낸 것이라고 보시면 됩니다. 즉 모델은 개발자가 만들어낸 간소화된 설계도라고 보시면 됩니다.
이러한 기획자와 개발자 간의 브릿지 차이를 어떻게 해소하면 좋을까요? 바로 이 순간부터 DDD가 나옵니다.
이를 위해서 일단 보편언어인 유비쿼터스 언어를 알아야 합니다. 만약 교육 서비스를 개밣한다고 해 봅시다. 그런데 개발자가 기획자에게 이 데이터를 비동기적으로 데이터베이스에 넣을겁니다. 라고 하게 되면 기획자는 당연히 알아듣지 못합니다. 반대의 경우도 같습니다. 각각의 도메인에 대한 지식이 다른 것입니다.
두번째는 모델주도 설계입니다. 이는 도메인 분석과 설계의 간극을 최소화하는 것입니다. 위에서 도메인 -> 모델 -> 소프트웨어 프로세스가 있었습니다. 기획자든 개발자든 하나의 모델을 보고 진행하자는 의미입니다. 모델 = 코드라고 하는 것입니다.
어덯게 보면 당연한 지식이지만, 기획자와 개발자와의 간극을 줄이는 DDD를 무조건 사용해야 합니다.
일단 비지니스 상황에 따라 설계를 하고, 모든 상황을 브레인스토밍 같은거를 통해서 모두 적어봅니다. 만약 저희가 만들 음식 주문 앱에서는 음식을 주문한다, 주문취소를 한다, 주문 완료를 누른다... 등이 있겠습니다. 이 공유 된것을 바탕으로 다시 그룹핑을 해야 합니다. 이 모든 컨텍스트가 너무 많아서 다시 그룹핑을 해서 하나의 모델로 만들어야 합니다. 이 그룹핑된 모델을 Bounded Context라고 합니다. 그리고 만들어진 Bounded Context가 3개라고 하면, 이러한 관계를 정의합니다. 그럼 이것이 하나의 도메인 모델이 됩니다. 이 도메인 모델은 일종의 설계도라고 보시면 됩니다. 이는 분리 & 연결의 과정인데 그 이유는 Bounded Context로 나누고 다시 이들간의 관계를 정의해 주기 때문입니다.
이는 전략적 설계의 얘시입니다. 하지만 이 과정 외에도 당연히 생각해야 할 부분은 매우 많게 됩니다. 하지만 여기서는 그런 것을 제외하고 설계를 진행합니다. 기능들을 분리한 것이 핵심입니다.
이제 전략적 설계를 했다면, 전술적 설계를 해야 합니다. 이는 Bounded Context안의 내용을 좀더 구체적으로 생각해 나가는 과정입니다. 이는 Model driven design으로 모델을 바탕으로 설계를 해야 합니다.
'DevOps > AWS Architecture' 카테고리의 다른 글
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - Django 기초 - 1 (0) | 2022.06.28 |
---|---|
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - 어플리케이션 이벤트 스토밍 (0) | 2022.06.28 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - 프로젝트 개요 ( 온라인 주문 어플리케이션 ) (0) | 2022.06.28 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - 모놀리식 아키텍쳐 vs 마이크로서비스 아키텍쳐 (0) | 2022.06.28 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - VPC EndPoint 만들기 (0) | 2022.06.28 |