리액티브 선언: 현대 애플리케이션이 갖춰야 할 바람직한 속성


소프트웨어 아키텍처란 소프트웨어를 구성하는 요소와 그 구성요소 간의 관계를 정의한 것이다. 또한 아키텍처를 정의하는 과정은 시스템 구축을 위한 여러 가지 비기능 요건(성능, 가용성, 보안, 유지보수성, 확장성 등)을 만족하는 다양한 해결 방법을 찾는 과정이다.

특히 마이크로서비스 아키텍처는 클라우드라는 가상화된 인프라를 활용해서 구조화하는 것이기 때문에 가상화된 인프라의 특징을 고려해서 설계해야 한다. 그렇다면 이러한 클라우드 인프라를 고려했을 때 가장 신경 써야 할 요소는 무엇일까?

현대 애플리케이션에 대한 기대를 잘 표현한 문서가 있는데 바로 2014년 요나스 보네르등이 선언한 리액티브 선언문이다. 리액티브 선언문에서는 응답성, 탄력성, 유연성, 메시지기반 이라는 4가지 특징을 강조하고, 이러한 요건을 만족하는 시스템을 리액티브 시스템이라고 정의한다.

이러한 4가지 요소는 모두 리액티브 시스템을 만들기 위한 요소이고, 각 요소는 상호 보완적이다. 4가지 요소를 묶어서 설명하면 리액티브 시스템은 첫 번째 요소인 사용자에게 가장 빠르고 적절한 응답을 제공하기 위해 장애로부터 빠르게 회복하고, 시스템은 사용량 트래픽에 반응해 시스템 자원 조절을 유연하게 수행하며, 메시지 기반 통신을 통해 느슨한 결합과 위치 투명성을 제공한다.

리액티비의 사전적의미는 반응을 보이다 인데 이는 다양한 상황에서 따라 빠르고 적절하게 반응하는 시스템을 의미한다. 즉, 급변하는 상황에 적응할 수 있는 시스템을 요구하는 것이다.

여기서 리액티브 시스템이 반드시 갖춰야 할 공통적인 특성 하나를 발견할 수 있다. 바로 아키텍처 유연성이다. 리액티브 시스템이 신뢰성 있는 응답을 빠르게 제공하고 부분적 장애가 빨리 복구되고 수요 증가에 탄련적으로 대응하기 위해서는 시스템 자체가 변화와 확장에 언제든지 대응할 수 있는 아키텍처 유연성을 갖추는 것이 필수다.

아키텍처 유연성은 시스템을 구성하는 구성요소 간의 관계들이 느슨하게 맺어져 있어 언제든지 대체하거나 확장 할 수 있는 특성을 말한다. 특히 클라우드 인프라 자체가 변화무쌍한 비즈니스 환경에 대응할 수 있는 유연성과 확장성을 갖추고 있기 때문에 그것을 사용하는 애플리케이션 아키텍처도 반드시 이 같은 아키텍처 유연성을 갖춰야 한다.

앞에서 설명한 4가지 요소 중에서 메시지 기반이라는 요소가 이러한 아키텍처 유연성을 만족 시키는 요소라 할 수 있다. 메세지 기반 특성은 이후에 살펴볼 마이크로서비스 아키텍처에서도 마이크로서비스 간의 의존성을 줄이는 중요한 특성이 된다.

결합에서 느슨한 결합의 아키텍처로의 변화


예전에는 검증된 기술이나 솔루션을 기반으로 기숭을 직접 구현하는 폐쇄적인 방식이었던 것에 비해 최근의 아키텍처 설계는 필요한 영역에 적절한 솔루션을 선택하고 조합하는 개방적인 방식으로 바뀌고 있다.

최근 아키텍처 설계 문서들을 보면 각 솔루션의 로고로 채워지는 경향이 있데, 이것은 아키텍철깅이 유연하고 호환성 있는 적절한 솔루션 및 오픈소스를 선택하는 과정임을 보여준다.