inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

8강 도메인 모델과 DDD 내용에 대해 질문있습니다.

60

penelope

작성한 질문수 1

0

8강 도메인 모델과 DDD 에서

코드의 내용이 도메인에도 반영이 되어야 할 때도 있다고 하셨는데 예시를 들어 주실 수 있을까요?

java spring spring-boot jpa 리팩터링 ddd

답변 2

0

토비

제가 어느 부분에서 그 이야기를 했는지 알려주실 수 있나요? "코드의 내용이 도메인에도 반영이 되어야 할 때도"라는 표현은 못 찾겠네요. 그 내용이 나온 시간이나 정확한 문구를 인용해주시면 빨리 확인해볼 수 있을 겁니다.

0

penelope

16:37~16:49 사이 내용입니다.

0

인프런 AI 인턴

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

도메인 모델과 DDD(Domain-Driven Design)에 대한 질문을 주셔서 감사합니다. 도메인 모델에서 코드를 어떻게 반영해야 하는지에 대한 질문을 많이 받습니다. 예를 들어보겠습니다.

일반적으로 도메인 모델이란 비즈니스 로직과 규칙을 반영하는 소프트웨어의 설계적 표현입니다. 이 때, 도메인 모델을 설계할 때 특히 중요한 것은 코드가 도메인의 언어와 개념을 충실히 반영해야 한다는 점입니다.

예시: 쇼핑몰 시스템

1. 상품 관리

도메인 모델에서 Product라는 클래스가 있다면, 이 클래스는 단순한 데이터 저장소가 아니라 비즈니스 로직을 포함해야 합니다. 즉, 가격을 업데이트하거나 제공 중인 재고를 관리하는 등의 로직이 여기 포함될 수 있습니다. 이러한 비즈니스 로직이 코드에 반영될 때, 실제로 도메인의 개념을 코드에 기록하는 것입니다.

public class Product {
    private String name;
    private Money price;
    private int quantity;

    public void updatePrice(Money newPrice) {
        if (newPrice.isValid()) {
            this.price = newPrice;
        } else {
            throw new InvalidPriceException();
        }
    }
}

2. 주문 처리

Order라는 도메인 엔티티가 있다고 가정해 봅시다. 여기에 주문을 생성하거나 변경할 때의 비즈니스 규칙이 반영되어야 합니다.

public class Order {
    private List<OrderItem> items;

    public void addItem(OrderItem item) {
        // 비즈니스 규칙 반영
        if (item.isAvailable()) {
            this.items.add(item);
        }
    }
}

이와 같이, 코드를 작성할 때는 도메인 전문가와의 협력을 통해 비즈니스 개념과 규칙이 코드와 잘 매치되도록 신경 써야 합니다. 이렇게 만들어진 모델이 잘못된 도메인 용어를 사용하거나, 비즈니스 관점에서 중요하지 않은 사항을 너무 비중 있게 다루고 있다면, 이후 유지보수나 확장에 큰 어려움을 겪을 수 있습니다.

이와 관련된 내용으로 더 자세히 알고 싶으시다면 다음의 링크를 참고해 주세요:
- 도메인 모델링과 코드 간의 반영 방법

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

테스트 관련 질문!

0

53

2

N+1 관련해서 질문있습니다.

0

92

3

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

0

84

2

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

0

168

2

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

0

159

2

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

0

136

2

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

0

121

2

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

0

155

2

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

0

92

2

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

0

121

2

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

0

280

2

PT 문의사항

0

114

1

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

0

163

2

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

0

140

2

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

0

153

2

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

0

209

2

애그리거트의 repository

0

132

2

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

0

259

1

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

0

118

2

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

0

116

2

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

0

140

2

required 포트에 관해서

0

99

2

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

0

179

2

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

0

107

2