SpringWebflux 학습내용 정리 (1)

Kevin의 알기 쉬운 Spring Reactive Web Applications 정리

리액티브 프로그래밍과 리액티브 시스템에 관한 개념을 정리

리액티브 시스템

사용자의 요청/이벤트에 대하여 반응성이 높은 시스템

  • 가능한한 즉각적으로 반응할 때 응답성이 높다고 한다.
  • 회복성은 시스템이 장애에 직면했을 때 반응을 한다면 회복성이 있다고 한다.
  • 탄력성이 있어야 한다(가용성)
  • 느슨한 결합과 격리를 통해 메시지 기반 시스템이 되어야 한다.
  • 리액티브 선언문을 통해 리액티브 시스템 설계원칙과 용어 개념을 정확히 알 필요가 있다.

리액티브 시스템의 특징

리액티브 선언문의 설계원칙 4가지 준수

  • 높은 응답성
  • 탄력성
  • 유연성(회복성)
  • 메시지 기반으로 동작
  • 리액티브 프로그래밍
  • 리액티브 시스템을 구축하는데 필요한 프로그래밍 모델

리액티브 프로그래밍의 특징

  • 데이터 소스에 변경이 있을 때마다 데이터를 전파 (pub/sub)
  • 선언형 프로그래밍 패러다임 추구
  • 실행할 동작을 구체적으로 명시하지 않고 목표만 정의함
  • 함수형 프로그래밍 기법 사용

명령형 프로그래밍의 예시

List<Integer> numbers = Arrays.asList(1,3,21,10,8,11);
int sum = 0;

for(int number: numbers){
    if(number > 6 && (number%2 != 0)){
        sum += number;
    }
}

선언형 프로그래밍의 예시

List<Integer> numbers = Arrays.asList(1,3,21,10,8,11);

int sum = numbers.stream()
    .filter(number -> number > 6 && (number % 2 != 0))
    .mapToInt(number -> number)
    .sum();

리액티브 스트림즈란?

리액티브 프로그래밍을 표준화 한 명세

4가지 인터페이스

  • Publisher(데이터 통제하는 주체)
  • Subscripber(퍼블리셔가 통제한 데이터를 구독)
  • Subscription(구독 자체를 정의한 인터페이스)
  • Processor(Pub/Sub 역할을 모두 수행할 수 있는 인터페이스)

Reactive Sterams를 구현한 구현체

  • RxJava
  • Java 9 Flow API
  • Akka Streams
  • Reactor -> 주요 학습 구현체
  • RxJs, RxScala, RxAndroid 등등..

© 2019. All rights reserved.

Powered by Hydejack v8.1.1