ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리액티브 시스템과 리액티브 프로그래밍
    Spring Reactive Web Application/Reactive Programming 2023. 7. 20. 07:00
    반응형

    리액티브 시스템(Reactive System)

      리액티브 시스템이란 반응을 잘하는 시스템으로 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화합니다.

     

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

    • MEANS: 비동기 메시지 기반의 통신을 통해 구성요소들 간 느슨한 결합, 격리성, 위치 투명성을 보장합니다.
    • FORM: 비동기 메시지 통신 기반하에 탄력성과 회복성을 가지는 시스템이어야 합니다.
    • Elastic(탄력성): 시스템으로 유입되는 입력이 많든 적든 간에 시스템에서 요구하는 응답성을 일정하게 유지하는 것을 말합니다.
    • Resilient(회복성): 시스템에 장애가 발생하더라도 응답성을 유지하는 것을 의미합니다.
    • VALUE: 비동기 메시지 기반 통신을 바탕으로 회복성과 탄력성을 확보하고, 즉각적으로 응답 가능한 시스템을 구축한다는 의미를 가집니다.

     

    리액티브 시스템의 설계

    • 비동기 메시지 기반 통신으로 동작해야 합니다.
    • 탄력적이고 회복성을 지녀야 합니다.
    • 높은 응답성을 지녀야 합니다.
    • 유지보수와 확장이 용이해야 합니다.

     

    리액티브 프로그래밍(Reactive Programming)

      리액티브 프로그래밍은 리액티브 시스템의 설계 원칙에 잘 부합하는 비동기 Non-Blocking 통신을 위한 프로그래밍 모델입니다.

     

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

    In computing, reactive programming is a declarative programming

    paradigm concerned with data streams and the propagation of change.

    - wikipedia -

    • declarative programming: 실행할 동작을 구체적으로 명시하는 명령형 프로그래밍과 달리 선언형 프로그래밍은 단순히 목표를 선언합니다.
    • data streams and the propagation of change: 데이터가 변경될 때마다 이벤트를 발생시켜서 데이터를 계속적으로 전달합니다.

     

    명령형 프로그래밍 vs 선언형 프로그래밍

      명령형 프로그래밍 방식은 어떤 작업을 처리하기 위해 실행할 동작을 코드에 구체적으로 명시하는 방식이고, 선언형 프로그래밍 방식은 실행할 동작을 구체적으로 명시하지 않고 목표만 선언하는 방식입니다.

    public class ImperativeProgramming {
        public static void main(String[] args){
            // List에 있는 숫자들 중에서 6보다 큰 홀수들의 합계를 구하세요.
            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);
        }
    }
    public class DeclarativePrograming {
        public static void main(String[] args){
            // List에 있는 숫자들 중에서 6보다 큰 홀수들의 합계를 구하세요.
            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);
        }
    }

     

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

    • Publisher: 입력으로 들어오는 데이터를 제공하는 역할로 발행자, 게시자, 생산자, 방출자 등 여러 가지 용어로 사용됩니다.
    • Subscriber: Publisher가 제공한 데이터를 전달받아서 사용하는 주체로 구독자, 소비자로 사용됩니다.
    • Data Source: Publisher의 입력으로 들어오는 데이터를 대표하는 용어입니다. Data Stream이라고도 표현합니다.
    • Operator: Publisher와 Subscriber 중간에서 데이터를 가공하는 역할을 합니다.

     

     

     

    [참고 정보]

    반응형

    댓글

Designed by Tistory.