SpringWebflux 학습내용 정리 (1)
in Study
리액티브 프로그래밍과 리액티브 시스템에 관한 개념을 정리
리액티브 시스템
사용자의 요청/이벤트에 대하여 반응성이 높은 시스템
- 가능한한 즉각적으로 반응할 때 응답성이 높다고 한다.
- 회복성은 시스템이 장애에 직면했을 때 반응을 한다면 회복성이 있다고 한다.
- 탄력성이 있어야 한다(가용성)
- 느슨한 결합과 격리를 통해 메시지 기반 시스템이 되어야 한다.
- 리액티브 선언문을 통해 리액티브 시스템 설계원칙과 용어 개념을 정확히 알 필요가 있다.
리액티브 시스템의 특징
리액티브 선언문의 설계원칙 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 등등..