DDD 적용시 JPA 설계에 대해 궁금한 사항
안녕하십니까 강사님. 좋은 강의 정말 감사합니다.
이번에 강사님께 강의를 듣고 현업에 적용하는 도중 궁금한 사항이 있어 문의하게 되었습니다.
저희는 현재 DDD 를 적용하려고 합니다. DDD 에서는 애그리거트끼리의 관계를 맵핑하는 것을 지양하는 것으로 알고 있습니다. 따라서 저희는 ERD 기준으로 도메인을 설계해보니 실제 나온 도메인을 보면 테이블이 전부 도메인 클래스가 되었고 서로간의 관계를 코딩으로 맺는 부분 (@ManyToOne 등)이 존재 하지 않습니다.
현업에서도 ERD 를 기준으로 도메인 클래스를 나누면 테이블 당 하나의 애그리거트가 나오는 것이 보편적인 사항일까요?
DDD 로 개발하다보면 도메인 클래스에 관계를 맺는 부분이 없는게 보편적일까요?
답변 2
3
안녕하세요. 진현님
DDD로 개발한다고 해서 그 안에 있는 모든 전략을 다 따라서 하는 것이 꼭 좋은 방법은 아닙니다.
모든 기술 선택에는 트레이드 오프가 있습니다.
지금처럼 모든 연관관계를 제거하게 되면 JPA에서 제공하는 fetch join같은 최적화 기술을 사용할 수 없습니다.
그래서 연관된 데이터를 함께 사용해야 할 때 쉽게 조회할 수 있는 기능도 아주 복잡하게 조립하거나 또는 DTO와 조인을 함께 사용해서 조회해야 합니다.
제가 권장하는 방법은 다음과 같습니다.
1. 프로젝트가 작고, JPA나 DDD같은 기술 사용 경험이 부족하다면 처음에는 연관관계를 적극적으로 사용합니다.
2. 프로젝트가 어느정도 규모가 있다면 큰 모듈 단위로 경계를 정하고 그 경계 안에서는 연관관계를 가지도록 하는 방법입니다. 예를 들면 회원, 주문, 결제 이 정도의 경계를 만들고, 그 안에서만 연관관계를 사용합니다. 이렇게 해두면 미래에 각각의 모듈을 마이크로서비스로 빼더라도 연관관계가 없기 때문에 상대적으로 쉽게 각 모듈을 분리할 수 있습니다.
3. 애그리거트를 도입하는 것은 최소한 2의 경험을 가진 분들이 도입하는 것이 좋습니다. 2의 각 모듈 안에서 애그리거트를 사용하는 방식이 더 적절한 모듈이 있고, 또는 애그리거트를 사용하지 않고 연관관계를 적극적으로 사용하는 것이 더 나은 모듈이 있습니다. 참고로 질문하신 것 처럼 애그리거트는 주로 테이블, 엔티티당 하나가 나오게 됩니다.
도움이 되셨길 바래요.
0
안녕하세요, 인프런 AI 인턴이에요.
답변드리겠습니다.
DDD에서는 애그리거트끼리의 관계를 맵핑하는 것을 지양하는 것이 맞습니다. 애그리거트 내부에서는 값을 변경할 수 있는 일관된 상태를 유지하는 것이 중요하기 때문입니다.
ERD 기준으로 도메인을 설계하고, 테이블 당 하나의 애그리거트가 나오는 것이 보편적인 사항은 아닙니다. 애그리거트는 하나 이상의 테이블을 포함할 수 있습니다. 예를 들어, 주문 애그리거트는 주문 테이블, 주문 상품 테이블, 상품 테이블을 포함할 수 있습니다.
따라서, 도메인 클래스에 관계를 맺는 부분이 없는 것이 보편적인 것도 아닙니다. 애그리거트 내부에서 필요에 따라 규칙에 따라 관계를 맺을 수 있습니다.
좀 더 자세한 내용은 DDD 책을 참고하시면 도움이 될 것입니다. 감사합니다.
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
71
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
107
3
MemberRepository 구현체
0
58
1
pdf 표현 질문드립니다.
0
62
1
로그가 남지 않는 문제.
0
81
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
70
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
72
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
91
2
Sort 인터페이스는 잘 사용 안하나요?
0
52
1
스캔대상 질문드립니다.
0
46
1
하이버네이트6에서의 최적화에 이은 질문
0
86
1
save() vs saveAndFlush DB 통신 횟수
0
54
1
순수 JPA 리포지토리 코드 수정부분
0
86
2
bulk연산 후 flush하는 이유를 모르겠어요
0
152
3
bulk insert 질문입니다.
0
178
2
교만했던 것 같아요.
0
147
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
147
2
동적 테이블에 대한 질문
0
86
1
영속성 전이와 연관관계
0
130
2
강의 10:25 질문
0
74
1
단건 update 질문
0
95
2
엔티티 와 도메인의 경계
0
127
1
UsernameOnlyDto 타입 type mismatch 오류
0
119
1
Projection 개념과 데이터 전달과정에 대해 질문 있습니다.
0
136
1





