DevBoi

[리액티브 프로그래밍] 리액티브 프로그래밍이란? 본문

Develop/[WebFlux]

[리액티브 프로그래밍] 리액티브 프로그래밍이란?

HiSmith 2022. 2. 11. 01:22
반응형

리액티브 프로그래밍을 써야할 정도의 대규모 서비스가 많지 않았다.

작은 서비스의 서버에서, 대규모에 대한 걸 처리하려면 단순히 서버를 더 투입하면 되지 라는 생각이지만

사실 요새는 그렇지 않다. 작은 스타트업도 대규모의 데이터를 처리해야한다.

 

"기존 자원을 더 효율적이고 일관성 있게 사용하는 방법?" -> 리액티브 스트림이다.(수요 조절에 기반한다.)

 

논블로킹, 비동기 프로그래밍 모델

함수형 프로그래밍 스타일

스레드를 신경 쓸 필요 없는 동시성

 

또한 메소드 처리 이후에, doOnNext,doOnError,DoOnComplete 등을 사용해서, 해당 이벤트 이후를 핸들링 할수 있다.

 

리액티브 프로그래밍에서 가장 중요한 두개의 개념을 알아야한다.

publisher - 서비스를 발급해주는 사람

subscriber - 발급한 서비스를 구독, 즉 실행하는 사람이다.

 

실제로 Flux 객체내에서 구독하지 않으면, 커넥션 부터 데이터 조회까지 어떤 일도 일어나지 않는다.

 

자, 그러면 스프링 MVC와는 어떤 면이 다를까?

MVC는 자바 서블릿 API를 기반으로 만들어 졌다. 서블릿 API는 그 규약 내부적으로 많은 가정에 의존하고 있다.

 

가장 큰 방식은 블로킹방식으로 동작한다는 점이다. (서블릿 3.1이래로 비동기 방식을 일부 지원하기 시작했지만, 완전 리액티브 하다고 할수는 없다.) 

왜냐면, 해당 방식은 리액티브 이벤트 루프와 배압시그널을 지원하지 않기 때문이다.

 

블로킹 방식 동작 과정 - 사용자가 서버에 요청을 하고, 서버가 응답하기 전까지 다른 활동을 할수 없다. 

논블로킹 방식 동작 과정 -  사용자가 서버에 요청하고, 다른일을 할수있고, 서버가 응답을 주면, 사용자에게 알림을 준다.

 

쉽게 말해서, 사용자가 절차적으로 데이터를 기다리느냐, 아니면 자유롭게 하고, 요청넣은것이 오면 사용자에게 다시 알려주냐 이다.

좀 더 자세히 말해보자

MVC 형태에서는 데이터를 요청할때, 쿼리를 통해서 받아서 가져온다. 그리고 해당 작업 전에는 아무것도 하지 못한채 기다리고 있다.

작업 주체의 작업이 종료 될때까지 기다리는 것을 블로킹 (이때 대기하는 시간을 polling 이라고 한다.)

ㅇㅣ 반대의 작업이 논 블로킹이다.

 

 

 

참고 ) 스프링 웹플럭스는 Netty 와 궁합이 잘 맞는다.

 

 

반응형