Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- PytestPluginManager
- PersistenceContext
- 겨울 부산
- 자원부족
- 코루틴 빌더
- JanusWebRTCServer
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- 티스토리챌린지
- addhooks
- table not found
- preemption #
- taint
- mp4fpsmod
- JanusWebRTCGateway
- tolerated
- python
- 오블완
- vfr video
- JanusWebRTC
- kotlin
- 개성국밥
- terminal
- 코루틴 컨텍스트
- 깡돼후
- pytest
- Value too long for column
- Spring Batch
- VARCHAR (1)
- JanusGateway
- 달인막창
Archives
너와 나의 스토리
[리액티브 프로그래밍] - Part 1: 리액티브 프로그래밍이란? Reactive Programming 본문
반응형
* "스프링으로 시작하는 리액티브 프로그래밍" 책의 일부 내용을 요약 및 내용을 추가하여 정리하였습니다. 자세한 내용은 책을 참고해 주세요.
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가 존재하기 때문.
출처
- [스프링으로 시작하는 리액티브 프로그래밍] 책
#스프링으로시작하는리액티브프로그래밍 #리액티브프로그래밍
반응형
'개발' 카테고리의 다른 글
Appium version 여러 개 사용하는 방법 (0) | 2023.08.28 |
---|---|
Appium 1.x에서 2.x로 변경하기 - 주요 새 기능, 변경 사항 정리 (0) | 2023.08.11 |
[JPA] Hibernate Cache란? / Hibernate cache로 인한 문제 해결 방법 (0) | 2023.06.13 |
TDD, 클린 코드 with Java 16기 수강 후기 & 피드백 정리 (0) | 2023.04.08 |
Indexing이란? 인덱싱하는 이유 장점/단점, ID로 인덱싱하는 게 더 효율적인가? (0) | 2023.02.26 |
Comments