도메인주도설계(6)
-
도메인 주도 설계 - 리포지토리의 조회 기능
이 장에서 다룰 내용 스펙 동적 인스턴스와 @Subselect 검색을 위한 스펙 애그리거트를 찾을 때 식별자를 이용하는 것이 기본. 다양한 검색 조건으로 애그리거트를 찾아야한다면? 스펙 1 2 3 public interface Specification { boolean isSatisfiedBy(T agg); } Colored by Color Scripter cs 스펙은 애그리거트가 특정 조건을 충족하는지 여부를 검사하는 것. 애그리거트가 조건에 맞으면 true를, 틀리면 false를 리턴합니다. 예) OrdererSpec - 스펙 정의 1 2 3 4 5 6 7 8 9 10 11 12 public class OrdererSpec implements Specification { private String o..
2022.05.09 -
도메인 주도 설계 JPA를 이용한 리포지터리 구현
도메인 주도 설계에서 애그리거트를 어떤 저장소에 저장하느냐에 따라 리포지터리를 구현하는 방법이 다릅니다. 이번에는 JPA를 중심으로 리포지터리를 구현하는 방법에 대해 알아보는 시간입니다. 모듈 위치 DIP에 따라서 리포지터리 인터페이스는 도메인 영역에 속하고, 리포지터리를 구현한 클래스는 인프라 영역에 속합니다. 리포지터리 기본 기능 구현 리포지터리의 기본 기능은 다음 두 가지 입니다. 아이디로 애그리거트 조회 애그리거트 저장 1 2 3 4 public interface OrderRepository { Order findById(OrderNo id); void save(Order order); } Colored by Color Scripter cs 1 2 3 4 5 6 7 8 9 10 11 12 13 1..
2022.03.17 -
도메인 주도 설계의 모듈 구성(패키지 구성)
패키지 구성을 설계하는 것에는 한 가지 정답만 있는 것은 아니지만 이 번 시간에는 도메인 주도 설계에서 일반적으로 사용되는 패키지 구성을 소개하고자 합니다. 규칙1. 아키텍처의 각 영역은 별도 패키지에 위치합니다. ui: 표현 영역 application: 응용 영역 domain: 도메인 영역 infrastructure: 인프라 영역 규칙2. 도메인이 크면 하위 도메인별로 모듈을 나눕니다. 모듈 구성 예시) com.myshop ㄴ order ㄴ member ㄴ catalog ㄴ ui ㄴ application ㄴ infrastructure ㄴ domain ㄴ product ㄴ category 도메인이 복잡하다면 도메인 모델과 도메인 서비스를 다음과 같이 별도 패키지에 위치시킬 수도 있습니다. com.mysh..
2022.01.10 -
도메인 주도 설계 - 도메인 영역의 구성요소
스프링을 사용하는 백엔드 개발자들에게 컨트롤러와 서비스란 아주 자연스러운 웹 어플리케이션 아키텍처의 구성요소일 것 입니다. 컨트롤러와 서비스, 레포지터리를 구현하면 자연스럽게 웹 어플리케이션이 개발이 됩니다. 이처럼 도메인 주도 설계에서도 도메인 영역을 구성하는 대표적인 유형들의 객체가 있습니다. 기존 객체 모델링은 자유도가 높아 문제 영역을 파고들수록 여러 층의 복잡한 계층 구조를 만들게 될 가능성이 높습니다. DDD에서는 도메인 모델링 구성 요소의 역할에 따른 유형을 정의하고 이러한 규칙에 따라 도메인을 모델링하면 단순하게 설계가 가능합니다. 엔티티(Entity) 엔티티는 다른 엔티티와 구별할 수 있는 식별자를 가진 도메인의 실체 개념을 표현하는 객체입니다. 식별자는 고유하되 엔티티의 속성 및 상태는..
2022.01.06 -
도메인 주도 설계의 계층화 아키텍처(Layered Architecture)와 DIP
계층화 아키텍처 웹 어플리케이션에서 사용되는 대표적이고 전형적인 아키텍처 표현 영역, 응용 영역, 도메인 영역, 인프라 영역 이렇게 네 개의 영역으로 구성됩니다. 하지만 계층화 아키텍처를 구글링해보면 계층수가 다르거나 명칭도 조금씩 다릅니다. 하지만 계층화 되어있다는 점에서 같은 아키텍처로 보고 있습니다. 가장 큰 특징은 상위 계층에서 하위 계층으로만 의존하고 하위 계층에서 상위 계층을 의존하지 않습니다. 엄격한 계층화 아키텍처 상위 계층은 바로 아래의 계층에만 의존해야합니다. 유연한 계층화 아키텍처 구현의 편리함을 위해 계층 구조를 유연하게 적용한 버전입니다. 응용 계층에서 최하위 계층인 인프라스트럭처 계층을 의존할 수 있습니다. 계층화 아키텍처의 구성요소 표현 계층 클라이언트의 요청을 받고 응답을 전..
2022.01.05 -
도메인 주도 설계란? DDD란?
도메인 주도 설계(Domain-Driven Design)는 왜 필요할까요? 도메인 주도 설계란? 말 그대로 도메인을 중심으로 설계해 나가는 방법입니다. 그럼 도메인이란 무엇일까요? 소프트웨어로 해결해야할 문제의 영역입니다. 예를 들어 고객이 원하는 상품을 어떻게 잘 제공할 것인가? 의 대한 문제는 커머스라는 도메인이 있습니다. 커머스 도메인의 하위 도메인으로 판매자가 무엇을 판매할 것인가? 의 대한 문제는 상품이라는 도메인이 있고, 공통된 상품에 대해서 어떻게 공통 정보를 제공할 것인가? 의 대한 문제는 카탈로그 도메인이 있습니다. 그 밖에 판매자, 사용자, 카테고리, 주문, 배송 등 많은 도메인이 존재합니다. 소프트웨어의 존재에 대한 가치 소프트웨어의 본질은 해당 소프트웨어의 사용자를 위해 도메인에 관..
2021.11.29