2023/11/08 16

Chapter 9 도메인 모델과 바운디드 컨텍스트

도메인 주도 개발 시작하기 9장을 요약한 내용입니다. 9.1 도메인 모델과 경계 도메인 모델을 만들 때 빠지기 쉬운 함정이 도메인을 완벽하게 표현하는 단일 모델을 만드는 시도를 하는 것 한 도메인은 여러 하위 도메인으로 구분되기 때문에 한 개의 모델로 여러 하위 도메인을 모두 표현하려고 시도하면 오히려 모든 하위 도메인에 맞지 않는 모델을 만들게 된다. 상품이라는 모델을 생각 해보자. 카달로그에서 상품, 재고 관리에서 상품, 주문에서 상품, 배송에서 상품은 이름만 같지 실제로 의미하는 것은 다름 카달로그에서의 상품은 상품 이미지, 상품명, 상품 가격 등과 같은 상품 위주의 정보 재고 관리에서의 상품은 실존하는 개별 객체를 추적관리하기 위한 목적 논리적으로는 같은 존재처럼 보이지만 하위 도메인에 따라 다른..

Chapter 8 애그리거트 트랜잭션 관리

create table locks ( 'type' varchar(255), id varchar(255), lockid varchar(255), expiration_time datetime, primary key ('type', id) ) character set utf8; create unique index locks_idx ON locks (lockid); // Order 타입의 1번 식별자를 갖는 애그리거트에 대한 잠금 쿼리 insert into locks values ('Order', '1', '생성한 lockid', '2016-03-28 09:10:00'); 도메인 주도 개발 시작하기 8장을 요약한 내용입니다. 8.1 애그리거트와 트랜잭션 주문 애그리거트에 대해 운영자는 배송 상태로 변경할 때 고..

Chapter 7 도메인 서비스

도메인 주도 개발 시작하기 7장을 요약한 내용입니다. 7.1 여러 애그리거트가 필요한 기능 한 애그리거트로 기능을 구현할 수 없을 때가 있다. 결제 금액을 계산할 때 필요한 내용 상품 애그리거트: 구매하는 상품의 가격이 필요하다. 상품에 따라 배송비가 추가되기도 한다. 주문 애그리거트: 상품별로 구매 개수가 필요하다. 할인 쿠폰 애그리거트: 쿠폰별로 지정한 할인 금액이나 비율에 따라 주문 총 금액을 할인한다. 할인 쿠폰을 조건에 따라 중복 사용할 수 있다거나 지정한 카테고리의 상품에만 적용할 수 있다는 제약 조건이 있다면 할인 계산이 복잡해지낟. 회원 애그리거트: 회원 등급에 따라 추가 할인이 가능하다. 결제 금액을 계산해야 하는 주체는 어떤 애그리거트일까? 총 주문 금액에서 할인 금액을 계산해야 하는데..

Chapter 6 응용 서비스와 표현 영역

도메인 주도 개발 시작하기 6장을 요약한 내용입니다. 6.1 표현 영역과 응용 영역 도메인이 제 기능을 하려면 사용자와 도메인을 연결해주는 매개체가 필요하다 표현 영역은 사용자의 요청을 해석 웹 브라우저에서 ID와 암호를 입력한 뒤에 전송 버튼을 클릭하면 요청 파라미터를 포함함 HTTP 요청을 표현 영역에 전달 사용자가 실행하고 싶은 기능을 판별하고 기능을 제공하는 응용 서비스를 실행 사용자가 원하는 기느을 제공하는 것은 응용 영역에 위치한 서비스 회원 가입을 요청했다면 실제 그 요청을 위한 기능을 제공하는 주체는 응용 서비스 응용 서비스의 메서드가 요구하는 파라미터와 표현 영역이 사용자로부터 전달받은 데이터는 형식이 일치하지 않음 표현 영역은 응용 서비스가 요구하는 현식으로 사용자 요청을 변환 @Pos..

Chapter 5 스프링 데이터 JPA를 이용한 조회 기능

도메인 주도 개발 시작하기 5장을 요약한 내용입니다. 5.1 시작에 앞서 CQRS는 명령 모델과 조화 모델을 분리하는 패턴 명령 모델은 상태를 변경하는 기능을 구현할 때 사용 회원가입, 암호변경, 주문취소 등 조회 모델은 데이터를 조회하는 기능을 구현할 때 사용 주문목록, 주문 상세 등 엔티티, 애그리거트, 리포지터리 등은 주로 상태를 변경할 때 사용이 된다 도메인 모델은 명령 모델로 주로 사용됨 정렬, 페이징, 검색 조건 같은 기능은 조회 기능에 사용됨 5.2 검색을 위한 스펙 검색 조건이 고정되어 있고 단순하면 특정 조건으로 조회하는 기능을 만들면 된다. public interface OrderDataDao { Optional findById(OrderNo id); List findByOrderer(..

Chapter 4 리포지터리와 모델 구현

도메인 주도 개발 시작하기 4장을 요약한 내용입니다. 4.1 JPA를 이용한 리포지터리 구현 객체 기반의 도메인 모델과 관계형 데이터 모델 간의 매핑을 처리하는 기술로 ORM만한 것이 없다. 자바의 ORM 표준인 JPA를 이용해 리포지터리와 애그리거트를 구현하는 방법에 대해 살펴본다. 4.1.1 모듈 위치 리포지터리 인터페이스는 애그리거트와 같이 도메인 영역에 속하고, 리포티저티를 구현한 글래스는 인프라스트럭처 영역에 속한다. 리포지터리 구현 클래스를 인프라스트럭처 영역에 위치시켜서 인프라스트럭처에 대한 의존을 낮추는 것이 좋음 4.1.2 리포지터리 기본 기능 구현 리포지터리가 제공하는 기본 기능 ID로 애그리거트 조회 애그리거트 저장 public interface OrderRepository { Ord..

Chapter 3 애그리거트

도메인 주도 개발 시작하기 3장을 요약한 내용입니다. 3.1 애그리거트 온라인 쇼핑몰 시스템을 개발할 때 상위 수준 개념을 이용해 전체 모델을 정리하면 전반적인 관계를 이해하는 데 도움이 된다. 상위 수준 모델을 개별 단위로 변환 상위 수준에서 개념을 파악하려면 더 오랜 시간이 걸림 더 많은 코드와 도메인 전문가와 대화를 통해 상위 수준에서 모델 간 관계가 이해하기 좋음 백 개 이상의 테이블을 한 장의 ERD에 모두 표시하면 테이블간의 관계를 파악하느라 큰 틀에서 데이터 구조를 이해하는데 어려움이 있다. 도메인 객채 모델이 복잡해지면 개별 구성요소 위주로 모델을 이해하게 되고 전반적인 구조나 큰 수준의 도메인간의 관계를 파악하기 어려움 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들려면 상위 수준에서..

카테고리 없음 2023.11.08

Chapter 2 아키텍처 개요

도메인 주도 개발 시작하기 2장을 요약한 내용입니다. 2.1 네 개의 영역 “표현”, “응용”, “도메인”, “인프라스트럭처”는 아키텍처를 설계할 때 출현하는 전형적인 네 가지 영역 표현 영역 사용자의 요청을 받아 응용 영역에 전달, 응용 영역의 처리 결과를 사용자에게 전달 스프링 MVC 프레임워크가 표현 영역의 기술 응용 영역 표현 영역을 통해 사용자의 요청을 전달받은 응용 영역은 시스템이 사용자에게 제공해야할 기능을 구현 “주문 등록”, “주문 취소”, “상품 상세 조회” 등의 기능을 예로 들수 있다. 기능을 구현하기 위한 도메인 영역의 도메인 모델을 사용 “주문 취소” 기능을 제공하는 응용 서비스를 도메인 모델을 사용해서 기능 구현이 가능 public class CancelOrderService {..

Chapter 1 도메인 모델 시작하기

도메인 주도 개발 시작하기 1장을 요약한 내용입니다. 1.1 도메인이란? 온라인 서점을 구현할 소프트웨어라고 봤을때 도메인이란? 상품 조회, 구매, 결제, 배송 추적 등 온라인 서점 도메인은 몇개의 하위 도메인으로 나눌 수 있다. 카탈로그 하위 도메인은 고객에게 구매할 수 있는 상품 목록을 제공하고, 주문 하위 도메인은 고객의 주문을 처리 혜택의 하위 도메인은 쿠폰이나 특별 할인과 같은 서비스 제공 하위 도메인은 다른 하위 도메인과 연동하여 완전한 기능을 제공 한다. 고객이 물건을 구매하면 주문, 결제, 배송, 혜택 하위 도메인의 기능이 엮이게 된다. 특정 도메인을 위한 소프트웨어라고 해서 도메인이 제공해야 할 모든 기능을 직접 구현하는 것은 아님 배송 도메인의 일부 기능은 자체 시스템으로 구현하고 나머..

07장 한글 검색 확장 기능

엘라스틱서치 실무 가이드 7장을 요약한 내용입니다. Suggest API가 키워드 자동완성 기능을 지원 한글 키워드는 정상 동작하지 않음 7.1 Suggest API 소개 Suggest API를 이용하면 텀과 정확히 일치하지 않는 단어도 자동 인식 Suggest API 4가지 방식 Term Suggest API: 추천 단어 제안 Compleetion Suggest API: 자동완성 제안 Phrase Suggest API: 추천 문장 제안 Context Suggest API: 추천 문맥 제안 7.1.1 Term Suggest API 편집거리(edit distance)를 사용해 비슷한 단어를 제안 문자열이 다른 문자열과 얼마나 비슷한가를 편집거리를 사용해 알아 볼 수 있음 편집거리 측정 방식은 단어를 삽입,..