[Reactive] 01. 리액티브 시스템과 리액티브 프로그래밍

Jimin Lim·2024년 2월 12일
0

Spring

목록 보기
8/18
post-thumbnail
post-custom-banner

1. 리액티브 시스템과 리액티브 프로그래밍

1.1 리액티브 시스템이란?

리액티브: 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간 최소화

1.2 리액티브 선언문으로 리액티브 시스템 이해하기

리액티브 선언문은 일종의 설계 원칙이자 리액티브 시스템의 특징이니 한 번 훑어보자..

  • MEANS: 주요 통신 수단, 메시지 기반 통신을 통해 느슨한 결합, 격리성, 위치 투명성 보장
  • FORM: 메시지 기반 통신을 시스템이 형성되는 형태
    • 위 그림에서는 탄력성(= 작업량 변화해도 일정 응답 유지), 회복성(= 장애가 발생해도 응답 유지)
  • VALUE: 위 두가지를 통해 즉각적으로 응답 가능한 시스템을 구축할 수 있음을 의미

=> 빠른 응답성을 바탕으로 유지보수와 확장이 용이한 시스템 구축하는 데 활용

1.3 리액티브 프로그래밍이란?

리액티브 프로그래밍: 리액티브 시스템을 구축하는 데 필요한 프로그래밍 모델, Non Blocking I/O 방식의 통신

  • Blocking I/O: 해당 스레드가 작업을 처리할 때까지 남아 있는 작업들은 해당 작업이 끝날 때까지 차단되어 대기
  • Non Blocking I/O: 스레드가 차단되지 않는 것

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

  • 선언형 프로그래밍
    • 명령형 프로그래밍: 실행할 동작을 구체적으로 명시하는 프로그래밍 코드형태
    • 선언형 프로그래밍: 어떠한 동작을 하겠다는 목표 선언
  • data streams and the propagation of change
    • 데이터가 지속적으로 발생하며, 이 데이터 발생을 변화하는 이벤트로 보고 이 이벤트를 발생시키면서 데이터를 계속 전달하는 것

1.5 코드로 보는 명령형 프로그래밍 vs 선언형 프로그래밍

//명령형
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;
    }
}

System.out.println("합계: " + sum);
        
//선언형
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();

System.out.println("합계: " + sum);

선언형 프로그래밍 특징은 다음과 같다.

  1. 동작을 구체적으로 명시하지 않고 목표만 선언한다.
    • for문을 직접 사용하기 보단 스트림이 내부에서 해주거나 if 대신 sum, filter 메서드를 사용하고 있다.
  2. 여러 가지 동작을 각각 별도의 코드로 분리하지않고 메서드 체인을 형성해 한 문장으로 나타낸다.
  3. 함수형 프로그래밍으로 구성된다.

1.6 리액티브 프로그래밍 코드 구성

  • Publisher: 입력으로 들어오는 데이터를 제공하는 역할
  • Subscriber: Publisher가 제공한 데이터를 전달받아 사용
  • Data Source: Publisher의 입력으로 들어오는 데이터
  • Operator: Publisher, Subscriber 사이에서 적절한 가공 처리

리액티브 프로그래밍은 operator로 시작해 operator로 끝난다고 해도 과언이 아니라고 한다!

Ref.

  • 스프링으로 시작하는 리액티브 프로그래밍
profile
💻 ☕️ 🏝 🍑 🍹 🏊‍♀️
post-custom-banner

2개의 댓글

comment-user-thumbnail
2024년 2월 13일

LGTM

1개의 답글