반응형

리액티브 스트림즈는 비동기적이고 Non-Blocking 방식의 데이터 처리를 위한 표준입니다. 이 글에서는 리액티브 스트림즈의 주요 컴포넌트 구현과 Apache Kafka와의 차이점을 살펴보겠습니다.
리액티브 스트림즈 주요 컴포넌트
- Publisher
public class MyPublisher implements Publisher<String> {
private final List<Subscriber<? super String>> subscribers = new ArrayList<>();
@Override
public void subscribe(Subscriber<? super String> subscriber) {
subscribers.add(subscriber);
subscriber.onSubscribe(new MySubscription(subscriber));
}
public void publish(String data) {
for (Subscriber<? super String> subscriber : subscribers) {
subscriber.onNext(data);
}
}
// ... MySubscription 클래스 구현
}
- Subscriber
public class MySubscriber implements Subscriber<String> {
@Override
public void onSubscribe(Subscription subscription) {
System.out.println("구독이 시작되었습니다.");
subscription.request(1);
}
@Override
public void onNext(String data) {
System.out.println("받은 데이터: " + data);
}
@Override
public void onError(Throwable t) {
System.err.println("오류 발생: " + t.getMessage());
}
@Override
public void onComplete() {
System.out.println("모든 데이터 전송이 완료되었습니다.");
}
}
- Subscription
public class MySubscription implements Subscription {
private final Subscriber<? super String> subscriber;
MySubscription(Subscriber<? super String> subscriber) {
this.subscriber = subscriber;
}
@Override
public void request(long n) {
// 요청할 데이터 개수 처리
}
@Override
public void cancel() {
System.out.println("구독이 취소되었습니다.");
}
}
- Processor
public class MyProcessor implements Processor<String, String> {
private Subscriber<? super String> subscriber;
@Override
public void subscribe(Subscriber<? super String> subscriber) {
this.subscriber = subscriber;
}
@Override
public void onNext(String data) {
String processedData = data.toUpperCase();
subscriber.onNext(processedData);
}
// ... 기타 메서드 구현
}
리액티브 스트림즈와 Apache Kafka 비교
- 데이터 흐름 vs 메시지 중개:
- 리액티브 스트림즈: 데이터 흐름 중심, 이벤트 기반 반응성
- Kafka: 메시지 브로커 기반, Topic을 통한 메시지 전달
- 구독 모델 vs Topic 기반:
- 리액티브 스트림즈: Subscriber가 데이터 요청
- Kafka: Topic 기반 메시지 분산 처리
- 데이터 지속성:
- 리액티브 스트림즈: 메모리 기반 처리
- Kafka: 디스크에 메시지 저장, 높은 내구성
- 확장성:
- 리액티브 스트림즈: 단일 애플리케이션 내 확장
- Kafka: 분산 시스템으로 대규모 확장 가능
결론
리액티브 스트림즈는 애플리케이션 내 비동기 데이터 처리에 적합하며, Kafka는 대규모 분산 메시징 시스템에 적합합니다. 프로젝트의 요구사항에 따라 적절한 기술을 선택하는 것이 중요합니다.
[WebFlux] 리액티브 스트림즈 컴포넌트 코드
Publisher 인터페이스 정의: Publisher는 구독자를 등록하고, 구독 정보를 관리하는 인터페이스입니다. s...
blog.naver.com
[WebFlux 심층 분석] 리액티브 스트림즈의 핵심 개념과 구현 전략
리액티브 스트림즈(Reactive Streams)는 비동기적이고 Non-Blocking 방식으로 데이터 스트림을 처리하기 위한 표준입니다. 이 표준은 데이터 전송의 효율성을 높이고, 시스템 간의 느슨한 결합을 유지하
hoosfa.tistory.com
반응형
'IT기술 > webflux (reactor)' 카테고리의 다른 글
| Spring WebFlux와 리액티브 프로그래밍의 기초: 함수형 인터페이스부터 함수 디스크립터까지 (2) | 2025.03.26 |
|---|---|
| 리액티브 스트림즈(Reactive Streams) 핵심 정리 (1) | 2025.03.23 |
| Blocking I/O와 Non-Blocking I/O: 개념과 WebFlux에서의 활용 (0) | 2025.03.23 |
| [WebFlux 심층 분석] 리액티브 스트림즈의 핵심 개념과 구현 전략 (0) | 2025.03.20 |
| [WebFlux 완전 정복] 리액티브 시스템과 리액티브 프로그래밍의 핵심 개념 및 구현 전략 (0) | 2025.03.19 |