HttpOrderClient의 dummy uri는 오직 하나의 유형의 Order객체만 반환합니다.OrderStorageClient의 uri는 작동하지 않습니다.- Mac환경에서 Embedded Redis를 사용하여 Windows환경에서는 동작하지 않을 수 있습니다.
- MacOS Sequoia
- SpringBoot 3.2.1
- Spring Data Redis
- Embedded Redis
- lombok
- openFeign
- 주문데이터를 가져오기 위해
GET /order요청을 합니다. HttpOrderClient.fetchOrderData()를 통해 외부 시스템에서 주문데이터를 가져옵니다.- 가져온 주문데이터를 Redis에 저장합니다.
OrderRepository.save() - 외부 시스템으로 주문데이터를 전송한다.
ExtenralOrderStorageService.sendOrderData()
- 특정 주문ID를 통해 주문데이터를 조회합니다.
GET /order/{orderId} - Redis에서 주문ID를 통해 주문정보를 조회합니다.
OrderRepository.findById() - 조회된 주문데이터를 반환합니다.
- 저장된 주문데이터 Redis에서 전부 꺼내어 리스트를 반환합니다.
GET /orders - Redis에 저장된 주문데이터를 전부 조회합니다.
OrderRepository.findAll() - 조회된 주문데이터 리스트를 반환합니다.
- 외부 시스템으로부터 주문데이터를 가져와 시스템에 저장하는 기능
=>openFeign을 사용하여 외부 시스템으로부터 주문데이터를 가져옵니다.HttpOrderClient.fetchOrderData() - 주문데이터
public class Order {
private String orderId;
private String customerName;
private LocalDate orderDate;
private OrderStatus orderStatus;
}주문상태는 enum을 사옹하여 처리중, 배송중, 배송완료, 취소됨 으로 구분합니다.
- feignclient를 사용하여 외부 시스템과 통신합니다.
- 주문데이터를 외부 시스템으로 전송합니다.
HttpOrderClient.sendOrderData()
- 받아온 데이터는 Redis에 저장합니다.
OrderRepository.save() - Redis에서 주문ID를 통해 주문정보를 조회합니다.
OrderRepository.findById() - 저장된 주문데이터 Redis에서 전부 꺼내어 리스트를 반환합니다.
GET /orders
- 외부 시스템과의 통신을 위한 인터페이스를 설계합니다.
HttpOrderClient - 통신과 데이터 변환은 feign에 의해 처리되며, 별도 혹은 추가로 처리해야할 부분은
FeignConfig에 정의할 수 있습니다.
- 외부 시스템과의 통신이 실패할 경우, 에러를 처리합니다. (
FeignErrorDecoder) - 내부적으로 CustomException을 사용해 Exception의 가독성을 높입니다.
HttpOrderCleient,OrderStorageClient와같이 외부 시스템과의 통신을 위한 인터페이스를 정의하여 확장성을 고려합니다.ExternalOrderService는 인터페이스로ExternalOrderStorageService와HttpExternalOrderService를 구현하여 확장성을 고려합니다.
