개발 일지/Spring

[Spring WebFlux] Reactive Programming

미숫가루설탕많이 2023. 3. 28. 19:13

 리액티브 프로그래밍(Reactive Programming)은 비동기적인 데이터 스트림을 다루는 프로그래밍 패러다임 중 하나로, 이벤트 기반(event-driven) 또는 데이터 흐름(data-flow) 프로그래밍 모델에서 사용된다. 데이터의 처리 및 변환을 이벤트 기반으로 수행하며, 데이터의 상태 변화에 따라 비동기적으로 반응(react)한다.

 

 리액티브 프로그래밍에서는 데이터가 지속적으로 발생하는 것 자체를 데이터에 어떤 변경이 발생함을 의미하며, 이 변경 자체를 이벤트로 간주하고 이벤트가 발생할 때마다 데이터를 계속해서 전달한다.

 

 리액티브 프로그래밍은 높은 성능과 확장성을 갖는 시스템을 구현하기 위해 사용되며, 모바일 애플리케이션, IoT 기기, 클라우드 네이티브 애플리케이션 등 다양한 분야에서 사용되고 있다. 또한, 다양한 비동기 데이터 스트림을 처리하는데 필요한 연산자들을 제공하고 이러한 연산자를 활용해 데이터 스트림을 변환, 필터링, 조작, 결합 등 다양한 작업을 수행할 수 있다.

 

 리액티브 프로그래밍은 Java, Kotlin, JavaScript, C# 등 다양한 프로그래밍 언어에서 지원되며, 이를 구현하기 위한 다양한 라이브러리와 프레임워크가 있다. (RxJava, Reactor, Akka 등)

 

 

 

 

Backpressure

 리액티브 프로그래밍은 '배압 제어(Backpressure)' 기능을 제공하는데, 배압 제어는 데이터 소스에서 발생하는 데이터의 양이 데이터 수신자가 처리할 수 있는 양보다 많은 경우에 발생하는 문제를 해결하기 위한 기능으로 데이터의 발행 속도를 제한하여 소비자가 데이터를 처리할 수 있도록 도와준다.

 

 리액티브 프로그래밍에서는 데이터 스트림을 표현하는 'Observable' 타입 개념이 있다. Observable은 데이터를 생성하고 변환하며, 데이터의 상태 변화에 따라 관찰자(observer)에게 데이터를 전달한다.

 

 

 

 

Operator

 리액티브 프로그래밍에서는 연산자(Operator)를 사용하여 데이터 스트림을 변형하고 조작할 수 있다. 연산자는 기존의 데이터 스트림에서 새로운 데이터 스트림을 생성하는 함수이며, 다양한 연산자를 조합하여 복잡한 데이터 처리 로직을 간단하게 구현할 수 있다.

 

 연산자는 비동기적으로 작동하기 때문에 데이터 스트림에 대한 변환 작업은 블로킹되지 않으며 효율적으로 처리된다. 이를 통해 높은 처리량과 반응성을 갖는 리액티브 시스템을 구현할 수 있다.

 

  • map()
    : 데이터 스트림의 각 항목을 다른 형태로 변환할 때 사용
  • filter()
    : 조건에 맞는 데이터만을 추출할 때 사용

  • flatMap()
    : 데이터 스트림의 각 항목을 다른 데이터 스트림으로 변환하는 작업 시 사용

  • zip()
    : 두 개 이상의 데이터 스트림을 결합하는 작업을 할 때 사용

 

 이 외에도 다양한 연산자가 있으며, 이러한 연산자들을 조합하여 다양한 작업을 수행한다.

'개발 일지 > Spring' 카테고리의 다른 글

[Spring Boot] web.xml  (0) 2023.04.12
[Sprgin JPA] FetchType  (0) 2023.04.09
[Spring WebFlux] Reactive System  (0) 2023.03.27
[Spring Security] 토큰 기반 인증 절차  (0) 2023.03.21
[Spring Security] JWT  (0) 2023.03.20