Open LangVE opened 2 years ago
38페이지 읽고 있습니다. 토요일까지 읽도록 하겠습니다.
1장 다 읽었습니다.
리액티브 스트릠
발행자와 구독자 사이의 간단한 재약을 정의하는 명세
프로젝트 리액터는 VM웨어 에서 만든 리액티브 스트림 구현체다.
리액터를 상ㅇ하면 다음 특성을 따르는 리액티브 프로그래밍을 활용할 수 있게 된다.
Flux
실제 물건을 전달해주는 역할을 하는 프레이스홀더(placeholder)
class KitchenService {
Flux<Dish> getDishes() {
//요리를 담당하는 ChefService를 모델링해서 요리를 위임할 수도 있지만
// 단순하게 설명하기 위해 그냥 하드 코딩으로 대체한다.
return Flux.just(
new Dish("Sesame chicken"),
new Dish("Lo mein noodles, plain"),
new Dish("Sweat & sour beef")
);
}
}
스타터는 핵심 라이브러리를 가져온다.
스프링 부트 애플리케이션의 설정 내용을 분석해서 발견되는 정보에 맞게 다양한 빈을 자동으로 활성화
WebFluxAutoconfiguration 빈은 다음 조건이 충족될 때만 활성화
@RestController
public class ServerController {
private final KitchenService kitchen;
public ServerController(KitchenService kitchen) {
this.kitchen = kitchen;
}
@GetMapping(value = "/server", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
Flux<Dish> serveDishes() {
return this.kitchen.getDishes();
}
}
@Service
public class KitchenService {
/**
* 요리 스트림 생성
*/
FLux<Dish> getDishes() {
return Flux.<Dish> generate(sink -> sink.next(randomDish()))
.delayElements(Duration.ofMillis(250));
}
private Dish randomDish() {
return menu.get(picker.nextInt(menu.size()));
}
private List<Dish> menu = Arrays.asList(
new Dish("Sesame chicken"),
new Dish("Lo mein noodles, plain"),
new Dish("Sweet * sour beef"));
private Random picker = new Random();
}
class Dish {
private String description;
private boolean delivered = false;
public static Dish deliver(Dish dish) {
Dish deliveredDish = new Dish(dish.description);
deliveredDish.delivered = true;
return deliveredDish;
}
Dish(String description) {
this.description = description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean is Delivered() {
return delivered;
}
@Override
public Stirng toString() {
return "Dish {" +
"description='"+description+"'" +
", delivered=" + delivered +
"}";
}
}
@GetMapping(value = "/served-dishes" produces = MediaType.TEXT_EVENT_STREAM_VALUE)
Flux<Dish> deliverDished() {
retirm this.kitchen.getDishes()
.map(dish -> Dish.deliver(dish));
}
@Controller
public class HomeController {
@GetMapping
Mono<Stirng> home() {
return Mono.just("home");
}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hacking with Spring Boot - Getting Started</title>
</head>
<body>
<h1>Welcome to Hacking with Spring Boot</h1>
<p>
Over the span of this book, you'll build different parts of an e-commerce system
which will include fleshing out this web template with dynamic content, using the
power of "Spring Boot"
</p>
</body>
</html>
스터디 1회차