Reactive System 리액티브 시스템
reactive system ⇒ 반응형 시스템.
확장성이 뛰어나고 반응성이 빠른 시스템을 구축하는 데 중점을 둔 소프트웨어 아키텍처이다.
리액티브 시스템의 설계원칙은 리액티브 선언문에 잘 기록되어있다.
우리는 시스템 아키텍처에 대한 일관성 있는 접근이 필요하며, 필요한 모든 측면은 이미 개별적으로 인식되고 있다고 생각합니다. 즉, 응답이 잘 되고, 탄력적이며 유연하고 메시지 기반으로 동작하는 시스템 입니다. 우리는 이것을 리액티브 시스템(Reactive Systems)라고 부릅니다.
리액티브 시스템으로 구축된 시스템은 보다 유연하고, 느슨한 결합을 갖고, 확장성 이 있습니다. 이로 인해 개발이 더 쉬워지고 변경 사항을 적용하기 쉬워집니다. 이 시스템은 장애 에 대해 더 강한 내성을 지니며, 비록 장애가 발생 하더라도, 재난이 일어나기 보다는 간결한 방식으로 해결합니다. 리액티브 시스템은 높은 응답성을 가지며 사용자 에게 효과적인 상호적 피드백을 제공합니다.
- 리액티브 선언문 https://www.reactivemanifesto.org/ko*
용어집 - 리액티브 선언문
© 2014, the above authors, this declaration may be freely copied in any form, but only in its entirety through this notice.
www.reactivemanifesto.org
리액티브 시스템의 4가지 주요 특징.

- Responsive(응답성)
- 사용자에게 신뢰성 있는 응답을 빠르고 적절하게 제공.
- Resilient(탄력성)
- 장애가 발생하거나 부분적으로 고장 나더라도 시스템 전체가 고장 나지 않고 빠르게 복구하는 능력.
- Elastic(유연성)
- 시스템의 사용량에 변화가 있더라도 균일한 응답성을 제공하는 것을 의미. 시스템 사용량에 비례해서 자원을 늘리거나 줄이는 능력.
- Message Driven(메세지 구동)
- 비동기 메시지 전달을 통해 위치 투명성, 느슨한 결합, 논블로킹 통신을 지향하는 것을 의미.
리액티브 시스템에서는 비동기&논블로킹 방식을 채택하여 사용한다. 따라서 I/O 작업처럼 시간 비용이 크게 발생할 수 있는 작업에서 큰 이점을 얻을 수 있다.
메시지 기반의 방식이기 때문에 메시지 이벤트를 활용하여 다양한 외부 요소들과 결합하기 용이하다.
장단점
장점
- 반응성(Responsiveness)
- 리액티브 시스템은 빠른 응답 속도를 제공합니다. 비동기 및 논블로킹 방식으로 요청을 처리하고, 이벤트에 반응하여 즉각적으로 결과를 반환합니다. 이를 통해 사용자 경험을 향상시키고, 시스템의 신뢰성을 높일 수 있습니다.
- 확장성(Scalability)
- 리액티브 시스템은 수평 및 수직 확장이 용이합니다. 비동기 및 병렬 처리를 통해 많은 수의 요청을 동시에 처리할 수 있으며, 요청이 증가함에 따라 시스템을 쉽게 확장할 수 있습니다.
- 탄력성(Resilience)
- 리액티브 시스템은 장애에 대한 견고한 구조를 가지고 있습니다. 오류가 발생해도 시스템은 계속해서 동작하며, 자동으로 회복하거나 다른 경로를 통해 요청을 처리할 수 있습니다.
- 경제성(Efficiency)
- 리액티브 시스템은 리소스를 효율적으로 활용할 수 있습니다. 비동기 및 논블로킹 방식으로 작업을 처리하므로 리소스의 낭비를 최소화하고, 시스템의 성능을 최적화할 수 있습니다.
- 확장성(Scalability)
- 리액티브 시스템은 다양한 환경과 플랫폼에서 사용할 수 있습니다. 클라우드 환경에서는 가변적인 리소스를 활용하여 시스템을 유연하게 운영할 수 있고, 마이크로서비스 아키텍처에서는 각 서비스를 독립적으로 확장할 수 있습니다.
- 호환성(Compatibility)
- 리액티브 시스템은 기존 시스템과의 호환성을 유지하면서 새로운 기능을 추가할 수 있습니다. 기존 시스템을 점진적으로 리액티브 아키텍처로 변환하거나, 리액티브 기술을 기존 시스템에 통합할 수 있습니다.
단점
- 학습 곡선
- 리액티브 프로그래밍과 리액티브 시스템을 이해하고 구축하는 것과 비동기 프로그래밍과 함수형 프로그래밍의 개념을 이해하는 것에 대한 학습 비용이 상대적으로 크다.
- 디버깅의 어려움
- 리액티브 시스템은 비동기적이며 병렬적인 동작을 수행하기 때문에 디버깅이 어려울 수 있다.
- 오버헤드
- 논블로킹 및 비동기 작업을 지원하기 위해 추가적인 오버헤드가 발생할 수 있다. 이는 추가적인 코드 작성, 메모리 사용, CPU 리소스 등으로 나타날 수 있으며, 이로 인해 성능 저하의 가능성이 있다.
- 복잡성 증가
- 비동기적이고 병렬적인 동작을 수행하기 위해 작성된 코드들에서 복잡성이 증가 할 수 있다. 이로 인해 코드의 가독성과 유지보수성이 저하될 수 있다.
- 리소스 관리
- 리액티브 시스템은 많은 수의 동시 요청을 처리할 수 있지만, 이로 인해 리소스 관리가 어렵다. 특히 동시성 제어, 메모리 사용, 스레드 관리 등의 측면에서 고려해야 할 사항이 많다.
요약
리액티브 시스템 = 급변하는 상황에 빠르게 대응하고 적응할 수 있는 시스템이다.
- 높은 응답성을 가진다.
- 메세지 기반으로 동작한다.
- 탄력적이고 유연하다. = 장애나 변화에 빠르게 대응할 수 있다.
- 비동기&논블로킹&메세지 기반의 방식으로, 마이크로아키텍처와 결합하기 좋다.
- 상대적으로 러닝커브가 높기 때문에 장점만을 바라보고 리액티브 시스템을 적용하는 것은 오히려 위험할 수 있다.