-
-
현장에서 통하는 도메인 주도 설계 실전 가이드 - 개발자 관점에서 설명한 실무에 강한 DDD 입문서!
마스다 토오루 외 지음, 이승환 옮김 / 길벗 / 2025년 8월
평점 :
DDD에 대한 새로운 책이 출간되어서 살펴보려고 합니다.
일본에서 출간된 책이며, 저자분들은 총 6분이 공동집필을 하셨습니다.
예시로 나와있는 코드는 java코드이며, 책의 분량은 240Page정도 입니다.
우리는 새로운 방식으로 서비스 개발을 추구합니다. 기존에 널리 사용하였던 정형화된 방식에서
서비스 규모의 확장성 및 유지보수 및 서비스 개발에 빠른 재활용성을 확보하기 위해서 노력을 합니다.
이러한 관점으로 도메인 주도 설계 즉 DDD가 요즘 많이 사용되고 있습니다.
새로운 업무로 이번에는 도메인 주도 설계 DDD방식으로 신규 서비스를 개발을 하는 것으로 정해졌다면
우리는 어떻게 해야 할까요? 무엇을 해야 좋을까요? java, python, node, Spring, Node같은 언어나 프레임워크가 아니여서
관련 메뉴얼이 있을지? 어떤 방식으로 진행을 해야 원하는 방향대로 잘 설계가 된것인지?
어떻게 지식을 얻어야 할지 막연할것 같습니다. 그런 관점에서 이 책이 그러한 애로사항을 해결할수 있지 않을까 생각이 들었습니다.
■ 내용 살펴보기
· 책의 구성은 우선 개발서적이지만, 이론과 방향성을 설명하는 것에 많은 주안점이 있습니다. DDD가 프로그래밍 언어가 아니기 때문에 자연스럽습니다.
총 3개의 Chapter로 구성되어 있습니다.
1장 도메인 주도 설계 입문: 개념과 설계 방식 이해하기
2장 도메인 주도 설계 실천 가이드: 이론에 앞서 응용력을 기르자
3장 클린 아키텍처란 무엇인가: 개발에 활용할 수 있는 설계의 핵심을 알아보자
이론에 대해서 충분히 설명을 하고 다음 심화 단계를 통해서 업무에 활용할 수 있는 방향으로 구성되어 있습니다.
· 제일 중요한 도메인이 무엇인지 알아야 하고, 설명하고 있습니다.
바라보는 관점이 중요할것 같습니다. 애플리케이션 개발, 객체지향, 애자일 개발 세가지 관점으로 도메인 모델의 활용법을 살펴봅니다.
도메인 주도 설계는 프로그램 언어에 종속적이지 않습니다. 이 이야기를 풀어보면, java, python등 언어에 제약이 없는 부분입니다.
도메인을 학습할때 언급되는 다양한 키워드들이 있습니다. 유비쿼터스 언어, 경계 컨텍스트, 값 객체, 애그리게이트, 리포지터리 등 다양한 패턴은 소프트웨어를 설계하기 위한 도구 입니다.
확실하게 용어 및 개념을 이해하는 것이 중요한데, 이러한 것이 잘 정리되어있습니다.
비지니스의 복잡성과 난이도가 높아지면서, 이제는 자연스럽게 이러한 도메인 관점으로 접근하게 되는 것이라고 생각합니다.
결국 서비스 또는 프로젝트를 수행하는 이유는 그 목적에 맞는 비지니스를 적절한 시기에 제공하여서 원하는 것을 달성하기 위함입니다. 그것은 구매로 이어지는 매출생성일수도 있고, 서비스 편의성을 제공하는 관점일수도 있습니다.
· 도메인 모델과 다른 요소들을 연결시키는 다양한 개념이 있습니다. 이미 예전부터 이러한 고민들을 여러 사람들에 의해서 고민되고 있었습니다.
- 도메인 모델 + 3계층 구조
- 도메인 모델 + 포트 & 어댑터
- 클린 아키텍처
우리는 도메인 주도 설계와 객체지향 프로그래밍 방식과 혼란이 있을수 있습니다. 이러한 부분도 책을 통해서 개념 정리가 되는 것도 도움이 됩니다.
· 업무 로직을 개발하는 관점에서 우리는 일반적으로 기존에는 트랜잭션이나 DB의 테이블을 기준으로 설계를 많이 하였는데, 도메인 모델은 다른 접근법인것을 알려줍니다.
비즈니스 활동을 모델로 만들기 위해서는 무언가 현장의 기준이 있어야 합니다.
- 업무 프로세스 중점 두기
- 업무 데이터에 중점 두기
- 업무 규칙에 중점 두기
보통 어플리케이션 개발시 세가지 방법을 조합해서 사용을 하는데, 이러한 기준을 참고해서 우리는 모델 주도 설계의 구성 요소를 도출합니다. 서비스마다 모두 같은 정답을 가지고 있지 않고, 바라보는 관점으로 추출해내는 기준이 다르다보니 어려움이 있는 것은 자연스럽지만
우리가 각 요소를 어떻게 뽑아내고, 구성하는지 계속 구상을 해야 합니다.
- 엔티티 : 기본 관심사
- 값 객체 : 업무 규칙을 표현하는 기본 구성 요소
- 컬렉션 객체 :다중성을 클래스로 표현
- 애그리게이트 : 여러 객체의 조합
- 분기 객체 : 조건 분기의 복잡성 표현
- 모듈 : 전체를 정리하기
· MSA환경 및 쿠버네티스 환경이 확대되면서 자연스럽게 분산아키텍처 환경이 되고 있습니다. 서비스가 지금은 기존 모놀리식 아키텍처로 서비스 하지만, 사용빈도와 트래픽으로 변경될수 있습니다. 그래서 처음부터 모놀리식를 도입하지만, 향후를 대비해서 도메인 주도 설계를 통해서 개발을 진행한다면, 추후에 별다른 변경없이 분선환경으로 이관될수 있는 환경을 처음부터 도입하려고 하는 요구가 있습니다.
책의 제목처럼 현장에서 적용할수 있는 이런 케이스들에 대한 내용을 통해서 실제 업무 환경에 도입을 할때 검토시 도움이 됩니다.
이미 예상하고, 경험해보는 것이 시행착오를 줄이는 가장 좋은 방법이기 때문입니다.
· 도메인 주도 설계의 구현은 도메인을 깊이 이해하는 것부터 시작합니다. 그래서 바로 서비스에 도입하는 것이 어려운 이유이기도 합니다.
도메인을 이해하기 위한 몇가지 방법이 있지만, 쉽게 잘 적용이 되지 않습니다. 2장에서는 DDD의 개요을 다시 확인하고, 실제 사례를 통해 DDD의 주요 기법을 조금더 상세하게 설명을 합니다.
- DDD의 근간을 이루는 '유비쿼터스 언어'
- 도메인 발견을 위한 '이벤트 스토밍'
- 이벤트 스토밍으로 얻은 지식을 코드화 하기 위한 '이벤트 소싱'
이 세가지 효과적인 기법을 통해 DDD적용 하기 위한 내용으로 구성됩니다.
코드적인 부분은 책에 많이는 없지만, 아래와 같은 예시들이 개발적으로 이해들 돕기 위해서 구성되어 있습니다.
우리는 전통적인 구현방식을 개선하려고 하는 것이기 때문에 코드적인 흐름은 AS-IS분석에 도움이 됩니다.
3장에서는 클린아키텍처가 나옵니다. 개발자분들은 어떤 부분이 클린 아키텍처 이고, 어떤 부분이 도메인 주도 설계인지 명확하게 구분할수 있어야 하며, 서비스별 도입하려고 하는 방향성이나 범주를 판단하고 잘 구분지어야 합니다. DDD프로젝트에 대한 하나의 정책이고, DDD를 하다보면, 클린아키텍처의 특징들이 곳곳에서 보이는데, 클린 아키텍처 자체가 DDD의 목표는 아니기 때문에, DDD가 개발 방향성이라면 클린 아키텍처는 자연스럽게 그 결과로 나온 구조적인 형태의 결과물입니다.
- 클린 아키텍처의 본질인 SOLID 원칙적으로 살펴보기
- 소스코드로 클린 아키텍처 핵심 도출하기
- 강한, 느슨한 결함 확인하기
새로운 도입 전에 고려해볼 사항들을 정리해봅니다.