책너두 (도메인 주도 설계로 시작하는 마이크로서비스 개발) 36일차 (~310p)

요약

  • 8장. CQRS 패턴을 활용한 백엔드 마이크로서비스 개발
    • 도서 마이크로서비스 개발 (나머지 부분)
      • 도메인 모델링
      • 입고 도서 등록과 재고 도서 등록에 대한 유스케이스 흐름
      • 내부 영역 - 도메인 모델 개발

메모

8.1.4 도메인 모델링

  • 도서 서비스의 도메인 모델은 재고 도서(Stock Book)입고 도서(In-stock Book) 두 가지 엔티티로 구성됨.
    • 도서제공업체로부터 도서가 입고되면 입고 도서 객체가 생성됨.
    • 이렇게 입고된 도서는 특정 유형으로 분류되고, 도서관에 지정된 후, 대출 가능한 재고 도서로 등록됨.
  • 재고 도서대출 가능 여부를 나타내는 도서 상태를 가지고 있음.
    • 도서가 대출되면 '대출 불가' 상태가 되고, 반납되면 '대출 가능' 상태로 변경됨.
  • 두 엔티티 각각은 애그리거트 루트의 역할을 수행함.

8.1.5 입고 도서 등록과 재고 도서 등록에 대한 유스케이스 흐름

  • 입고 도서 등록재고 도서 등록 유즈케이스가 있음.
    1. 입고 도서 등록
      • 이 과정은 프런트엔드에서 받아온 데이터를 도서 시스템에 등록하는 절차로, 특별한 비즈니스 로직은 없음.
    2. 재고 도서 등록
      • 이 유스케이스는 도서제공업체나 도서 기증자에 의해 입고된 도서들이 대출 가능한 정식 도서로 등록되는 절차임.
      • 프런트엔드에서는 새로 입고된 도서 정보를 기반으로 도서 분류 등의 추가 정보를 보완하여 새로운 도서 재고로 등록함.
  • 프런트엔드에서 입고 도서를 조회하고 재고 도서로 등록한 후 해당 입고 도서는 서비스 구현체에서 삭제되므로, 도메인 모델의 직접적인 연관관계는 없음.

8.1.6 내부 영역 - 도메인 모델 개발

  • InStockBook(입고 도서)Book(재고 도서) 도메인 모델을 살펴본다.
  • InStockBook 클래스는 입고 도서 엔티티로서 일련번호, 제목, 설명, 저자, 출판사, ISBN, 출간일 등의 속성을 가지며, 입고 출처를 나타내는 Source라는 열거형 클래스를 표준 타입으로 가짐.
  • ISBN은 국제 표준 도서 번호로서 값 객체로 선언할 수 있음.
    • 하지만, 이 예제에서는 JHipster에서 엔티티 생성 로직에 값 객체를 지원하지 않으므로, 마이크로서비스를 최대한 활용하기 위해 값 객체를 적용하지 않은 도메인 모델 구현 방식을 택함.
      • 하지만, 값 객체를 도입하면 도메인 모델의 표현력 증가, 무결성 유지, 잘못된 대입 방지, 코드 이곳저곳에 로직이 흩어지는 것 방지 등의 장점이 있음.
      • 이후에는 값 객체를 적용한 InStockBook 엔티티와 값 객체를 적용하지 않은 InStockBook 엔티티의 코드를 비교하여 설명함.
        • 값 객체를 적용한 경우에는 ISBN 클래스에서 유효성 검사 로직을 포함하여 유효하지 않은 값의 생성을 미연에 방지할 수 있음.
  • Book 클래스는 재고 도서 엔티티로서, 대출 가능한 도서를 나타내며, 입고 도서의 속성 외에도 도서 대출 상태, 도서 분류, 보유 도서관 등의 속성을 가짐.
    • 따라서, 이러한 속성의 타입이 될 수 있는 BookStatus, Location, Classification 열거형 클래스가 필요함.
    • 재고 도서의 일련번호(id)는 다른 마이크로서비스에서도 도서의 유일성을 식별하는 고유키가 됨.
      • 도서의 분류, 대출 가능 여부, 도서관 위치는 각각 Classification, BookStatus, Location 열거형 클래스를 통해 표현됨.

댓글

Designed by JB FACTORY