에반 에릭스가 만든 도메인 주도 설계
| 개념 | 핵심 질문 | 역할 / 범위 | 예시 (배달 서비스) |
|---|---|---|---|
| 도메인 (Domain) | “무슨 일을 하는 시스템인가?” | 비즈니스 전체 영역 | 배달 서비스 전체 (주문, 결제, 배달 등) |
| 바운디드 컨텍스트 (Bounded Context) | - “이 개념은 어디서 유효한가?” |


지금까지 우리는 다른 도메인의 정보가 필요할 때 연관 관계로 가져오거나 Repository로 직접 호출했다.
또 어떤 경우는 EndPoint를 통해 RestTemplate이나 OpenFeign을 통해서 갖고 오는 경우도 있었을 것이다.


이러다보면 JPA 관련 문제를 맞닥뜨릴 수 있다.

단순한 프로젝트에서는 뭐 문제 없겠지만 복잡한 프로젝트에서는 불능할 것이다.

결론적으로는 복잡한 도메인을 효과적으로 다루고, 기술이 아닌 비즈니스 로직 중심으로 설계하기 위해!
구현한 도메인을 효과적으로 활용
도메인의 경계를 명확히 설정
도메인 중심의 설계 역량 강화

RDB에서는 연관 관계를 FK를 통해 달성하고 Join을 통해서 가져올 수 있다.
⇒ 객체 관점에서는 이슈가 될 수 있음. 객체지향적이지 않을 수도 있고 순환 참조의 가능성도 만들어 냄.
단순히 값이 필요해서 연관 관계를 맺는 건 안되는 말.
이걸 어떻게 해결해야 함?

컨텍스트는 회사 상황에 따라서 달라질 수 있음



각 컨텍스트 간 통신 방법


객체들의 집합으로 데이터 영속성이 유지되어야 하는 집합이다.
애그리거트 루트는 기준이 되는 대표 객체라고 생각하면 된다.
컨텍스트보다 협의의 개념으로 컨텍스트는 한 개 이상의 애그리거트로 이루어진다.
애그리거트의 객체들은 라이프 사이클을 같이 함









도메인을 나눔
서브 도메인 별로 바운디드 컨텍스트를 설정
나눈 도메인을 어떻게 구현할 것인지에 대해 애그리거트 등을 고려해보며 설
도메인 모델 구성 요소:
├─ Entity (엔티티)
├─ Value Object (값 객체)
├─ Aggregate (집합체)
├─ Repository (저장소)
├─ Domain Service (도메인 서비스)
└─ Domain Event (도메인 이벤트)
