이책은 스프링으로 하는 마이크로서비스 구축(스프링 부트와 스프링 클라우드를 이용한 도커/쿠버네티스 마이크로서비스) 책을 읽고 학습한 내용을 정리한 글입니다.
💡리액티브 프로그래밍(Reactive Programming)은 데이터 스트림과 변경 사항에 반응하는 애플리케이션을 구축하는데 사용되는 프로그래밍 패러다임입니다. 이러한 데이터 스트림은 외부 환경과 상호작용하는 애플리케이션에 대한 입력 및 출력을 포함합니다.
@Override
public Mono<Product> getProduct(int productId) {
if (productId < 1) throw new InvalidInputException("Invalid productId: " + productId);
return repository.findByProductId(productId)
.switchIfEmpty(error(new NotFoundException("No product found for productId: " + productId)))
.log()
.map(e -> mapper.entityToApi(e))
.map(e -> {e.setServiceAddress(serviceUtil.getServiceAddress()); return e;});
}
✏️ Mono 객체는 스프링 프레임워크의 리액티브 프로그래밍 모델에서 사용되는 객체입니다."Mono"는 0 또는 1개의 결과물을 반환할 수 있는 리액티브 스트림 객체입니다. 즉, 오직 하나의 결과만을 반환할 수 있습니다.
❓처리에 대한 선언? 트리거? 등의 내용이 생소하다고 느꼈고 해당 내용을 정리했습니다.
이 문장은 리액티브 프로그래밍에서 Publisher가 Subscriber에 데이터를 보내는 방식을 설명합니다.
Publisher는 데이터를 생성하고 처리하는 책임을 가지고 있으며, Subscriber는 Publisher가 생성하는 데이터를 소비합니다. Publisher는 데이터를 처리하는 방법을 정의하고 Subscriber는 Publisher가 보낸 데이터를 수신할 준비가 되어야 합니다.
"처리에 대한 선언을 할뿐 트리거하진 않는다"는 것은 Publisher가 데이터를 생성하고 처리하는 방법을 미리 선언한다는 의미입니다. 이것은 Publisher가 생성하는 데이터가 어떤 방식으로 처리되는지를 알려주는 것입니다. 하지만 이것은 데이터 생성과 전송을 시작하는 것이 아니라, 처리를 위한 방법만을 정의하는 것입니다.
Publisher가 처리 방법을 선언하면 Subscriber는 Publisher가 데이터를 생성하면 수신할 준비를 합니다. 그리고 Publisher는 데이터 생성과 전송을 시작합니다. 이러한 방식으로 Publisher와 Subscriber는 서로 독립적으로 작동하며, Publisher는 Subscriber가 수신할 준비가 되면 데이터를 보내고 Subscriber는 수신된 데이터를 처리합니다.