티스토리 뷰

1.1 리액티브 시스템(Reactive System)이란? 

  • Reactive : 반응을 하는
  • Reactive System : (어떤 이벤트나 상황에) 반응을 잘하는 시스템
    • 클라이언트의 요청에 즉각 응답함으로써 지연 시간을 최소화

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

  • MEANS (수단) : 메시지 기반 통신
  • FORM (형태) : 탄력성과 회복성
    • 탄력성 : 시스템의 작업량이 변화하더라도 일정한 응답 유지
    • 회복성 : 시스템에 장애가 발생하더라도 응답성 유지
  • VALUE (가치) : 빠른 응답성을 바탕으로 유지보수와 확장이 용이한 시스템 구축

1.3 리액티브 프로그래밍(Reactive Programming)이란?

  • 리액티브 시스템을 구축하는 데 필요한 프로그래밍 모델
    • 리액티브 시스템의 설계 원칙에 부합
    • 비동기 Non-Blocking 통신

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

In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. (https://en.wikipedia.org/wiki/Reactive_programming)

  • declarative programming (선언형 프로그래밍)
    • 명령형 : 실행할 동작을 구체적으로 명시
    • 선언형 : 동작의 목표만 선언
  • data streams
    • 데이터 흐름 : 데이터가 지속적으로 발생
  • 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.6 리액티브 프로그래밍 코드 구성

  • Publisher : 입력으로 들어오는 데이터를 Subscriber에 제공
  • Subscriber : Publisher로부터 전달받은 데이터를 사용
  • Data Source : Publisher의 입력으로 전달되는 데이터
  • Operator : Publisher와 Subscriber 중간에서 데이터 가공  Chapter 02 리액티브 스트림즈(Reactive Streams)
댓글