Reactor, Spring WebFlux์ ๊ธฐ์ด ๊ฐ๋ ์ ๊ผผ๊ผผํ๊ฒ ๋ค์ง๊ณ ์ "์คํ๋ง์ผ๋ก ์์ํ๋ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ" ์ฑ ์ ์ ๋ ํ๊ณ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
1. ๋ฆฌ์กํฐ๋ธ ์์คํ ์ด๋?
๋ฆฌ์กํฐ๋ธ ์์คํ = ๋ฐ์์ ์ํ๋ ์์คํ
๐ ๋น๋๊ธฐ ๋ฉ์์ง ๊ธฐ๋ฐ์ ํต์ ์ ๊ธฐ๋ฐ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฆ๊ฐ์ ์ผ๋ก ์๋ตํจ์ผ๋ก์จ ์ง์ฐ ์๊ฐ์ ์ต์ํํ๋ ๊ฒ์ ์๋ฏธ
โณ๏ธ ํน์ง
- ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ
- ์คํํ ๋์์ ๊ตฌ์ฒด์ ์ผ๋ก ๋ช ์ํ์ง ์๊ณ , ๋ชฉํ๋ง ์ ์ธ
- ์ฌ๋ฌ ๊ฐ์ง ๋์์ ๊ฐ๊ฐ ๋ณ๋์ ์ฝ๋๋ก ๋ถ๋ฆฌํ์ง ์๊ณ , ๊ฐ ๋์์ ๋ํด์ ๋ฉ์๋ ์ฒด์ธ์ ํ์ฑํด ํ ๋ฌธ์ฅ์ผ๋ก ๋ ์ฝ๋๋ก ๊ตฌ์ฑ
- Data streams์ propagation of change
- ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ ๋๋ง๋ค ์ด๊ฒ์ ๋ณํํ๋ ์ด๋ฒคํธ๋ก ๋ด
- ์ด๋ฒคํธ๋ฅผ ๋ฐ์ํค๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๊ณ์์ ์ผ๋ก ์ ๋ฌ
๐ท ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ
public class Example1_1 {
public static void main(String[] args){
List<Integer> numbers = Arrays.asList(1, 3, 21, 10, 8, 11);
int sum = 0;
for(int number : numbers){
if(number > 6 && (number % 2 != 0 )) {
sum += number;
}
}
System.out.println("ํฉ๊ณ : " + sum);
}
}
๐ท ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ
public class Example1_2 {
public static void main(String[] args){
List<Integer> numbers = Arrays.asList(1, 3, 21, 10, 8, 11);
int sum = numbers.stream()
.filter(number -> number > 6 && (number % 2 != 0))
.mapToInt(number -> number)
.sum();
System.out.println("ํฉ๊ณ : " + sum);
}
}
2. ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ ์ฝ๋ ๊ตฌ์ฑ
โณ๏ธ publisher
- ์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ์ญํ
โณ๏ธ subscriber
- publisher๊ฐ ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์์ ์ฌ์ฉํ๋ ์ฃผ์ฒด
โณ๏ธ data source (data stream)
- publisher์ ์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ
- ex) IoT ๋๋ฐ์ด์ค ์ผ์๋ก๋ถํฐ ์ธก์ ๋ ๋ฐ์ดํฐ (์ฐ์์ ์ผ๋ก ๋์์์ด ๋ฐ์)
โณ๏ธ operator
- publisher์ subscriber ์ค๊ฐ์์ ๋ฐ์ดํฐ ๊ฐ๊ณต ์ฒ๋ฆฌ
'Spring > Spring WebFlux' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๐ Reactive] 3. Blocking I/O์ Non-Blocking I/O (0) | 2024.12.17 |
---|---|
[๐ Reactive] 2. Reactive Streams (0) | 2024.12.16 |
[WebFlux] Reactor ์ฐ์ฐ์ ์ ๋ฆฌ (0) | 2024.07.17 |
[WebFlux] flatMap๊ณผ map์ ์ฐจ์ด (0) | 2024.07.17 |
[WebFlux] Reactive Streams (0) | 2024.07.03 |