작년인가, 이번 해 초인가 DDD Start! 저자분께서 회사에 강연을 오신적이 있었다.
사실 그땐 이걸 배워서 써먹을 데가 없었는데, 곧 회사에서 적용할 수 있을 기회가 생길 것 같아 새로운 마음가짐으로 다시 읽어보려고 한다.
도메인
소프트 웨어로 해결하고자 하는 문제영역
ex) 온라인 서점
온라인 서점을 구현해야 한다.
➡️ 온라인 서점 도메인
온라인 서점 소프트웨어는 어떤 기능을 제공해야 하는가?
➡️ 주문, 회원, 결제, 배송, 카탈로그, 리뷰, 혜택 등 (하위 도메인)
- 모든 하위 도메인을 구현해야 하는 것은 아니다 (외부 연동을 사용할 수도 있다)
도메인 모델
특정 도메인을 개념적으로 표현한 것
도메인 모델 파악을 위한 도구
1. 객체 모델
- 도메인 자체를 이해하기 위해 필요하다
- 도메인이 제공하는 기능, 주요 데이터 구성을 파악할 수 있다
2. 상태 다이어그램
- 객체 모델만 보고 도메인을 완벽히 이해할 수 있는 건 아니다
ex) 주문 프로세스를 상태 다이어그램으로 나타낸다
- 주문을 취소하면 결제취소도 함께 일어난다는 것을 알 수 있다
도메인 모델 패턴
일반적인 애플리케이션 아키텍처
Layered Architecture

출처
Presentation Layer (or UI)
- 사용자의 요청 처리, 사용자에게 정보를 보여줌
Application Layer
- 사용자가 요청한 기능 실행
- 업무로직을 직접 구현하지 않는다
- 도메인 계층을 조합해 기능을 실행한다
Domain Layer
- 시스템이 제공할 도메인 규칙을 구현한다
ex) 주문 도메인
- 출고 전 배송지를 변경할 수 있다
- 주문 취소는 배송전에만 할 수 있다
➡️ 이런 규칙을 구현한 코드가 도메인 계층에 위치해야한다
Infrastructure Layer
- 데이터베이스나 메시징 시스템과 같은 외부 시스템과의 연동을 처리한다
중요한 것은, 도메인에 대한 지식과 정확한 요구사항을 먼저 파악하고 있어야 제대로 구현할 수 있다.
최근에 요구사항이 얼마나 중요한가에 대해 뼈저리게 느끼고 있다...
제발 요구사항을 정확히 주세요😭
참고도서