
리액터(Reactors), 코틀린 플로우(Kotlin Flow), 서스펜드(Suspend), 웹플러스 리액터(WebFlux Reactor) 개조 과정과 리액티브 스트림 및 RX 계열의 기본 개념, 리액터 기초 사용법에 대해 포스팅을 하게되었습니다.
리액터는 자바와 리액티브 프로그래밍을 위한 프로젝트로, 비동기 및 논블로킹을 지원합니다.
리액터의 기본 구성 요소는 Mono와 Flux입니다.
1. 의존성 추가: Maven 또는 Gradle에 리액터 의존성을 추가합니다.
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.4.0</version>
</dependency>
2. 리액티브 스트림 생성: Mono 및 Flux 객체를 생성하여 데이터를 방출합니다.
Mono<String> mono = Mono.just("Hello, Reactor!");
Flux<String> flux = Flux.just("Item 1", "Item 2", "Item 3");
3. 연산자 사용: 데이터 흐름을 처리하기 위해 다양한 연산자를 사용할 수 있습니다.
예를 들어, map, flatMap, filter 등을 사용하여 데이터를 변형할 수 있습니다.
flux.map(String::toUpperCase).subscribe(System.out::println);
코틀린 플로우는 코틀린의 리액티브 스트림 구현체로, 비동기 데이터 흐름을 처리하는 데 적합합니다.
1. 의존성 추가: Gradle에 코틀린 플로우 의존성을 추가합니다.
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
2. 플로우 생성: 플로우를 생성하고 데이터를 방출합니다.
fun simpleFlow(): Flow<Int> = flow {
for (i in 1..3) {
delay(1000) // 비동기 대기
emit(i) // 데이터 방출
}
}
3. 플로우 수집: collect 함수를 사용하여 플로우에서 데이터를 수집합니다.
runBlocking {
simpleFlow().collect { value -> println(value) }
}
서스펜드 함수는 비동기 작업을 수행할 수 있는 함수입니다.
코틀린의 코루틴을 사용하여 구현됩니다.
1. 서스펜드 함수 정의: suspend 키워드를 사용하여 서스펜드 함수를 정의합니다.
suspend fun fetchData(): String {
delay(1000)
return "Data fetched"
}
2. 서스펜드 함수 호출: 코루틴 내에서 서스펜드 함수를 호출합니다.
runBlocking {
val data = fetchData()
println(data)
}
Spring WebFlux는 리액티브 프로그래밍 모델을 사용하여 비동기 웹 애플리케이션을 개발하는 데 사용됩니다.
1. 의존성 추가: Spring WebFlux 의존성을 추가합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
2. 리액티브 컨트롤러 생성: 리액티브 컨트롤러를 생성하고 Mono 또는 Flux를 반환합니다.
@RestController
public class MyController {
@GetMapping("/data")
public Mono<String> getData() {
return Mono.just("Hello, WebFlux!");
}
}
리액티브 스트림은 비동기 데이터 흐름을 처리하기 위한 표준 API입니다.
주요 구성 요소는 다음과 같습니다
RX 계열은 리액티브 프로그래밍을 위한 라이브러리로, 다양한 언어에 구현되어 있습니다.
RX의 주요 개념은 다음과 같습니다
리액터를 사용하기 위한 기본 사용법은 다음과 같습니다
Flux<Integer> numbers = Flux.just(1, 2, 3, 4, 5);
numbers
.map(n -> n * 2)
.filter(n -> n > 5)
.subscribe(System.out::println); // 출력: 6, 8, 10
이와 같은 방식으로 리액터와 관련된 다양한 기능을 활용할 수 있습니다.