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

요약

  • 7장. 사례연구 - 백엔드 마이크로서비스 구현에 대한 내용
    • 도서 대출 마이크로서비스 개발 (나머지 부분)
      • 내부 영역 - 도메인 모델 개발: 도서 연체 및 연체된 도서 반납
        • 서비스 흐름 처리
      • 내부 영역 - 도메인 모델 개발: 대출 불가 해제 처리 기능 구현
      • 외부 영역 - REST 컨트롤러 개발

메모

7.1.12 내부 영역 - 도메인 모델 개발: 도서 연체 및 연체된 도서 반납

  • Rental 엔티티 객체의 책임으로, 세 가지 주요 비즈니스 로직을 처리하는 메서드를 통해 수행됨.
    1. overdueBook(연체 처리)
      • 이 메서드는 도서 일련번호로 대출아이템(RentedItem) 객체를 찾아 연체아이템 객체(OverdueItem)를 만들어 Rental에 추가하고, 기존의 대출아이템 객체는 삭제함.
    2. returnOverdueBook(연체아이템 반납 처리)
      • 이 메서드는 도서 일련번호로 Rental에서 연체아이템(OverdueItem)을 찾아 반납아이템 객체(ReturnedItem)를 만들어 Rental에 추가하고, 기존 연체아이템은 삭제함.
    3. makeRentUnable(대출 불가 처리)
      • 이 메서드는 도서가 연체된 경우 대출을 불가하게 처리함.
      • 대출 가능 여부 상태를 대출 불가로 변경하고, Rental에 연체료 30포인트를 기록함.

서비스 흐름 처리

  • 서비스 구현체에서 도서 연체 및 연체아이템 반납 처리에 대한 유스케이스 구현을 진행함.
    • 도메인 모델에서 정의된 로직을 사용하여 저장소 처리 등의 기능을 구현하는 방법이 나와 있음.
  1. 연체 처리
    1. 사용자의 Rental을 조회함.
    2. 그런 다음 Rental 객체에 도서 연체 처리를 위임함.
    3. 그 후, Rental의 대출 가능 상태를 대출 불가로 설정함.
    4. 이를 리포지토리에 저장함.
  2. 연체아이템 반납 처리
    1. 사용자의 Rental을 조회함.
    2. 그 다음 Rental 엔티티 객체에 연체아이템 반납 처리를 위임함.
    3. 카프카를 사용하여 비동기 메시지 통신을 통해 도서 마이크로서비스와 도서 카탈로그 마이크로서비스의 도서 상태를 대출 가능으로 변경함.
    4. 마지막으로, 변경된 Rental을 리포지토리에 저장함.
  • 이제 모든 내부 영역의 비즈니스 로직이 구현되었으므로, 외부 영역의 REST 컨트롤러에도 연체 처리와 연체아이템 반납 처리에 대한 API를 구현해 제공해야 함.
    • 이 부분은 앞서 구현한 대출 처리와 매우 유사함.

7.1.13 내부 영역 - 도메인 모델 개발: 대출 불가 해제 처리 기능 구현

  • 이 기능은 도서가 연체되어 사용자가 대출 불가 상태로 처리되고, Rental에 연체료 30포인트가 부과될 때 필요함.
    • 사용자는 부과된 연체료를 모두 결제하면 대출 불가 처리가 해제됨.
  • 먼저, Rental 엔티티는 대출 불가 해제의 책임을 가짐.
    • 이 엔티티에는 대출 불가 해제를 처리하는 메서드가 구현되어 있음.
    • 사용자가 연체료를 결제하면 연체료를 0으로 수정하고, 대출 가능 여부를 대출 가능으로 변경함.
  • 그런 다음, 서비스 구현체에서는 도메인 모델에 정의된 메서드를 호출하여 비즈니스 로직의 구현을 완료함.
    • 대출 불가 해제를 위한 메서드는 대출 서비스 구현체에 선언되어 있음.
    • 이 메서드를 사용하면 사용자의 Rental을 조회한 후, Rental의 연체 해제 메서드를 호출하여 처리함.
    • 그 다음에는 대출 리포지토리에 변경된 Rental을 저장함.

7.1.14 외부 영역 - REST 컨트롤러 개발

  • 대출불가 해제 처리는 HTTP 리소스 /rentals/release-overdue/user/{userId}로 정의되며, PUT 방식으로 선언되어 있음.
    • 이 로직은 먼저 포인트 결제를 처리하는 동기 이벤트인 userClient를 호출한 후, 그 결과에 따라 rentalService.releaseOverdue를 호출하여 위임함.
  • REST 컨트롤러에서는 클라이언트로부터 대출불가 해제 처리를 요청받아 처리하는 RentalResource를 제공함.
    • 이때 연체 해제를 위해서는 사용자의 포인트가 필요하며, 연체료만큼의 포인트가 차감되어야 함.
      1. 그래서 먼저 사용자 정보와 연체료 정보를 담을 객체인 LateFeeDTO를 생성함.
      2. 그리고 Rental의 연체료를 조회하여 LatefeeDTO에 넣음.
      3. 그 다음, 동기 호출(Feign)로 사용자 마이크로서비스를 호출하여 해당 연체료만큼 포인트를 차감함
      4. 그리고 결제가 완료된 경우 대출 마이크로서비스를 호출하여 대출불가 해제를 수행함.
  • 사용자 마이크로서비스에서 포인트 차감이 정확히 확인된 후에 대출불가 해제를 하기 위해 동기 호출 방식을 사용함.
    • 이로써 사용자의 포인트가 연체료보다 작아 결제에 실패한 경우에 대비하여 예외 처리를 할 수 있음.
  • 대출 마이크로서비스의 구조에는 이제 연체 처리, 연체아이템 반납 처리, 대출 불가 처리, 대출 불가 해제 처리가 추가되었음.
    • 또한 대출 불가 해제 처리를 위해 추가한 사용자 마이크로서비스 동기 호출용 UserClient도 확인할 수 있음.
  • 프로젝트의 패키지 구조는 내부 영역과 외부 영역이 섞이지 않도록 구성되었으며, 내부 영역을 구성하는 패키지로는 domain, domain.event, repository, service, service.impl이 있고, 외부 영역을 구성하는 패키지로는 adaptor, web.rest, web.rest.dto가 있음.

댓글

Designed by JB FACTORY