Webflux๋ฅผ ์ฌ์ฉํ ๋๋ง๋ค flatMap๊ณผ map์ด ํญ์ ํท๊ฐ๋ฆฌ๋ฏ๋ก ์ ๋ฆฌ.
๋ ๋ฉ์๋๋ Reactive Stream API ์ผ๋ถ๋ก Reactor ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Mono์ Flux์์ ์ฌ์ฉ๋๋ฉฐ ๋น๋๊ธฐ ์คํธ๋ฆผ ์ฒ๋ฆฌ ์ญํ ์ ์ํํ๋ค.
๋จ, flatMap์ด ๋น๋๊ธฐ ์์ ์ ๋ ์ ํฉ !
flatMap()
์ ๋ ฅ ์คํธ๋ฆผ์ ๊ฐ ์์์ ๋ํด ๋น๋๊ธฐ์ ์ผ๋ก ํจ์๋ฅผ ์ ์ฉ ๐ 1:N ๋ณํ
- ์๋ณธ ์์๋ฅผ ๋ณํํ์ฌ ์๋ก์ด Mono ๋๋ Flux ๋ฐํ
- ๋ฐํ๋ ์คํธ๋ฆผ์ flatten(ํํํ)๋์ด ๋จ์ผ Mono ๋๋ Flux๋ก ํฉ์ณ์ง
@GetMapping("/user/{id}")
public Mono<User> getUser(@PathVariable String id) {
return userRepository.findById(id) // returns Mono<User>
.flatMap(user -> {
return Mono.just(user)
.map(User::getName)
.flatMap(name -> someOtherService.process(name));
});
}
๐ ๋น๋๊ธฐ ์์ ์ ์ํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ด์ด๋ฐ์์ผํ ๋ ์ ์ฉ
- userRespository.findById(id) ๐ ๋น๋๊ธฐ์ ์ผ๋ก ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ ธ์ด
- someOtherService.process(name) ๐ ๋น๋๊ธฐ์ ์ผ๋ก ๋ค๋ฅธ ์์ ์ํ
map()
์ ๋ ฅ ์คํธ๋ฆผ์ ๊ฐ ์์์ ๋ํด ๋๊ธฐ์ ์ผ๋ก ํจ์๋ฅผ ์ ์ฉ ๐ 1:1 ๋ณํ
- ์๋ณธ ์์ ๋ณํํ์ฌ ์๋ก์ด Mono ๋๋ Flux ๋ฐํ
- blocking ์์ ์์ด ๊ฐ๋จํ ๋ณํ ์ ์ฌ์ฉ ๐ ๋จ์ ๋ณํ ์์
@GetMapping("/hello")
public Mono<String> hello() {
return Mono.just("hello")
.map(value -> value.toUpperCase());
}
์ฐธ๊ณ ์๋ฃ
https://www.baeldung.com/java-reactor-map-flatmap
https://luvstudy.tistory.com/95
'Spring > Spring WebFlux' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๐ Reactive] 1. Reactive ์์คํ ๊ณผ Reactive ํ๋ก๊ทธ๋๋ฐ (0) | 2024.12.16 |
---|---|
[WebFlux] Reactor ์ฐ์ฐ์ ์ ๋ฆฌ (0) | 2024.07.17 |
[WebFlux] Reactive Streams (0) | 2024.07.03 |
[WebFlux] ๋น๋๊ธฐ/๋๊ธฐ, non-blocking/blocking, CompletableFuture (0) | 2024.07.03 |
[WebFlux] Spring WebFlux๋? (0) | 2024.01.13 |