관리 메뉴

너와 나의 스토리

[리액티브 프로그래밍] - Part 1: 리액티브 프로그래밍이란? Reactive Programming 본문

개발

[리액티브 프로그래밍] - Part 1: 리액티브 프로그래밍이란? Reactive Programming

노는게제일좋아! 2023. 6. 25. 17:32
반응형

* "스프링으로 시작하는 리액티브 프로그래밍" 책의 일부 내용을 요약 및 내용을 추가하여 정리하였습니다. 자세한 내용은 책을 참고해 주세요.

 

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

 

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

  • 이벤트나 상황이 발생했을 때, 반응을 해서 그에 따라 적절하게 행동하는 것을 의미.
  • 즉, 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화한다.
  • 비동기 메시지 통신을 기반으로 동작한다.

 

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

  • 리액티브 시스템을 구축하는 데 필요한 프로그래밍 모델
  • 리액티브 시스템에서의 비동기 메시지 통신은 Blocking I/O 방식이 아닌 Non-Blocking I/O 방식의 통신이다.
    • Blocking I/O 방식의 통신에서는 해당 스레드가 작업을 처리할 때까지 남아 있는 작업들은 해당 작업이 끝날 때까지 차단되어 대기한다.
    • 반면에 Non-Blocking I/O 방식의 통신에서는 말 그대로 스레드가 차단되지 않는다.

 

 

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

  • 선언형 프로그래밍(Declarative Programming)
    • 명령형 프로그래밍 방식과 달리 실행할 동작을 구체적으로 명시하지 않고 이러이러한 동작을 하겠다는 목표만 선언.
    • 코드의 간결함과 가독성에 유리한 메서드 체인의 형태로 표현.
  • 데이터 흐름과 변화의 전파(Data streams & The propagation of change)
    • 데이터가 지속적으로 발생하고 지속적으로 데이터가 발생할 때마다 이것을 변화하는 이벤트로 보고, 이 이벤트를 발생시키면서 데이터를 계속적으로 전달하는 것.
    • 즉, 데이터 소스의 변경이 있을 때마다 데이터 전파.

 

 

명령형 프로그래밍 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;
    }
}

// 선언형 프로그래밍 방식
int sum = numbers.stream()
        .filter(number -> number > 6 && (number % 2 != 0))
        .mapToInt(number -> number)
        .sum();

System.out.println("합계: " + sum);
  • 명령형 프로그래밍 방식은 sum을 구하기 위해 실행할 동작을 코드에 구체적으로 명시함.
  • 선언형 프로그래밍 방식은 동작을 구체적으로 명시하지 않고 목표만 선언함.
    • 선언평 프로그래밍에서는 여러 가지 동작을 각각 별도의 코드로 분리하지 않고 각 동작에 대해서 메서드 체인을 형성해서 한 문장으로 된 코드로 구성.

 

 

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

  • Publisher
    • 입력으로 들어오는 데이터를 Subscriber에게 제공하는 역할.
  • Subscriber
    • Publisher가 제공한 데이터를 전달받아서 사용하는 주체.
  • Data Source
    • Publisher의 입력으로 들어오는 데이터 자체.
    • 리액티브 프로그래밍에서는 Data Stream이라고도 표현.
    • Data Source와 Data Stream은 엄밀히 다지자면 의미가 조금 다르지만, 둘 다 퍼블리셔의 입력으로 전달되는 데이터라는 측면에서 비슷하다가 봄.
      • Data Source: 최초로 생성되는 데이터 그 자체.
      • Data Stream: 퍼블리셔의 입력으로 들어오는 데이터의 형태
  • Operator
    • Publisher와 Subscriber 사이에서 데이터를 적절히 가공하는 역할.
    • 리액티브 프로그래밍은 Operator로 시작해서 Operator로 끝난다고 해도 과언이 아니다.
      • 데이터를 생성하는 Operator부터 시작해서 데이터 필터링(Filtering), 데이터 변환(Transformation) 등 리액티브 프로그래밍에는 수많은 Operator가 존재하기 때문.

 

 

 

출처

- [스프링으로 시작하는 리액티브 프로그래밍] 책

 

 

#스프링으로시작하는리액티브프로그래밍 #리액티브프로그래밍

 

반응형
Comments