요약
- 7장. 사례연구 - 백엔드 마이크로서비스 구현에 대한 내용
- 사용자 마이크로서비스 - 포인트 관리 기능 구현 (나머지 부분)
- 8장. CQRS 패턴을 활용한 백엔드 마이크로서비스 개발
- 도서 마이크로서비스 개발
- 구현 기능 소개
- 내부 아키텍처 결정
- API 설계
메모
7.3.3 포인트 적립, 결제 기능에 대한 호출 구현
- 포인트 적립은 대출 마이크로서비스가 사용자 마이크로서비스에 메시지를 보내면 이루어짐.
- 이를 위해 사용자 마이크로서비스는 컨슈머 어댑터
GatewayConsumer
를 통해 포인트 적립 이벤트 메시지에 반응함.
- 컨슈머 어댑터는 대출 서비스가 전송한
SavePointEvent
적립 이벤트를 수신하여 userService.savePoint
를 호출하고, 사용자 정보와 적립할 포인트 정보를 전달함.
- 사용자를 조회한 후 포인트를 적립하고, 변경된 사용자 정보를 저장함.
- 포인트 결제는 대출 마이크로서비스의 직접적인 동기 호출에 의해 이루어짐.
- 포인트 결제 API는
"/users/latefee"
를 통해 접근하며, 이 API는 LatefeeDTO
를 입력으로 받아 userService.usePoints
를 호출함.
- 이 메서드는 전달받은 사용자 정보를 통해 사용자를 조회하고, 사용자 도메인 내부의
usePoints
를 호출하여 포인트를 결제함.
- 포인트 결제가 성공하면 변경된 사용자 정보를 저장함.
- 포인트 적립과 결제 요청은 각각 비동기 요청과 동기 요청으로 처리되며, 각각의 요청이 서비스 구현체를 다른 방식으로 호출한다는 점에 주목해야 함.
- 이러한 구현은 대출 마이크로서비스와 유사한 구조를 가지지만, 외부 영역과 내부 영역을 연결하는 서비스 인터페이스가 없다는 점이 다름.
- 사용자 마이크로서비스는 일부 기능만 수정하였으며, 아키텍처를 철저히 리팩터링하지는 않음.
7.4 정리
- 도서대출시스템의 핵심 기능인
대출 마이크로서비스
와 사용자 마이크로서비스의 주요 기능 구현
에 대해 살펴봄.
- 처음으로, 비즈니스 개념을 명확하게 이해하기 위해 도메인 모델링을 수행함.
- 이 도메인 모델링의 결과를 바탕으로, 비즈니스 로직을 도메인 모델에 반영하고, 해당 도메인 모델을 사용해 유스케이스를 실현하는 서비스 구현체를 만듦.
- 이후, 이 내부 영역의 비즈니스 로직을 활용해 외부 영역의 어댑터를 구현하고, 이를 통해 API를 제공하거나 다른 서비스와 통신하는 방법에 대해 알아봄.
- 이 과정에서 동기/비동기 통신 메커니즘을 살펴봄.
8장. CQRS 패턴을 활용한 백엔드 마이크로서비스 개발
- 대출 가능한 기본 도서 정보를 관리하는 도서 마이크로서비스와 사용자가 빠르게 검색할 수 있도록 만든 도서 카탈로그 마이크로서비스의 분리했음.
- 이 두 서비스를 분리함으로써 CQRS(Command Query Responsibility Segregation) 패턴을 적용하게 됨.
- 이 패턴은 읽기 작업과 쓰기 작업을 분리함으로써 서비스의 성능과 유연성을 향상시키는 것을 목표로 함.
- 도서 마이크로서비스는 H2 메모리 DB를 사용하며, 읽기 전용 서비스인 도서 카탈로그 마이크로서비스는 읽기에 최적화된 MongoDB를 사용함.
- 도서 마이크로서비스에서 도서 정보가 변경되면, 변경사항을 도서 카탈로그 서비스에 반영해야 함.
- 이를 위해 도서 마이크로서비스에서는 변경사항을 저장한 후, 도서 정보 변경 이벤트를 발행하게 됨.
- 이 이벤트는 도서 카탈로그 서비스에서 수신하여 도서 정보의 변경사항을 반영함.
- 이 방식으로 도서 정보의 일관성을 유지함.
8.1 도서 마이크로서비스 개발
8.1.1 구현 기능 소개
- 도서 마이크로서비스는 도서 관리를 위한 기본 기능들을 제공하며, 주요 기능은 다음과 같음.
- 입고도서 등록
- 도서가 기증되거나 도서제공업체에 의해 제공될 때 등록되는 과정.
- 재고도서 등록
- 입고된 도서를 대출 가능한 상태로 변경하고 등록하는 과정.
- 이 과정에서 도서의 분류 등 추가 정보를 입력하고, 등록이 완료되면 이 정보가 도서 카탈로그 서비스에서 조회 및 검색될 수 있도록 등록 이벤트를 전송함.
- 재고도서 변경
- 도서가 대출 서비스에서 대출 또는 반납될 때, 그 상태가 변경되는 과정.
- 도서의 상태는 대출 가능 또는 대출 불가능으로 변경됨.
8.1.2 내부 아키텍처 결정
- 대출 서비스와 동일함.
- 도메인 모델 기반 헥사고날 아키텍처 구조임.
- Spring Data 사용.
- 대출 서비스와 연계하기 위해 카프카 비동기 통신 메커니즘 사용.
8.1.3 API 설계
- 세 가지 주요 API임
- 재고도서정보 조회 API
- 이 API는 도서 일련번호를 입력받아 해당 도서의 정보를 반환.
- 입고도서 등록 API
- 이 API는 출판사로부터 입고되는 도서 정보를 도서대출시스템에 등록하기 위해 사용.
- 재고도서 등록 API
- 이 API는 입고된 도서를 신규 도서로 등록하는데 사용.
댓글