도메인(8)
-
객체지향 프로그래밍
# 영화 예매 시스템 영화관 예매 시스템을 만든다고 가정해보자. 영화표를 구매할 때 할인을 받을 수 있다. 할인액을 결정하는 데 두 가지 규칙이 존재하는데, 하나는 할인 조건(discount condition), 다른 하나는 할인 정책(discount policy)가 있다고 보자. 할인 조건은 할인 여부를 결정하며 '순서 조건'과 '기간 조건'이 있다. 순서 조건은 상영 순번이 일치하면 할인을 해주는 것이고, 기간 조건은 상영 시작 시간이 해당 기간 안에 포함하면 할인해주는 것이다. 할인 정책은 '금액 할인 정책' 과 '비율 할인 정책'이 있다. 금액 할인 정책은 예매 요금에서 일정 금액을 할인해주는 방식이며, 비율 할인 정책은 일정 비율만큼 할인해주는 방식이다. 영화별로 하나의 할인 정책만 할당 가능하..
2023.09.30 -
CQRS
보통 데이터를 조회 시에 여러 에그리거트에서 데이터를 가져와야 한다. 여러 애그리거트의 데이터가 필요하면 다양한 방안의 구현 방법을 고민해야 하는데, 식별자를 이용해서 애그리거트를 참조하는 방식을 사용하면 즉시 로딩과 같은 JPA 쿼리 관련 최적화 기능을 사용할 수 없다. 직접 참조하는 방식을 사용한다 하더라도, 같은 연관도 즉시/지연 로딩 등 다양한 방법으로 처리애햐 하고, DBMS가 제공하는 전용 기능이 필요하면 네이티브 쿼리를 사용해야 할 수도 있다. ORM 기법은 도메인 상태 변경 기능을 구현하는 데는 적합하지만, 데이터를 가져와 출력하는 기능울 구현하기에는 고려할게 많아서 구현을 복잡하게 한다. 상태 변경을 위한 모델과 조회를 위한 모델을 분리하면 위 문제를 해결할 수 있다. # CQRS 시스템..
2023.09.21 -
도메인 주도 개발 시작하기
네 개의 영역 표현 영역 사용자 요청을 받아 응용 영역에 전달, 응용 영역의 처리 결과를 다시 사용자에게 전달 응용 영역 시스템이 사용자에게 제공해야할 기능을 구현 응용 서비스는 로직을 직접 수행하기보다는 도메인 모델에 로직 수행을 위임 도메인 모델 도메인 핵심 로직을 구현 인프라스트럭처 영역 구현 기술에 대한 것을 다룸 DB 연동, 메시징 큐 송수신 계층 구조 아키텍처 계층 구조는 상위 계층에서 하위 계층으로 의존만 존재 하위 계층은 상위 계층에 의존하지 않음 구현의 편리함을 위해 계층 구조를 유연하게 적용하기도 함 인프라 스트럭처에 의존하면 test와 기능 확장에 어려움을 가짐 : DIP로 해결 DIP 상위 모듈은 하위 모듈에 의존해서는 안 됨. 변하지 않는 것에 의존 -> 추상화에 의존 -> 인터페..
2023.07.11 -
도메인 모델 시작하기
도메인이란? - 도메인 : SW로 해결하고자 하는 문제 영역 - 도메인은 여러 하위 도메인으로 구성됨. - 한 하위 도메인은 다른 하위 도메인과 연동하여 완전한 기능 제공 - 특정 도메인 위한 SW라고 해서 도메인이 제공해야 할 모든 기능을 직접 구현하지 않음. - 일부 기능은 자체 시스템으로 구현, 나머지 기능은 외부 시스템 사용 EX) 온라인 쇼핑몰은 외부 배송 업체의 시스템 사용. 필요한 기능만 일부 연동 도메인 전문가와 개발자 간 지식 공유 - 요구사항은 첫 단추와 같음. 코딩에 앞서 요구사항을 올바르게 이해하는 것이 중요. - 개발자와 전문가가 직접 대화하는게 베스트 - 이해관계자와 개발자도 도메인 지식을 갖춰야 - 잘못된 값이 들어가면 잘못된 결과가 나옴. 요구사항도 마찬가지 - 관련자가 요구..
2023.07.06 -
06. 객체 지도
기능이 아니라 구조를 기반으로 모델을 구축하는 편이 좀 더 범용적이고 이해하기 쉬우며 변경에 안정적 # 기능 설계 VS 구조 설계 기능 설계 : 제품이 사용자를 위해 무엇을 할 수 있는가 구조 설계 : 제품의 형태가 어떠해야 하는가 훌륭한 기능은 충분조건, 훌륭한 구조는 필요조건 우리는 미래를 예측할 수 없다, 단지 대비할 수 있을 뿐 훌륭한 SW는 좋은 기능을 제공하면서 변경에 유연 좋은 설계는 병결할 수 있는 여지를 남겨 놓는 설계 변경의 여지를 남겨 놓는 가장 좋은 방법은 자주 변경되는 기능이 아닌 안정적인 구조를 중심으로 설계하는 것 # 객체지향 설계 기법 구조는 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 간의 관계로 표현 : 도메인 모델링 기능은 사용자의 목표를 만족시키기 위해..
2023.05.31 -
5장 : 마이크로서비스 설계
MSA에서 가장 중요한 관심사 : 기능적 응집성을 높이는 것, 타 서비스 간 의존도 낮추는 것 # 마이크로 서비스를 도출하는 방법 ## 비즈니스 능력에 근거한 도출 업무 기능 분해 : 업무 흐름에 따라 업무를 최상위에서 하위까지 대,중,소의 크기로 분리하고 수행하는 일을 체계적으로 정렬 전체적인 비즈니스를 이해할 때는 유용하나, 서비스 간 관계 파악 및 구체기능과 연관된 서비스 관리할 독립적인 데이터 식별을 어려움 ## DDD의 바운디드 컨텍스트 기반 도출 DDD에서는 하나의 큰 도메인을 중요도에 따라 도메인을 나누고 각 도메일을 하나씩 해결 ### 서브 도메인 비즈니스 도메인을 논리적으로 구분/분리되는 여러 하위 도메인 - 핵심 서브도메인 : 높은 우선순위 영역, 전략적으로 가장 큰 투자가 필요한 영역..
2023.05.22