Reactive System 설계 원칙
아래 네가지 원칙을 잘 반영한 시스템
Responsive : 응답성 즉각적인 응답
Resilient : 회복성 장애시 회복성
Elastic : 탄력성 작업량 변화에도 응답성을 유지하는 것
Message Driven : 비동기(async) 메시지 주고받아 느슨한 결합(loose coupling), 위치 투명성(location transparency) 보장
Reactive programming 특징
1) 데이터 소스에 변경이 있을때마다 데이터를 전파 - publisher 데이터 전파, subscriber 전파된 데이터를 받아서 처리
2) 선언형 프로그래밍 패러다임 : 실행할 동작을 구체적으로 명시하지 않고 목표만 정의
3) 함수형 프로그래밍 기법 사용
명령형 프로그래밍 vs 선언형 프로그래밍
명령형 프로그래밍
List<Integer> numbers = Arrays.asList(1,3,21,10,8);
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);
int sum = numbers.stream()
.filter(number -> number > 6 && number%2!=0)
.mapToInt(number -> number)
.sum();
Reactive Streams 란?
리액티브 프로그래밍을 표준화 한 명세
https://github.com/reactive-streams/reactive-streams-jvm/blob/v1.0.3/README.md#specification
reactive streams 4가지 인터페이스
1) Publisher : 데이터 통제
2) Subscriber : 퍼블리셔가 통제한 데이터를 구독하는 구독자
3) Subscription : 구독 자체를 정의
4) Process : Publisher & Subsriber 역할을 동시에 할 수 있는 인터페이스
Reactive Streams 구현체
1) RxJava
2) Java 9 Flow API
3) Akka Streams
4) Reactor
5) RxJS, RxScala, RxAndroid 등..
참고 :
reactivemanifesto.org
'back > Reactive Java' 카테고리의 다른 글
cold vs hot sequence (1) | 2023.11.06 |
---|