개발/Java

Reactive란

승리승리 2022. 1. 21. 22:38

면접볼 때마다 항상 나오는 질문이 있다.

동기와 비동기에 대해 설명해주세요.

 

여기에 나는 아래와 같이 답변을 했었다.

 

동기는 이벤트가 발생했을 때 그 결과를 기다리고 비동기는 결과를 기다리지 않고 다음 작업을 수행하다가 완료 되면 결과에 대한 처리를 수행합니다.

 

그런데 최근 면접에서는 아래와 같은 질문을 받았다.

 

Blocking과 Non Blocking에 대해 설명해주세요.

 

동기, 비동기의 차이에 대한 답변과 동일하게 답변을 하려다가 문득

 

동기, 비동기와 Blocking, Non Blocking이 같나?

 

라는 의문이 너무 강하게 들어 몇초 당황하다가 설명하지 못하겠다고 했다.

돌아오는 길에 동기, 비동기의 차이에 대한 답변을 했어야지 왜 못했지? 라는 생각을 했지만

그 순간에는 그러면 안된다고 생각을 했다.

집에와 명확하게 정리하기 위해 자료를 찾아봤고 서로 다름을 확인했고

이에 필요한 내용을 정리하기 위해 우선 Reactive에 대해 메모하고자 한다.

 

동기, 비동기 그리고 Blocking, Non Blocking에 대해 찾아보면 Reactive는 항상 등장한다.

Reactive는 웹개발 및 서버 서비스 개발 방법론의 하나인데 위에 답변한 비동기에 대한 답변과 많이 유사하다.

Reactive는 작업의 흐름이 중간에 막히는 것 없이 쭉 이어지도록 한다.

일반적인 명령형 프로그래밍에서는 함수의 호출 순서에 따라 블록된다.

A함수를 호출하고 B함수를 호출한다면A함수의 호출 결과를 기다렸다가 결과가 반환되면 B함수를 호출한다.

 

A함수에서 어떤 문제가 생긴다면 B함수는 영원히 호출되지 않을 수도 굉장히 나중에 호출될 수 있다.

사용자는 A에서 문제가 생겼는지, B에서 문제가 생겼는지 알 수 없다.

그저 멍하니 빈화면을 바라보며 기다려야 한다.

 

Reactive하게 작성되었다면 A의 결과를 기다리지 않고 B를 수행하고 우선 B의 결과를 반환해줄 것이다.

이후 A가 완료된다면 A의 결과를 반환해줄 것이다.

A와 B의 작업시간이 각각 5와 3이라면 Reactive한 프로그래밍의 전체 작업시간은 5가 될 것이다.

하지만 Reactive하지 않은 프로그래밍이라면 전체 작업시간은 8이 될 것이다.

 

동기/비동기, Blocking/Non Blocking 은 이 Reactive 프로그래밍에 포함되는 놈들이다.

 

Java에서 Reactive Programming을 하기 위해서는 넷플릭스에서 소개한 RxJava라는 라이브러리를 사용한다고 한다.

ㅎㅎ;

글을 써야겠다고 생각하고 자료를 찾아봤을 때만해도

Java의 Reactive 프로그래밍 기법은 WebFlux와 @Callable이 있구나. 얘네 둘의 사용 법을 작성해야겠다.

했는데 RxJava란 놈도 있구나... ㅎ 얘도 추가해야겠다.

 

- 참고

https://hamait.tistory.com/761

 

웹개발 패러다임의 거대한 변화 "Reactive"

현재 작성된 이 포스트는 나중에 다양한 원인에 의해 수정될 수 있으며 ,100% 정확한 정보를 담고 있지 않을 가능성이 있다라는 것을 먼저 말씀드립니다. " 막힘없이 흘러다니는 데이터(이벤트)를

hamait.tistory.com

https://4z7l.github.io/2020/12/01/rxjava-1.html

 

[RxJava] RxJava 이해하기 - 1. Reactive Programming 이란 - HERSTORY

Reactive Programing RxJava를 시작하기 앞서, Reactive Programming이 무엇인지에 대해 알아보려 한다. Reactive Programming이란 데이터 흐름과 전달에 관한 프로그래밍 패러다임이다. 우리는 주로 알고리즘 문제

4z7l.github.io

https://brunch.co.kr/@oemilk/79

 

Reactive Programming

Reactive Programming | Reactive Programming? Functional Reactive Programming? Reactive Extensions? Rx를 공부하며 여기저기 찾아보니 위 용어들을 혼용하거나 동일시 보는 내용들이 있어 이해하기 더 힘들었습니다. 사

brunch.co.kr