강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

penelope님의 프로필 이미지
penelope

작성한 질문수

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

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

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

작성

·

13

0

8강 도메인 모델과 DDD 에서

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

답변 2

0

토비님의 프로필 이미지
토비
지식공유자

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

0

안녕하세요, 인프런 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);
        }
    }
}

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

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

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

penelope님의 프로필 이미지
penelope

작성한 질문수

질문하기