본문 바로가기
개발 관련 지식/웹 프로그래밍

리액티브 시스템

by 권태일1147 2022. 6. 9.

분산 시스템으로 구현되는 모든 비즈니스의 핵심 가치는 응답성이다.

시스템이 높은 응답성을 확보한다는 것은 탄력성 및 복원력 같은 기본 기법을 따른다는 의미이다.

 

탄력성은 많은 사용자가 작업을 시작할 때 시스템 처리량이 자동으로 증가하고 수요가 감소하면 자동으로 감소하는 것.

복원력은 시스템 실패에도 반응성을 유지할 수 있는 능력, 이는 시스템의 기능 요소를 격리해 모든 내부 장애를 격리하고 독립성을 확보함으로써 달성할 수 있다.

 

응답성, 탄력성, 복원력을 모두 확보하는 기본적인 방법의 하나는 메시지 기반 통신을 사용하는 것이다.

 

메시지 기반 통신 : 구성 요소들은 메시지 도착을 기다리고 이에 반응하며, 나머지 시간에는 휴면 상태에 있지만, 동시에 논블로킹 방식으로 메시지를 보낼 수 있어야 한다.

 

메시지 기반 통신을 수행하는 방법의 하나는 메시지 브로커를 사용하는 것이다. 이 경우 메시지 대기열을 모니터링해 시스템이 부하 관리 및 탄력성을 제어할 수 있다.

 

리액티브 시스템은 메시지 기반 통신이 가장 적합하고, 메시지 기반 통신은 논블로킹 통신을 명시적으로 제공한다. 근데 명령형 프로그래밍은 메서드를 실행하면 스레드가 차단된다.(블로킹) 별도의 독립적인 처리를 실행하려면 추가 스레드를 할당해야한다. 리액티브 시스템의 관점으로 본다면 이런 동작은 허용되지 않는다.

하지만 콜백 기법을 적용해 해결할 수 있다. 메소드에 콜백함수를 전달 함으로써 실행 프로세스와 분리해서 콜백으로 결과를 받을 수 있다.

콜백만이 유일한 방법은 아니다. Future 그리고 CompletionStage와 CompletionStage를 직접 구현한 CompletableFuture도 있다.

Future는 Future 인스턴스를 반환하고 비동기적으로 처리된다. 그동안 다른 처리를 할 수 있다.

Future를 이용하면 콜백지옥을 피할 수 있다. Future 구현 뒤에 멀티 스레디의 복작성을 숨길 수 있다. 다만 Future로 비동기 동작하여 처리한 결과 데이터를 제때 사용하고 싶으면 블로킹 방식으로 결과를 기다려야 한다.

CompletableFuture는 Promise와 유사한 API를 제공한다. CompletionStage는 비동기적으로 호출하고 실행 결과로 CompletionStage를 즉시 반환한다. thenAccept 및 thenCombine 같은 메서드를 작성할 수 있는 다양한 API를 제공한다.

CompletionStage의 지원으로 결과를 비동기적으로 처리하고, 또한 결과를 기다리지 않고 결과가 나오면 이를 처리할 함수를 제공한다.

'개발 관련 지식 > 웹 프로그래밍' 카테고리의 다른 글

멀티 쓰레드  (0) 2022.02.19
멀티 쓰레드  (0) 2022.02.06
동기 비동기, 싱글스레드 멀티스레드  (0) 2021.01.29
WAS  (0) 2020.06.09
웹서버  (0) 2020.06.09