React로 이해하는 도메인 주도 개발
이 문서는 Google Ads 캠페인 설정을 하나의 연속 예제로 사용해 DDD의 핵심 개념과 React 적용 방법을 학습하기 위한 안내서다.
각 장의 핵심 구현은 동일한 업무 규칙을 OOP 기반 모델과 함수형 모델로 함께 보여 준다. OOP 예제는 상태와 행위를 객체에 캡슐화하고, 함수형 예제는 불변 데이터와 순수 함수, Result를 사용한다. 두 방식의 문법보다 비즈니스 규칙과 경계를 같은 위치에 보존하는 원리를 비교한다.
1. 목차
- DDD가 필요한 이유
- 비즈니스 경계 나누기
- 도메인 모델 만들기
- React와 도메인 연결하기
- 실전 적용과 검증
- 함수형 DDD와 React 적용
2. 각 목차의 핵심 내용
2.1 DDD가 필요한 이유
- DDD와 도메인 모델의 의미
- 단순 CRUD와 복잡한 비즈니스 로직의 차이
- React 컴포넌트에 조건문과 정책이 흩어질 때 발생하는 문제
- 광고 캠페인 요구사항에서 비즈니스 규칙을 식별하는 방법
2.2 비즈니스 경계 나누기
- 기획자와 개발자가 같은 업무 용어를 사용하는 Ubiquitous Language
- 캠페인, 입찰, 타기팅, 광고 소재를 구분하는 Bounded Context
- 페이지가 아닌 비즈니스 의미를 기준으로 모듈을 나누는 방법
- Context 사이의 의존성과 모델 공유를 최소화하는 기준
2.3 도메인 모델 만들기
- 식별자와 생명주기를 가지는 Campaign Entity
- 예산 규칙을 표현하는 CampaignBudget Value Object
- 상태 변경의 일관성을 보호하는 Aggregate와 Aggregate Root
- 캠페인 게시 조건과 상태 전이를 도메인 행동으로 표현하는 방법
- 객체의 메서드와 함수형 순수 전이 함수로 같은 규칙을 표현하는 방법
2.4 React와 도메인 연결하기
- Domain, Application, Infrastructure, UI의 역할과 의존성 방향
- Hexagonal Architecture의 중심, Port, Adapter
- Repository를 이용한 도메인 로직과 API 통신의 분리
- Google Ads DTO와 도메인 모델을 변환하는 Mapper
- React Query, React Hook Form, Zod와 도메인 모델의 책임 구분
- class 기반 Port/Adapter와 함수 레코드 기반 Port/Adapter의 비교
2.5 실전 적용과 검증
- Draft 생성부터 게시까지 이어지는 광고 캠페인 설정 흐름
- 예산, 입찰, 전환 추적, 광고 소재가 결합된 복합 정책 처리
- 도메인 규칙, Use Case, Adapter, UI를 구분한 테스트
- 기존 React 프로젝트에 DDD와 Hexagonal Architecture를 점진적으로 도입하는 순서
- 비즈니스 복잡도보다 추상화 비용이 커지는 것을 피하는 기준
2.6 함수형 DDD와 React 적용
- DDD가 객체지향 전용 설계가 아닌 이유
- Entity와 Value Object를 불변 데이터로 표현하는 방법
- Aggregate 행동을 순수한 상태 전이 함수와
Result로 구현하는 방법 - 판별 유니온으로 유효하지 않은 상태를 표현하기 어렵게 만드는 방법
- Repository와 Use Case를 함수 및 함수 레코드로 구성하는 방법
- React Component, Hook, Domain 함수의 책임을 구분하는 기준
- 프런트엔드 검증과 서버의 최종 도메인 검증을 구분하는 방법
다음 글: 함수형 DDD와 React 적용