2장. 우리가 시작해야 할 지점은? && 도메인 주도 설계

문법식·2022년 11월 5일
0

우리가 시작해야 할 지점은?

목표를 명확하게 표현하고 잠재적인 상충 관계를 이해하는 것의 중요성을 알았다면, 이제는 서비스를 추출하기 원하는 기능에 대한 자신만의 시각을 구축해야 한다. 그래야 다음에 마이크로서비스에 대해 합리적으로 생각할 수 있기 때문이다. 기존의 모놀리스 시스템을 분해함에 있어서, 어떤 형태로든 논리적인 분해가 필요하며, 여기서 도메인 주도 설계가 도움이 될 수 있다.


도메인 주도 설계

도메인 모델을 개발하면 분해의 우선순위를 정하는 경우에도 도움이 된다. 도메인 모델링의 결과로 식별된 경계 컨텍스트의 모음을 볼 수 있다. 경계 컨텍스트는 각각 잠재적인 분해 단위를 나타낸다. 경계 컨텍스트는 마이크로서비스 경계를 정의하기 위한 훌륭한 출발점이다.

작업 범위를 얼마나 넓게 잡아야 할까?

기존 시스템의 분해는 쉬운 작업이 아니다. 많은 사람이 시스템을 구책해왔고 앞으로도 계속 구축할 것이다. 주어진 범위 내에서, 전체 시스템의 상세한 도메인 모델을 따라잡으려는 시도는 어려울지도 모른다.
도메인 모델에서 필요한 것은 분해를 시작할 위치에 대해 합리적인 결정을 내리기에 충분한 한줌의 정보라는 사실을 이해해야 한다. 가장 주의를 기울여야 할 특정 시스템 부분에 대한 아이디어를 이미 생각해뒀을 테니, 기능의 고수준 그룹화 측면에서 모놀리스에 대한 일반화된 모델을 고안해내고, 추가로 탐색이 필요한 부분을 선택하는 것만으로도 충분할 것이다. 시스템의 일부만 살펴본다면, 반드시 해결해야 하는 더 큰 문제를 간과하는 위험이 상존하게 된다. 그러나 강박에 쫒길 필요는 없다. 처음부터 모든 것을 올바르게 이해할 필요도 없으며, 그저 다음 단계를 파악할 정도의 정보만 확보하면 된다. 깨달음을 얻으면서 도메인 모델을 지속적으로 다듬고, 출시되면 새로운 기능을 꾸준히 반영하기만 하면 된다.

이벤트 스토밍

알베르토 브란돌리니가 제창한 이벤트 스토밍은 기술 전문가오 비전문가가 다 같이 참여해 공유 도메인 모델을 함께 정의하는 협업 방식이다. 이벤트 스토밍은 상향식으로 작동한다. 참가자는 시스템에서 발생하는 '도메인 이벤트'를 정의하면서 시작한다. 그럼 다음 이런 이벤트들은 집계로 그룹화되고 집계는 다시 경계 컨텍스트로 그룹화된다.
이벤트 스토밍이라고 해서 이벤트 기반 방식의 시스템을 구축해야 한다는 사실을 의미하지 않음에 유의해야 한다. 그보다는 이벤트 스토밍이란, 시스템에서 발생하는 (논리적인) 이베트를 이해하는 것과 시스템 전문가로서 신경써야 하는 사은을 식별하는 것에 중점을 둔다.

이벤트 스토밍 기법에서 알베르토 브란돌리니가 주목하는 것은 모델을 정의하기 위해 협업하는 개념이다. 여기서 작업의 결과물은 모델 그 자체만이 아니며, 모델에 대한 공통된 이해다.

우선순위 지정을 위한 도메인 모델 사용

도메인 모델에서 외부에서 내부로 의존 관계를 많이 맺고 있지 않은 도메인이 추출하기 더 쉬울 것이다. 추출의 어려움을 평가할 때 이와 같은 관계는 좋은 출발점이긴 하지만, 도메인 모델은 기존 시스템의 논리적인 뷰를 표현한다는 사실을 이해해야 한다. 모놀리스의 기반 코드 구조도 이런 식으로 구성되어 있다는 보장은 없다. 즉, 결합도와 관련된 기능적인 측면에서 논리적인 모델이 도움을 줄 수 있지만, 기능이 얼마나 얽혀있는지 파악하려면 여전히 코드 자체를 살펴볼 필요가 있다.
우리는 난이도를 구분하는 렌즈를 통해 사물을 봐야 하며, 이렇게 해야 신속한 성공을 이끌어낼 수 있다. 그러나 우리는 목표 달성 '전략'으로 마이크로서비스를 고려하고 있음을 항상 기억해야 한다.

profile
백엔드

0개의 댓글