inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

Splearn 도메인 모델 만들기 (2)

도메인 모델에서 관계와 규칙을 구분하는 방법

26

공부하는학생

작성한 질문수 4

0

안녕하세요. 도메인 모델을 설명하는 부분에서 관계와 규칙을 온라인 서점 운영 예시로 간단히 언급해주셨습니다.

강의를 들으면서 실제 업무 도메인에 관계와 규칙을 구분지으며 간단히 개인 실습을 해보았는데요.

적다보니 어느샌가 관계에 규칙이 섞이기도 하더라고요. 문득 이런 생각이 들었습니다. '관계와 규칙의 차이는 무엇인가?'

관계와 규칙을 명확하게 구분지으려면 어떤 기준을 갖고 생각해야할까요? 관계는, DB 모델에 워낙 익숙하다보니 하나의 OO은 여러 OOO을 갖는다. 이쪽으로 먼저 생각이 흐르기도 하고요. 예시로 들어주신 것을 보면 관계는, '비즈니스에서 관계'라는 생각이 듭니다. 규칙은 데이터를 변경할 때 필요한 조건이라고 생각하면 될까요?

토비님 의견이 궁금합니다.

java spring spring-boot jpa 리팩터링 ddd

답변 2

0

토비

흥미로운 질문이네요.

제 생각에는 관계도 규칙의 일부라고 생각합니다. 도메인에서 엔티티가 만들어지고 다른 엔티티와 관계를 맺게 될 때 어떤 규칙을 따라서 진행이 되어야 할 겁니다. 도메인의 규칙과 로직은 대부분 변경에 관한 것입니다. 등록이나 수정, 삭제와 같은 것들이죠. 조회는 사실 애플리케이션 레벨의 규칙일 수는 있지만, 대체로 도메인의 로직에 포함되지는 않을 겁니다. 조회가 규칙에 들어가는 건 결국 변경과 관련된 것이겠죠.

관계는 엔티티를 식별하고 정의하면서 자연스럽게 만들어질 겁니다. 그런데 그런 관계는 결국 엔티티의 속성이나 변경 로직과 연결되어서 쓰이겠죠.

 

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 공부하는학생님께서 던진 질문에 대해 답변드리겠습니다.

도메인 모델에서의 관계와 규칙을 구분하는 것은 시스템 디자인의 중요한 부분입니다. 관계와 규칙을 명확하게 구분하기 위해 몇 가지 기준을 생각해볼 수 있습니다:

  1. 관계(Relation):

    • 관계는 일반적으로 엔티티 간의 연결을 나타냅니다. 즉, 한 엔티티가 다른 엔티티와 어떻게 연결되어 있는지를 정의합니다. 온라인 서점 예시에서, ‘책’과 ‘저자’ 간의 관계는 책이 여러 저자를 가질 수 있으며, 저자 또한 여러 책을 쓸 수 있다는 것이 관계의 한 예입니다.
    • 관계는 주로 데이터베이스 구조 설계에서 자주 사용되며, 엔티티 간의 참조 또는 외래 키(Foreign Key)를 통해 구현됩니다.
  2. 규칙(Rule):

    • 규칙은 비즈니스 로직과 관련된 조건이나 제약을 포괄합니다. 예를 들어, 온라인 서점에서 “10권 이상 구매 시 10% 할인”과 같은 정책은 규칙에 해당합니다.
    • 규칙은 데이터의 상태를 변경할 때 만족되어야 하는 조건을 정의하며, 이러한 조건은 도메인 로직으로 구현됩니다.

구분 방법은 다음과 같습니다:
- 관계는 엔티티 간의 구조적 연결을 정의하고,
- 규칙은 비즈니스 요구사항에 따른 논리적 조건을 정의합니다.

둘을 구분하는 데 있어서 혼란이 있을 수 있으나, 도메인 모델링 시에는 명확한 비즈니스 요구사항을 기반으로 관계와 규칙을 구분하여 설계하는 것이 중요합니다.

관련하여, 토비님의 강의나 이전 Q&A에서 이러한 주제에 대한 설명이 있는지 살펴보시는 것도 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

헥사고날 아키텍처에서의 배치, 시큐리티, 비동기 이벤트 처리는 어떻게 하나요?

0

107

2

어댑터에서 도메인에 직접 의존하는 경우에 대해

0

109

2

Member 도메인이 PasswordEncoder를 받는 구조 질문 있습니다.

0

93

2

MemberService와 EmailSender 책임 분리에 대한 질문

0

98

2

NonNullApi를 NullMarked로 대체하라고 합니다.

0

120

2

39. 문서와 코드 다듬기 updateInfo 테스트 질문 있습니다.

0

69

2

Repository Adapter 설계에 대해 피드백을 부탁드립니다

0

102

2

헥사고날 part2 강의 출시 예정일 문의 드립니다.

0

240

2

PT 문의사항

0

94

1

초기 어플리케이션 구동 시 compose.yml 파싱 오류

0

145

2

애플리케이션의 JPA 리턴과 도메인 모델

0

123

2

애그리거트 루트의 하위 도메인들의 depth가 깊어질 때 문의

0

130

2

페이징 처리를 해야한다면 어떻게 해야할까요?

0

184

2

애그리거트의 repository

0

113

2

Domain Expert가 정확히 어떤 역할을 하는 사람인가요?

0

223

1

회원 애플리케이션 서비스 테스트 (1)

0

100

2

정적 팩토리 메서드 관련 질문드립니다!

0

101

2

spotbug + @NonNullApi 로만 Null 방어가 될까요?

0

125

2

required 포트에 관해서

0

85

2

혹시 다음 편은 언제쯤 오픈할까요?

0

159

2

서비스 단위 테스트 코드 작성

0

91

2

domain 모듈에 entity를 정의한다고 했을때

0

89

2

여러 엔티티의 조합으로 리포트를 제공해야할 때

0

73

2

Member와 MemberDetail 엔티티를 나누는 기준에 대해

0

78

2