개발자는 기록이 답이다

패스트캠퍼스 환급챌린지 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 제공

2. RxJava - Flowable

  • 0..n개의 item을 전달
  • 에러가 발생하면 error signal 전달 하고 종료
  • 모든 item을 전달했다면 complete signal 전달하고 종료
  • backPressure 지원
  • ReactorFlux와 유사

 

 

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 전달
  • ReactorMono와 유사

 

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 지원
  • Reactorflux와 유사

 

12. Mutiny - Uni

  • 0..1개의 item을 전달
  • 에러가 발생하면 error signal 전달하고 종료
  • 모든 item을 전달했다면 complete signal 전달하고 종료
  • ReactorMono와 유사

 


 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. https://bit.ly/48sS29N