스프링부트 실전 활용 마스터 (1)

이동욱

2022/05/11

리액터 타입


class KitchenService {
    Flux<Dish> getDishes() {
        return Flux.just(
            new Dish("Sesame chicken:),
            new Dish("Lo mein noodles, planin"),
            new Dish("Sweet & sour beef"));
        )
    }
}

Future는 제공하지 않지만, Flux 에서는 제공해주는 특징


- 하나 이상의 `Dish` 포함 가능
- 각 `Dish`가 제공될 때 어떤 일이 발생하는지 지정 가능
- 성공과 실패의 두 가지 경로 모두에 대한 처리 방향 정의 가능
- 결과 폴링 불필요
- 함수형 프로그래밍 지원
class SimpleServer {
    private final KitchenService kitchen;

    SimpleServer(KitchenService kitchen) {
        this.kitchen = kitchen;
    }

    Flux<Dish> doingMyJob() {
        return this.kitchen.getDishes()
            .map(dish -> Dish.deliver(dish));
    }
}
class PoliteServer {
    private final KitchenService kitchen;

    public PoliteServer(KitchenService kitchen) {
        this.kitchen = kitchen;
    }

    Flux<Dish> dongMyJob() {
        return this.kitchen.getDishes()
            .doOnNext(dish -> System.out.println("thank you for " + dish + "!"))
            .doOnError(error -> System.out.println("so sorry about" + error.getMessage()))
            .doOnComplete(() -> System.out.println("thanks for all your hard work!"))
            .map(Dish::deliver);
    }
}

Mono


참고 문헌


>> Home