쿠팡 클론 코딩 - 도메인 모델링

dvmflstm·2020년 4월 16일
18

도메인 모델링

아래의 책들을 읽고 도메인 모델링 및 설계에 관해 많은 생각과 관심을 갖게 되었다.

위 두 책에서 학습한 내용들을 전체적으로 적용해보기 위해 복잡한 도메인 로직이 존재하는 서비스를 클론 코딩하기로 결정했고, 앞선 2번째 장에서 나열한 어플리케이션 기능들을 분석해가며 모델링을 진행해보았다.

전체 모델

아래는 어플리케이션 기능을 분석해가며 만들어낸 전체 도메인 모델이며, 이는 하나의 모델이지만 MSA 하에서 만들게 될 마이크로서비스의 단위별로 구분해놓았다.

아래는 우리가 정의한 각각의 마이크로서비스들과, 그렇게 마이크로서비스를 분리한 이유에 대한 간략한 설명이다.

상품 서비스

쇼핑몰에 존재하는 상품 모델과 이를 담고 있는 카테고리, 그리고 상품 모델에 직접적으로 관심이 있는 "장바구니"와 "최근 본 상품"에 관한 모델을 합쳐 하나의 마이크로서비스로 구현한다. 특히 상품 모델은 도메인 모델 전체에 커다란 관여를 하기 때문에 상품과 아주 직접적인 것들만 남겨놓고 나머지와는 격리시킬 필요가 있다고 생각했다.

주문 서비스

상품의 주문 - 결제 - 배송 및 반품에 이르는 전체적인 주문 프로세스를 아우르는 서비스이다. 결제/배송/반품 모델을 아우르는 전역적인 상태를 주문 모델에서 관리하려고 생각했기 때문에 이들은 강하게 결합되어 있다고 보았다.

상호작용 서비스 (상품 - 사용자)

마이크로서비스를 분리할 만한 합리적인 이유로 "가장 복잡한 모델인 상품과 사용자 모델을 격리시킬 것"을 생각하였다. 문의하기와 찜하기 기능 같은 경우는 상품과 사용자 사이의 관계에서 생겨난 모델이고, 둘 중 어느 모델에 강하게 결합되어 있다는 느낌을 받지 못했기에 이를 따로 떼어내기로 했다. (적절한 서비스의 이름을 생각해내지 못해서 일단은 상호작용 서비스라고 이름붙였다...)

상호작용 서비스 (주문 - 사용자)

상품 - 사용자 간 상호작용 서비스와 비슷하게 주문 모델과 사용자 모델 간의 상호작용을 나타내는 서비스이다.

사용자 서비스

사용자에 관한 서비스이다. 어플리케이션 기능적인 측면에서 본다면 회원가입 및 로그인, 회원정보 수정 등의 기능이 모두 이 서비스에 포함될 것이다. 멤버십 모델을 따로 두는 것이 맞을지, 사용자가 상품을 판매하는 활동은 사용자 서비스에 둘 지 혹은 상호작용 서비스에 둘 지 등 아직 고민이 많은 상태이다.

다음 작업

어플리케이션 기능을 분석하면서 도메인 모델링을 진행했지만, 아직 설계적인 측면에서 해야할 것이 좀 남아 있는 상태이다. 현재는 개념적인 부분에서 모델링을 진행했다면 다음에는 기술적인 측면에서 어떤 도메인 영역에서 어떤 디자인 패턴과 설계 원칙을 적용하는게 좋을 지 등에 대한 고민이 필요할 것 같고, 이어서 구체적인 DB 스키마 설계도 진행해나가면 될 것 같다.

profile
서울대학교 컴퓨터공학부 github.com/BaekGeunYoung

2개의 댓글

comment-user-thumbnail
2020년 4월 17일

늘 좋은 글보며 자극받고 있습니다 :) 생각의 과정을 공유해 주셔서 감사합니다!

1개의 답글