코딩마을방범대
DDD(Domain Driven Design) 개념 본문
728x90
도메인 주도 설계(DDD; Domain Driven Design)
- 비즈니스 도메인 별로 나누어 설계하는 방식
- 의존성 최소화(Loosly coupling=느슨한 결합), 응집성 최대화(High cohesion=높은 응집력)이 목표
- Strategic Design(개념 설계)과 Tactical Design(으로 나눌 수 있음
도메인(Domain)
사전적인 의미는 영역, 집합
DDD의 도메인은 비즈니스 도메인을 뜻하며, 유사한 업무의 집합을 말함(MPRS-마케팅,구매,연구,영업)
개념 설계(Strategic Design)
컨텍스트(Context) 를 기준으로 설계하는 것
용어 | 설명 |
Domain | 전체 설계 |
Subdomain | 구성하는 부분 집합 (안방, 창고, 화장실 등) |
Domain Model | 실제 Subdomain의 구체적인 형상 (비즈니스 도메인의 서비스를 추상화한 설계도) |
Context | 특정 객체 혹은 상황이 벌어지는 주변 환경 (사용자, 프로세스, 정책/규정) |
Bounded Context | Biz Domain의 사용자, 프로세스, 정책/규정 등을 고유한 비즈니스 목적별로 그룹핑한것 (Domain안의 서비스를 경계 지은 Context의 집합) 특정 모텔은 어떤 bounded context에 놓이는가에 따라 다르게 이해될 수 있습니다. 예를 들어, 주택 정문에서 caretaker라는 모델이 있다면 이는 '경비원' 뜻합니다. 하지만 이 단어가 주택 건물 안에서 가지는 의미는 '아이를 돌보는 사람'이 될 수 있습니다. |
Ubiquitous Language | 현업, 개발자, 디자이너 등 참여자들이 동일한 의미로 이해하는 언어 '마우스'라는 단어는 '컴퓨터부속품생산'도메인내에서는 '컴퓨터 화면 안에서 커서를 옮기는 컴퓨터 부속품'으로 통용됩니다. '해충박멸서비스'도메인내에서는 '꼬리 달리고 털이 나있는 짐승'으로 이해됩니다. |
Context Map | Bounded Context간의 관계를 나타낸 도식화한 Diagram |
구체적 설계(Tactical Design)
개발을 위해 구체적으로 설계하는 것
Model Driven Design
Strategic Design에서 설계한 각 Sub Domain별 Domain Model(Context Map)을 중심으로 설계하는 것
Layered Architecture
Tatical Design시 목적별 계층으로 나누어 설계하는것을 의미
Layer | Annotaion | 설명 |
Presentiation Layer | @Controller, @RestController |
UI Layer |
Service & Domain Layer | @Service | - Service Layer: Domain Layer와 Data Layer의 class들간의 제어(Control) 또는 연결(Interface)을 합니다. Biz logic을 이 layer에 구현하지 않습니다. - Domain Layer: Domain Object별로 Business Logic처리를 담당하는 Layer |
Data Layer | @Repository | Database와의 CRUD처리 Layer |
Service Layer와 Domain Model Layer를 나누는 이유는 새로운 비즈니스 요구에 대응할 때 기존 소스에 영향도를 최소화하고, Domain layer의 재활용성을 극대화하기 위함입니다.
용어 정리
용어 | 설명 |
Entity | 각 레코드 간에 구별이 필요한 객체 (가변적) '지폐'라는 객체는 '일련번호'라는 고유 ID로 구별되어야 하므로 엔티티이다. |
Value Object(VO) | 구별이 필요 없는 객체 (불변성) '금액'이라는 객체는 '액수'와 '통화'라는 속성이 중요하지 구별할 필요가 없으므로 VO이다. |
Aggregate | Entity의 집합 customer, customerInfo,address 는 Customer 라는 주제로 뭉칠 수 있음 |
Factories | 복잡한 Entity 혹은 Aggregate를 생성하는 것을 담당 |
Repositories | Data Access 를 처리하는 객체 (CRUD를 담당) JPA나 MyBatis (ORM) |
참고사이트
[IT정보] 도메인 주도 설계(Domain Driven Design, DDD) 개념
728x90
'🎃 기타 > 상식 ❗' 카테고리의 다른 글
[JAVA] 메서드 정의의 기본 구조 (0) | 2024.09.27 |
---|---|
HikariCP에서 발생하는 연결이 반복해서 열리고 닫히는 현상 (0) | 2024.08.29 |
Binary 로그란 (0) | 2024.05.20 |
데이터베이스 리플리케이션(Replication) (0) | 2024.05.20 |
아파치 카프카(Apache Kafka) (0) | 2024.03.25 |