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

2025. 4. 11. 23:49·Spring
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
'Spring' 카테고리의 다른 글
  • [Spring WebFlux] 2. 리액티브 스트림즈(Reactive Streams)
  • [Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe
  • [Spring Webflux] WebClient (HTTP 클라이언트)
  • Spring Event, 스프링 이벤트, ApplicationEventPublisher
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    플로이드워셜
    월간코드챌린지
    자료구조
    큐
    최대공약수
    Algorithm
    이분탐색
    최소신장트리
    DP
    알고리즘
    BFS
    그래프
    힙
    정렬
    재귀
    동적계획법
    트리
    파이썬
    스택
    구간합
    DFS
    구현
    덱
    최단거리
    다익스트라
    백준
    그리디
    프로그래머스
    조합
    LIS
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[Spring WebFlux] 1. 리액티브 프로그래밍
상단으로

티스토리툴바