요약
- 8장. CQRS 패턴을 활용한 백엔드 마이크로서비스 개발
- 도서 마이크로서비스 개발 (나머지 부분)
- 도메인 모델링
- 입고 도서 등록과 재고 도서 등록에 대한 유스케이스 흐름
- 내부 영역 - 도메인 모델 개발
메모
8.1.4 도메인 모델링
- 도서 서비스의 도메인 모델은
재고 도서(Stock Book)
와 입고 도서(In-stock Book)
두 가지 엔티티로 구성됨.
- 도서제공업체로부터 도서가 입고되면
입고 도서
객체가 생성됨.
- 이렇게 입고된 도서는 특정 유형으로 분류되고, 도서관에 지정된 후, 대출 가능한
재고 도서
로 등록됨.
재고 도서
는 대출 가능 여부를 나타내는 도서 상태를 가지고 있음.
- 도서가 대출되면 '대출 불가' 상태가 되고, 반납되면 '대출 가능' 상태로 변경됨.
- 두 엔티티 각각은 애그리거트 루트의 역할을 수행함.
8.1.5 입고 도서 등록과 재고 도서 등록에 대한 유스케이스 흐름
- 입고 도서 등록과 재고 도서 등록 유즈케이스가 있음.
- 입고 도서 등록
- 이 과정은 프런트엔드에서 받아온 데이터를 도서 시스템에 등록하는 절차로, 특별한 비즈니스 로직은 없음.
- 재고 도서 등록
- 이 유스케이스는 도서제공업체나 도서 기증자에 의해 입고된 도서들이 대출 가능한 정식 도서로 등록되는 절차임.
- 프런트엔드에서는 새로 입고된 도서 정보를 기반으로 도서 분류 등의 추가 정보를 보완하여 새로운 도서 재고로 등록함.
- 프런트엔드에서 입고 도서를 조회하고 재고 도서로 등록한 후 해당 입고 도서는 서비스 구현체에서 삭제되므로, 도메인 모델의 직접적인 연관관계는 없음.
8.1.6 내부 영역 - 도메인 모델 개발
- InStockBook(입고 도서)와 Book(재고 도서) 도메인 모델을 살펴본다.
- InStockBook 클래스는 입고 도서 엔티티로서 일련번호, 제목, 설명, 저자, 출판사, ISBN, 출간일 등의 속성을 가지며, 입고 출처를 나타내는 Source라는 열거형 클래스를 표준 타입으로 가짐.
- ISBN은 국제 표준 도서 번호로서 값 객체로 선언할 수 있음.
- 하지만, 이 예제에서는 JHipster에서 엔티티 생성 로직에 값 객체를 지원하지 않으므로, 마이크로서비스를 최대한 활용하기 위해 값 객체를 적용하지 않은 도메인 모델 구현 방식을 택함.
- 하지만, 값 객체를 도입하면 도메인 모델의 표현력 증가, 무결성 유지, 잘못된 대입 방지, 코드 이곳저곳에 로직이 흩어지는 것 방지 등의 장점이 있음.
- 이후에는 값 객체를 적용한 InStockBook 엔티티와 값 객체를 적용하지 않은 InStockBook 엔티티의 코드를 비교하여 설명함.
- 값 객체를 적용한 경우에는 ISBN 클래스에서 유효성 검사 로직을 포함하여 유효하지 않은 값의 생성을 미연에 방지할 수 있음.
- Book 클래스는 재고 도서 엔티티로서, 대출 가능한 도서를 나타내며, 입고 도서의 속성 외에도 도서 대출 상태, 도서 분류, 보유 도서관 등의 속성을 가짐.
- 따라서, 이러한 속성의 타입이 될 수 있는 BookStatus, Location, Classification 열거형 클래스가 필요함.
- 재고 도서의 일련번호(id)는 다른 마이크로서비스에서도 도서의 유일성을 식별하는 고유키가 됨.
- 도서의 분류, 대출 가능 여부, 도서관 위치는 각각 Classification, BookStatus, Location 열거형 클래스를 통해 표현됨.
댓글