효율적인 반응형 시스템 만들기
리액티브 코어
- 완전 논-블로킹
- 함수형 인터페이스, CompletableFuture, Stream, Duration과 직접적인 상호작용
[Duration ???]
나 : Reactive Core 에서 duration이 어떤 특징인지 설명해 줘.
GPT-4 :
Reactive Core, 특히 Project Reactor에서 Duration의 사용은 반응형 프로그래밍에서 시간 기반의 연산을 수행할 때 핵심적인 역할을 합니다. Project Reactor는 비동기 데이터 스트림 처리를 위한 Java 라이브러리 중 하나로, Reactor Core는 이 라이브러리의 중심적인 부분입니다. Duration은 이러한 반응형 프로그래밍 패러다임 내에서 다음과 같은 특징을 갖습니다:
- 시간 지연 (Time Delay): Duration을 사용하여 특정 시간만큼의 지연(delay)을 생성할 수 있습니다. 예를 들어, Mono.delay(Duration.ofSeconds(1)) 또는 Flux.delayElements(Duration.ofSeconds(1)) 같은 코드는 각각 1초 후에 데이터를 방출하거나, 스트림 내의 각 요소 사이에 1초의 지연을 추가합니다.
- 타임아웃 (Timeout): Duration은 데이터 스트림의 타임아웃을 설정하는 데 사용됩니다. 이는 특정 시간 동안 데이터가 방출되지 않으면 에러를 발생시키는 데 사용됩니다. 예를 들어, .timeout(Duration.ofMinutes(1))은 1분 동안 어떤 데이터도 수신되지 않으면 타임아웃 에러를 발생시킵니다.
- 주기적인 작업 (Periodic Tasks): 주기적으로 반복되는 작업을 스케줄링하기 위해 Duration을 사용할 수 있습니다. 예를 들어, Flux.interval(Duration.ofSeconds(1))은 1초마다 주기적으로 데이터를 방출하는 Flux를 생성합니다.
- 백프레셔와 윈도우 연산 (Backpressure and Windowing Operations): Duration은 백프레셔 관리 및 윈도우 연산에서도 중요한 역할을 합니다. 예를 들어, 특정 시간 동안 수집된 데이터를 그룹화하여 처리하려는 경우 Duration을 기반으로 윈도우를 생성할 수 있습니다.
- 데이터 흐름의 결합과 조절 (Combining and Throttling Data Flows): 여러 데이터 스트림을 결합하거나, 데이터 흐름의 속도를 조절하는 등의 고급 스트림 조작에 Duration을 사용할 수 있습니다. 예를 들어, throttleFirst나 sample 같은 연산자는 Duration을 사용하여 데이터 스트림의 처리 속도를 조절합니다.
이처럼 Duration은 반응형 프로그래밍에서 시간에 관련된 다양한 연산을 표현하고 제어하는 데 필수적인 역할을 합니다. 이는 비동기 데이터 스트림의 처리를 보다 정밀하고 유연하게 만들어 줍니다.
TYPED [0 | 1 | N] SEQUENCES
Reactor offers two reactive and composable APls, Flux [N] and Mono [0|1], which extensively implement Reactive Extensions.
[0, 1, N] 시퀀스로 분류된다.
리액터는 Reactive Extensions을 광범위하게 구현 Mono(0,1)와 Flux(N sequences)라는 두 개의 반응적(Reacdtive)이고, 조합 가능한 APIs를 제공한다.
NON-BLOCKING IO
마이크로서비스 아키텍처에 매우 적합한 리액터는 HTTP, TCP, UDP를 위한 백프레셔(배압처리)를 지원하는 네트워크 엔진을 제공한다.
지연 시간의 수호자
스케일-아웃은 지연 시간과 느린 마이크로서비스를 극복하기 위한 중요한 도구입니다. 클라우드 네이티브 앱과 서버리스 기능은 비동기 아키텍처를 통해 효과적인 확장 가능성이 더 높습니다. 비동기식 설계를 지원하기 위해 Reactor는 강력한 Netty 프레임워크 를 기반으로 로컬 TCP/HTTP/UDP 클라이언트 및 서버를 포함하여 비차단 및 백프레셔 지원 네트워크 런타임을 제공합니다 .
'프로그래밍 > OOP_Pattern_TDD' 카테고리의 다른 글
기본부터 다시 이해하는 OOP (0) | 2024.04.23 |
---|---|
Mocks Aren't Stubs - Martin Fowler 02 Jan 2007 (0) | 2024.04.01 |
Java로 DSL 개발 #2 (0) | 2023.08.09 |
Java로 DSL(Domain Specific Language) 개발 (0) | 2023.08.09 |
ThreadPool로 초당 API 호출 건수 제한 - ExecutorService (0) | 2023.08.02 |