Programming/DDD 13

DDD - 도메인과 유비쿼터스 언어

도메인 용어 코드를 작성할 때 도메인에서 사용하는 용어는 매우 중요하다. 쇼핑몰 프로젝트에서 레거시한 DB 구조를 가지고 있다고 가정하자. Order 테이블에는 status라는 컬럼이 있다. status 컬럼에는 "STEP1", "STEP2", "STEP3"... ,"STEP6" 이라는 정보가 저장된다. 해당 코드를 Enum으로 다음과 같이 작성할 수 있다. public Enum OrderStatus { STEP1, STEP2, STEP3, STEP4, STEP5, STEP6 } 실제 주문 상태는 ‘결제대기중’, ‘상품준비중’, ‘출고완료됨’, ‘배송중’, ‘배송완료’, '주문 취소'인데 기존의 DB에서 전체 상태를 6단계로 본 구조를 그대로 엔터티 속성으로 표현한 것이다. 해당 프로젝트를 맡은 작업자는..

Programming/DDD 2022.05.24

DDD - 엔터티와 밸류

엔터티와 밸류 도출한 도메인 모델은 크게 엔터티(Entity)와 밸류(Value)로 구분할 수 있다. 주문 도메인에서 만든 모델은 다음과 같다. 엔터티도 존재하고 밸류도 존재한다. 엔터티와 밸류를 제대로 구분해야 도메인을 올바르게 설계하고 구현할 수 있기에 이 둘의 차이를 명확하게 이해하는 것은 도메인을 구현하는 데 있어 중요하다. 엔터티 엔터티의 가장 큰 특징은 식별자를 가진다는 것이다. 식별자는 엔티티의 객체마다 고유해서 각 엔티티는 서로 다른 식별자를 갖는다. 주문 도메인에서 각 주문은 주문번호를 갖는데 이 주문번호는 각 주문마다 서로 다르다. 따라서 주문번호가 주문의 식별자가 된다. 주문 도메인 모델에서 주문에 해당하는 클래스가 Order이므로 Order가 엔티티가 되며 주문번호를 속성으로 갖게 ..

Programming/DDD 2022.05.24

DDD - 도메인이란 무엇인가? (+ 도메인 설계 예시)

도메인 개발자 입장에서 온라인 서점은 구현해야 할 소프트웨어의 대상이 된다. 온라인 서점 소프트웨어는 온라인으로 책을 판매하는 데 필요한 상품조회, 구매, 결제, 배송 추적 등의 기능을 제공해야 한다. 이때, '온라인 서점'은 소프트웨어로 해결하고자 하는 문제 영역, 즉 도메인(domain)에 해당한다. 한 도메인은 다시 하위 도메인으로 나눌 수 있다. 예를 들어 다음 그림은 온라인 서점 도메인을 몇 개의 하위 도메인으로 나타낸 것이다. 카탈로그 하위 도메인은 고객에게 구매할 수 있는 상품 목록을 제공하고, 주문 하위 도메인은 고객의 주문을 처리한다. 혜택 하위 도메인은 쿠폰이나 특별 할인과 같은 서비스를 제공한다. 한 하위 도메인은 다른 하위 도메인과 연동하여 완전한 기능을 제공하게 된다. 특정 도메인..

Programming/DDD 2022.05.24