Spring

[Spring WebFlux] 1. 리액티브 프로그래밍

Karla Ko 2024. 6. 13. 11:55
728x90

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

  • 리액티브 시스템을 구축하는데 필요한 프로그래밍 모델
리액티브 시스템은 비동기 메시지 통신을 기반으로 한다
리액티브 시스템에서의 비동기 메시지 통신은 Blocking I/O 방식이 아닌, Non-Blocking I/O  방식의 통신
  • 선언적 프로그래밍, 실행할 동작을 구체적으로 명시하지 않고 목표만 선언
  • 데이터 소스의 변경이 있을 때마다 데이터 전파
  • 리액티브 프로그래밍 코드는 코드의 간결함과 가독성에 유리한 메서드 체인의 형태로 표현
  • 리액티브 프로그래밍 코드에서 파라미터를 가지는 메서드는 함수형 프로그래밍 방식의 코드 형태의 파라미터를 가짐

 

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

명령형 프로그래밍

// 6보다 더 크고 홀수인 숫자들의 합계를 구하는 것

public class Example1_1 {
    public static void main(String[] args) {
        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);
    }
}
for문을 돌면서 numbers List에 포함된 숫자들에 하나씩 접근하겠어

선언형프로그래밍

동작을 구체적으로 명시하지 않고 목표만 선언, 코드가 간결해지고 가독성도 좋아짐

public class Example1_2 {
    public static void main(String[] args) {
        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);
    }
}
numbers List에 포함된 숫자들에 접근 좀 해줘

 

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

  1. Publisher: 입력으로 들어오는 데이터를 Subscriber에 재공하는 역할을 함
  2. Subscriber: Publisher로부터 전달받은 데이터를 사용하는 역할
  3. Data Source: Publishe의 입력으로 전달되는 데이터
  4. Operator: Publisher와 Subscriber 중간에서 데이터를 가공하는 역할

 

728x90