Skip to Content
Suffering builds character

2.리액티브 시스템

리액티브 시스템이란 앞서 이야기한 모던 환경의 다양한 특성들에도 문제 없이 동작할 수 있도록 지원할 수 있는 시스템을 말함

따라서 이러한 패러다임에 맞게 설계된 시스템을 리액티브 시스템이라고 하며, 해당 시스템은 사용자에게 높은 응답성과 사용성을 제공할 수 있음

💡
Tip

리액티브 시스템, Reactive

간단히 정리하면, 클라이언트의 요청에 즉각적으로 반응(Reactive)하는 시스템을 의미
여기서 반응한다는 것은 요청에 대해 최대한 빠르게 응답한다는 것을 말함

1. 리액티브 시스템

앞서 소개되었던 리액티브 매니페스토(Reactive Manifesto) 에는 리액티브 시스템을 개발할 때 지켜야할 핵심 원칙들이 정의되어 있음

2. 리액티브 애플리케이션이 가져야할 특성

리액티브 애플리케이션이 가져야할 특성은 크게 4가지로 구분됨

2-1. 반응성(Responsive)

요청에 대해 가능한 즉각적으로 응답할 수 있는가?

리액티브 시스템은 사용자나 다른 시스템에게 빠르게 응답할 뿐만 아니라, 일관된 응답 시간을 제공하며 이를 통해 사용자나 시스템은 자신이 요청한 기능, 서비스에 대해 높은 기대치와 신뢰도가 높은 시스템이라는 이미지를 줄 수 있음

Note

반응성

클라이언트 혹은 다른 시스템의 요청에 대해 요청을 받은 특정 시스템(Server)이 가능한 즉각적이고 빠르게 응답할 수 있는지에 대한 특성

2-2. 회복성(Resilient)

장애가 발생하더라도 응답성을 유지할 수 있는가?

리액티브 시스템은 장애 대응에 강하며, 따라서 장애가 발생하더라도 여전히 반응성(Responsive)을 유지할 수 있어야 함

회복성이나 탄력성이 좋은 시스템은 시스템 내 특정 영역에서 부분적으로 발생한 장애, 실패가 전체 시스템에 영향을 미치지 않도록 설계되어야 함

Note

회복성

시스템의 특정 영역에서 장애가 발생하더라도, 해당 시스템은 다른 방법으로 요청을 마저 처리할 수 있도록 준비되어 있어야 한다는 특성

2-3. 탄력성(Elastic)

처리할 작업량이 늘어나더라도 응답성을 유지할 수 있는가?

리액티브 시스템은 운영 과정에서 트래픽의 수준에 따라 다양한 작업 부하(workload)를 받을 수 있게 되더라도 상황에 맞게 탄력적으로 동작할 수 있어야 함

일반적으로 애플리케이션의 생명주기 과정에서는 다양한 작업 부하를 받게 되는데, 이 부하들로 인해 애플리케이션의 반응성이 위협받고 불안정해질 수 있음

따라서 트래픽이 급증하는 것과 같이 무거운 작업 부하가 발생할 경우, 서버를 자동으로 확장(Scaling)하여 요청을 처리할 수 있어야 하며, 반대로 부하가 다시 줄어들면 자원을 줄여서 비용을 절감할 수 있어야 함

Note

탄력성

리액티브 시스템은 작업 부하의 변화에 따라 자동으로 관련 컴포넌트에 할당된 자원 수를 늘리거나 줄일 수 있어야 한다는 특성

2-4. 메시지 기반(Message-driven)

메시징 기반의 느슨한 결합을 가지고 있는가?

리액티브 시스템은 회복성과 탄력성 등을 지원하기 위해 시스템을 구성하는 컴포넌트들의 경계를 명확하게 구분해야 함

따라서 컴포넌트들(ex. 시스템 or 서비스)을 직접 결합하기 보다는 메시지(Message) 기반의 상호작용을 수행하는 방식을 통해 컴포넌트들 간의 느슨한 결합(Loose coupling)으로 각 시스템들을 서로 독립적으로 격리할 수 있음

Note

메시지 기반 시스템

서로 다른 컴포넌트들이 메시지를 주고 받으며 동작하는 시스템

예를 들어서 주문 처리 시스템에서 주문이 생성되면 주문이 생성되었다는 메시지가 발행되고, 배송, 리뷰 등의 다른 서비스들이 해당 메시지를 구독하여 처리하는 시스템이 있다고 가정할 경우,

메시지 기반 방식을 활용하면 발생한 장애를 메시지로 처리할 수 있게 되면서 회복성을 얻을 수 있고,
각 시스템들이 서로 주고 받은 메시지의 수를 감시하고 처리된 메시지의 양에 따라 적절하게 리소스를 할당하게 되면서 탄력성도 얻을 수 있음

Last updated on