Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
패스트캠퍼스 환급챌린지 11일차 미션 (2월 11일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기 본문
패스트캠퍼스
패스트캠퍼스 환급챌린지 11일차 미션 (2월 11일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기
slow-walker 2024. 2. 11. 21:21
1. RxJava
- Netflix 사에서 개발
- 닷넷 프레임워크를 지원하는 Reactive Extensions를 포팅
- Flowable, Observable, Single, Maybe, Completable, publisher 제공
![](https://blog.kakaocdn.net/dn/QyksK/btsEHn9whM4/pkP8NDgOQsBVcYap2i19e0/img.png)
2. RxJava - Flowable
- 0..n개의 item을 전달
- 에러가 발생하면 error signal 전달 하고 종료
- 모든 item을 전달했다면 complete signal 전달하고 종료
- backPressure 지원
- Reactor의 Flux와 유사
3. Flowable - backPressure
4. RxJava - Observable
- 0..n개의 item을 전달
- 에러가 발생하면 error signal 전달 하고 종료
- 모든 item을 전달했다면
- complete signal 전달하고 종료
- backPressure 지원 X
Observable | Flowable |
Push 기반 | Pull 기반 |
Subscriber가 처리할 수 없더라도 item 전달 | Subscriber가 request의 수를 조절 |
Reactive manifesto의 message driven을 일부만 준수 | Reactive manifesto의 messagedriven을 모두 준수 |
onSubscribe로 Disposable 전달 | onSubscribe시 Subscription 전달 |
이제부터는 앞서 만들었던 SimplerSubscriber를 사용할 수 없다. 별도의 인터페이스가 있기 때문에 Observer와 SimplerObserver를 만들었다.
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SimpleObserver implements Observer {
private Disposable disposable;
@Override
public void onSubscribe(@NonNull Disposable d) {
log.info("subscribe");
this.disposable = d;
}
@Override
public void onNext(@NonNull Object o) {
log.info("item: {}", o);
}
@Override
public void onError(@NonNull Throwable e) {
log.error("error: {}", e.getMessage());
}
@Override
public void onComplete() {
log.info("complete");
}
}
5. RxJava - Single
- 1개의 item을 전달 후 바로 onComplete signal 전달
- 1개의 item이 없다면 onError signal 전달
- 에러가 발생했다면 onError signal 전달
6. Single - success
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.SingleObserver;
import io.reactivex.rxjava3.disposables.Disposable;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SimpleSingleObserver<T> implements SingleObserver<T> {
private Disposable disposable;
@Override
public void onSubscribe(@NonNull Disposable d) {
this.disposable = d;
log.info("subscribe");
}
@Override
public void onSuccess(@NonNull Object o) {
log.info("item: {}", o);
}
@Override
public void onError(@NonNull Throwable e) {
log.error("error: {}", e.getMessage());
}
}
7. RxJava - Maybe
- 1개의 item을 전달 후 바로 onComplete signal 전달
- 1개의 item이 없어도 onComplete signal 전달 가능
- 에러가 발생했다면 onError signal 전달
- Reactor의 Mono와 유사
8. RxJava - Completable
- onComplete 혹은 onError signal만 전달
- 값이 아닌 사건을 전달
9. Publsiher 총 정리
onSubscribe | onNext | onComplete | onError | |
Flowable | backPressure, cancelation 지원 |
0..n | 언제든지 가능 | 언제든지 가능 |
Observable | cancelation 지원 | 0..n | 언제든지 가능 | 언제든지 가능 |
Single | cancelation 지원 | 1 | onNext 이후 바로 | 언제든지 가능 |
Maybe | cancelation 지원 | 0..1 | 언제든지 가능 onNext 이후 바로 |
언제든지 가능 |
Completale | cancelation 지원 | 0 | 언제든지 가능 | 언제든지 가능 |
10. Mutiny
- Hibernate reactive에서 비동기 라이브러리로 제공
- Multi, Uni publisher 제공
11. Mutiny - Multi
- 0..n개의 item을 전달
- 에러가 발생하면 error signal 전달하고 종료
- 모든 item을 전달했다면
- complete signal 전달하고 종료
- backPressure 지원
- Reactor의 flux와 유사
12. Mutiny - Uni
- 0..1개의 item을 전달
- 에러가 발생하면 error signal 전달하고 종료
- 모든 item을 전달했다면 complete signal 전달하고 종료
- Reactor의 Mono와 유사
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. https://bit.ly/48sS29N