DDD(Domain Design Driven)세레나데 교육 #2


두번째 수업 - 2020.02.13

지난 시간 에 이어서 2번째 수업이 시작했다. 이전 시간의 미션3는 아직 다 끝내지 못했다. 본격적으로 DDD에 관련된 내용을 들어갔다.

세개의 기둥

흔히 DDD는 세개의 기둥이 존재한다고 한다. 중요한 3개의 개념이라고 보면 된다.

  1. 전략적 설계
  2. 전술적 설계
  3. 유비쿼터스 언어 or 아키텍쳐

예전에 에릭에반스의 DDD 책을 읽어 봤는데 그 때는 사실 잘 와닿지 않았다. 무슨 말인가? 싶었다. 아키텍쳐나 이런 개념들은 워낙 추상화가 높기 때문에 실제 업무와의 괴리가 존재한다. 그리도 최범균님의 DDD Start 책이 조금 수월하게 나온 편 이지만 과연 그 책 한번 읽고 DDD를 이해하고 적용할 수 있는가? 이런 의문아 들었다. 그래도 최대한 심플하게 개념을 설명해 주었던 부분이 좋았다. 물론 이력서에서 “나 DDD 해봤다” 라고 적는 분들도 있는데 대부분이 앞에서 이야기 했던 저 3개의 개념을 전체를 적용했다기 보다는 2번째 전술적 설계 만을 적용하고 DDD를 했다고 오해하는 분들도 많다고 했다. 참고로 반버논의 도메인 주도 설계 구현 책을 추천 해주셨다.

전략적 설계

아무튼 두번째 시간에는 전략적 설계에 대해서 알아봤다. 첫번째 시간에 작성했던 요구사항을 바탕으로 하얀 칠판위에 각자가 생각하는 요구사항을 어떤 조건에 의해서 포스트 잇으로 붙였다. 실제 칠판에 나가서 하지는 않고, miro를 통해서 하나씩 의견을 내면서 포스트 잇 붙였다. 색깔별로 역할은 다르다. 오렌지 색은 어떤 이벤트를 나타내고, 파란색은 그 이벤트를 하는 주체, 노란색은 해당 이벤트를 발생시킬 때 필요한 Immutable한 조건들(코드를 작성할 때 지켜야 하는 비즈니스 규칙 같은거?)

무엇보다도 중요한 것은 이렇게 서로가 다르게 생각했던 개념, 용어 등에 대해서 커뮤니케이션 하면서 그 스티커를 채워나가고 정리해 나가는 것이다. 비슷한 이름 군이 나오게 된다면, 비슷한 영역끼리를 묶고 xx컨텍스트(주문 이면 주문 컨텍스트) 라는 이름을 붙여준다. 그리고 그렇게 나눠진 컨텍스트 간의 연결은 Upstream과 DownStream으로 표현한다. 영어로 해석하면 상류와 하류정도 되겠다.

물은 상류에서 하류로 흐르기 때문에(단 방향) 방향성을 가지는 것을 의미한다. 예를 들면 주문을 할려면 메뉴가 존재해야 한다. 주문관련된 컨텍스트와 메뉴 관련된 컨텍스트의 방향은 어떻게 될까? 주문을 할 때 메뉴가 필요하기 때문에 메뉴가 제공해주는 상류(Upstream) 이고 주문은 메뉴의 존재여부가 필요하기 때문에 받는 쪽 (DownStream)으로 연결지을 수 있다.

google image

뭔가 적절한 이미지가 없었다.

Bounded Context

이렇게 Context 별로 나누면 그 유명한 Bounded Context 개념이 나온다. 경계로 구분이 되는 컨텍스트 정도 되겠다. 그리고 이렇게 스티커를 붙여놓고 Context로 멀리서 바라보게 되면 하나의 소프트웨어가 어떻게 구성 되어 있는지 이해하기 쉬워 보였다. 실제로 업무를 인수인계 하거나, 인수 인계 받거나 할 때 해당 분야의 도메인이 아무리 빠삭하더라도, 애플리케이션 개발에는 다양한 요소들이 결합되어서 이해하기 어려운 도메인들로 덕지덕지 구성된 경우를 봤는데, 그냥 문서화 하는 것 보다 요소들의 Context 별로 묶어서 보여줘도 참 좋겠다 생각했다.

Context는 하나의 팀이 관리, MSA를 위한 준비?

그렇게 나눠진 Context당 하나의 팀으로 매핑하고, 그렇게 마이크로 서비스 단위로 쪼개질 수 있다. 여기서 MSA가 100% 좋다는 뜻은 아니다. 규모가 있는 회사와 서비스 라면 모놀리식하게 운영하는 비용과 효율이 좋지 않은 경우에 MSA를 고려하는 것이지, 그 정도 규모와 서비스가 아닌데 억지로 MSA를 했다가 실제 운영 하는데 꽤나 큰 비용이 들기 때문에 실패한 케이스를 봤다. 자칫 DDD가 MSA를 하기 위해서 필요한 개념인 것 처럼 착각 할 수도 있는데 그것은 아니다.

Buy me a coffeeBuy me a coffee

👍광고

이 글이 아주 조금 도움이 되었다면 구글 광고 클릭 부탁드립니다.🙆‍♂️

🏅연관된 포스팅