일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MYSQL
- 1과목
- softeer
- 스프링
- 백준
- 자바
- 프로그래머스
- 백준 알고리즘
- 코틀린
- 시나공
- 백준알고리즘
- kotlin
- 파이썬
- java
- SQL
- programmers
- SW봉사
- 데이터베이스
- 회고
- CJ UNIT
- C++
- python
- 코딩봉사
- 공부일지
- BFS
- 코딩교육봉사
- 알고리즘
- 소프티어
- 정보처리산업기사
- 문제풀이
- Today
- Total
JIE0025
Reactive란? 리액티브 스트림의 구성요소 본문
황정식 - 스프링으로 시작하는 리액티브 프로그래밍
Spring WebFlux를 이용한 Non-Blocking 애플리케이션 구현
책을 통해 공부하면서 개인적으로 정리한 내용입니다.
✅ 개요
웹플럭스(WebFlux)는 리액티브 프로그래밍을 기반으로 비동기/논블로킹을 구현할 수 있게 함으로써
대규모 트래픽이 발생할 수 있는 애플리케이션에서 성능 향상을 돕는다.
우리는 WebFlux를 공부하기 위해 가장 기초적인 개념을 공부해야한다.
리액티브란 무엇인지, 리액티브 스트림의 구성요소들에 대해 알아보자!
✅ Reactive
영어 자체를 해석하면 반응을 하는, 반응을 보이는 이란 의미이다.
✍️ Reactive System
리액티브 시스템 클라이언트의 요청에 반응을 잘 하는 시스템을 의미하게 된다.
Non-Blocking (제어권을 그대로 본인이 갖고 있는것)의 개념과 아주 밀접하다.
요청한 스레드가 차단되지 않게 하여, 클라이언트에게 즉각적으로 반응할수 있게 구성된 시스템이다.
리액티브의 특징
1. Responisve : 클라이언트의 요청에 즉각적으로 응답할 수 있어야한다.
2. Maintainable : 요청에 대한 즉각적인 응답이 지속 가능해야 한다.
3. Extensible : 요청에 대한 처리량을 자동으로 확장하고 축소할 수 있어야한다.
✅ 리액티브 스트림즈
리액티브 프로그래밍을 위한 표준 사양(명세)이다.
⏺ 컴포넌트 (구성요소)
리액티브 스트림즈는 4가지 구성요소가 존재한다.
글자색을 일부러 구성요소마다 다른 색깔을 주었으니, 그림과 대조해서 봐보자.
✍️ Publisher (생산자)
데이터 소스로부터 데이터를 내보내는 역할
* Emit : 퍼블리셔가 데이터를 내보내는것
subscribe
- 데이터를 수신할지 여부를 결정하는 구독의 의미를 가짐
- 이것이 호출되지 않으면, Publsher는 데이터를 내보내는 프로세스가 시작되지 않는다.
✍️ Subscriber (소비자)
Publisher로부터 내보내진 데이터를 소비하는 역할
onSubscibe
- 구독이 시작되는 시점에 호출
- onSubscribe 내부에서 Publisher에게 요청할 데이터의 개수를 지정
- 구독 해지 처리 등
onNext
- 퍼블리셔가 데이터를 emit할때 호출됨 > emit된 데이터를 전달받아 소비할 수 있다.
onError
- emit된 데이터가 subscriber에게 전달되는 과정에서 에러 발생하면 호출 됨
onComplete
- emit과정이 종료될 경우 호출
- emit이 정상적으로 완료된 후 , 처리해야하는 작업이 있으면 여기에서 수행
✍️ Subscription (전달자)
subscriber의 구독 자체를 표현한 인터페이스
request
- Publisher가 emit하는 데이터의 개수를 요청
cancel
- 구독 해지하는 역할 (이 메서드 호출시 Publisher는 더이상 데이터를 emit하지 않는다)
✍️ Processor (생산자 겸 소비자 역할 가능)
Subscriber와 Publisher를 상속하고 있어서 둘의 역할을 동시에 할 수 있다.
++ Publisher는 여러개의 Subscriber를 subscribe(소비자 등록) 할 수 있다.
⏺ 리액티브 스트림즈의 구현체
Project Reactor
RxJava
Java Flow API 등이 존재한다.
여기에서 Project Reactor 는 Reactor라고 간단하게 부르며
리액티브 스트림즈를 구현한 대표적인 구현체이다.
> 스프링과 궁합이 가장 잘 맞는 구현체라고 한다!
오늘은 간단하게 리액티브가 무엇인지, 리액티브 스트림즈의 구성요소는 어떤것들이있고 어떻게 흘러가는지 알아보았다.
다음에는 Reactor의 코드를 보며
스프링 리액티브 프로그래밍에 대해 조금 더 세세하게 알아보자.
references
https://bgpark.tistory.com/160
'백엔드 > 스프링, 스프링부트, JPA, Spring Webflux' 카테고리의 다른 글
Build Tool : Maven과 Gradle의 개념과 차이점 (0) | 2023.07.17 |
---|---|
Reactor 개요 (operator, marble diagram ... ) (0) | 2023.06.11 |
[Spring WebFlux] Flux를 이용한 SSE(Server Sent Event) 처리하기 (0) | 2023.06.06 |
[Spring Webflux] 스프링 웹플럭스 (MVC와 비교, 내부 동작 원리, Netty) (3) | 2023.06.05 |
[Spring] WebClient 개념과 사용 방법 (6) | 2023.05.30 |