inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

강의 소개

Member와 MemberDetail의 연관관계 주인이 바뀐게 아닌가 싶습니다.

101

yamsroun

작성한 질문수 4

0

안녕하세요.

Member와 MemberDetail의 연관관계 주인이 바뀐게 아닌가 싶습니다.
비록 1:1 관계이고, 두 객체 인스턴스가 동시에 생성되고 테이블에 영속화 되게끔 설정된 거는 맞지만,
논리적으로 Member 엔터티가 상위 엔터티이고, MemberDetail이 하위 엔터티가 맞는 것 같아요.

추후 Member 엔터티를 참조하는 다른 엔터티가 만들어질텐데,
MemberDetail을 참조하는게 아니라 Member를 참조해야 하고요.

관련한 의견 부탁 드립니다.
감사합니다.

java spring spring-boot jpa 리팩터링 ddd

답변 2

0

토비

Member를 애그리거트로 만들고 루트 엔티티를 Member로 만들었습니다. 그러면 당연히 연관관계의 주인은 Member가 됩니다. 그러니 Member가 MemberDetail을 참조하죠. 그렇게 코드를 만들어는데 어떤 부분에서 연관관계 주인이 바뀌었다는 것인가요?

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. yamsroun님!

Member와 MemberDetail의 연관관계에 대해 궁금한 점을 남겨주셨네요. 이러한 1:1 관계에서는 논리적으로 상위 엔터티와 하위 엔터티를 어떻게 설정하느냐에 따라 다양한 방식으로 접근할 수 있습니다.

논리적으로 상위 엔터티인 Member

  1. 비즈니스 요구 사항: Member가 시스템의 주된 개념이고, 대부분의 기능이 Member를 중심으로 이루어진다면 Member가 상위 엔터티가 되는 것이 자연스럽습니다.

  2. 확장성: 말씀하신 것처럼, 향후 다른 엔터티들이 추가될 계획이라면, Member를 중심으로 하는 것이 더 효율적일 수 있습니다.

  3. 연관 관계 주인: Member가 주 엔터티로 작용하면, MemberDetail은 Member와의 연관 관계에서 보조적인 역할을 하며, Member가 연관 관계의 주인으로 설정되는 것이 적절할 수 있습니다.

설계 시 고려사항

  • 데이터 응집도: 특정 데이터를 얼마나 자주 함께 사용하는지를 고려해 데이터 응집도를 높이는 방향으로 설계할 수 있습니다.
  • 변경의 용이성: 주 엔터티에 따라 변경 시 다른 영향도가 달라질 수 있습니다. 따라서 변경 관리가 더 쉬운 설계를 고려해야 합니다.

위 사항들은 설계 초기 단계에서 잘 고려되어야 하며, 프레임워크나 ORM의 설정에서도 연관 관계 설정을 명확히 해두는 것이 좋습니다.

관련된 토비님의 강의 내용이나 1:1 관계에서의 양방향 연관관계 설정 같은 질문에서 도움될 수 있는 자료를 찾아보시는 것도 추천드립니다.

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

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

0

37

2

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

0

115

2

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

0

116

2

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

0

103

2

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

0

102

2

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

0

123

2

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

0

71

2

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

0

105

2

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

0

244

2

PT 문의사항

0

97

1

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

0

147

2

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

0

125

2

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

0

133

2

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

0

187

2

애그리거트의 repository

0

116

2

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

0

228

1

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

0

102

2

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

0

103

2

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

0

127

2

required 포트에 관해서

0

90

2

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

0

163

2

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

0

94

2

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

0

95

2

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

0

78

2