개요
멀티테넌시는 단일 소프트웨어 인스턴스로 서로 다른 여러 사용자 그룹에 서비스를 제공할 수 있는 소프트웨어 아키텍처입니다. 서비스로서의 소프트웨어(Software-as-a-Service, SaaS) 제품이 멀티테넌트 아키텍처의 예입니다.
클라우드 컴퓨팅에서는 서로 다른 고객이 서버 리소스를 나누어 사용하는 공유 호스팅을 멀티테넌시라고 부르기도 합니다.
멀티테넌시의 반대 개념인 단일 테넌시에서는 소프트웨어 인스턴스 또는 컴퓨터 시스템 하나에 최종 사용자 또는 사용자 그룹이 하나만 있습니다.
멀티테넌트 애플리케이션은 애플리케이션의 모양과 느낌을 사용자 정의하거나, 테넌트가 사용자를 위한 특정한 액세스 제어 권한 및 제한을 지정하도록 허용하는 등 일반적으로 테넌트 수준의 사용자 정의를 포함하고 있습니다.
시분할에서 SaaS로 발전
멀티테넌시 개념은 수십 년 전에 등장했습니다. 1960년대에 고가의 고성능 메인프레임을 보유한 대학들은 여러 사용자가 기본적으로 동시에 컴퓨터를 사용할 수 있도록 시분할 소프트웨어를 개발했습니다.
이 아이디어는 사실상 사라지지 않았고, 오늘날 멀티테넌시 개념은 클라우드 컴퓨팅의 근간으로 자리잡았습니다. 퍼블릭 클라우드에서는 공유 리소스(프로세싱 성능 및 메모리)의 풀을 구성한 다음 여러 테넌트에 분할합니다. 즉, 각 테넌트의 데이터 및 워크로드는 동일한 물리적 머신 또는 머신 그룹에서 실행되더라도 분리된 상태를 유지합니다.
이 아이디어를 더 발전시켜 소프트웨어 아키텍처에 적용한 것이 바로 오늘날 SaaS 개념입니다. SaaS 제공업체는 애플리케이션의 단일 인스턴스를 실행하여 개별 고객들에게 액세스를 제공합니다. 따라서 모든 사용자가 같은 소프트웨어에 액세스하지만 각 사용자의 데이터는 계속 분리되어 있습니다.
쿠버네티스와 같은 컨테이너 오케스트레이션 플랫폼에서 멀티테넌시라는 용어는 대개 여러 개의 프로젝트를 서비스하는 단일 클러스터를 의미합니다. 이 클러스터는 각 프로젝트를 서로 분리 실행하도록 설정되어 있습니다.
멀티테넌시 vs. 클라우드 컴퓨팅
위에서 설명한 것처럼 개념으로서의 멀티테넌시는 다중 테넌트에 제공되는 소프트웨어 애플리케이션의 단일 인스턴스이므로 클라우드 컴퓨팅에 있어 중요한 기능입니다. 주로 SaaS 애플리케이션과 연결되는 멀티테넌시와는 반대로, 클라우드는 서비스로서의 플랫폼(PaaS)으로 간주됩니다.
클라우드 서비스 제공업체는 여러 사용자(또는 테넌트)에게 할당되는 리소스 풀에서 클라우드 컴퓨팅에 필요한 플랫폼과 기반 IT 인프라를 사용자에게 공급합니다.
클라우드 아키텍처는 애플리케이션을 실행할 기반이 되는 온라인 플랫폼을 제공할 목적으로 클라우드 구축에 필수적인 모든 구성 요소 및 기능을 연결하는 방식입니다.
클라우드 플랫폼 아키텍처를 구성하려면 컨테이너화, 오케스트레이션, 애플리케이션 프로그래밍 인터페이스(API), 라우팅, 보안, 관리, 자동화 소프트웨어를 포함하는 추가적인 수준의 개발이 추가로 필요합니다.
퍼블릭 클라우드 아키텍처: 최종 사용자가 소유하지 않은 리소스에서 생성되어 다른 테넌트에 재배포될 수 있는 클라우드 환경입니다.
프라이빗 클라우드 아키텍처: 대략적으로 정의하자면 최종 사용자 전용 클라우드 환경으로, 대개는 사용자의 방화벽 내에 있으며 가끔 온프레미스에 있기도 합니다.
멀티테넌트 아키텍처의 장점
클라우드 컴퓨팅의 인기로 알 수 있듯이 멀티테넌시에는 장점이 대단히 많습니다.
멀티테넌시의 비용 절감 효과. 규모가 커질수록 컴퓨팅 비용이 저렴해지므로, 멀티테넌시에서는 효율적으로 리소스를 통합하고 할당하여 궁극적으로 운영 비용을 절감할 수 있습니다. 개별 사용자 입장에서는 클라우드 서비스 또는 SaaS 애플리케이션에 대한 액세스 비용을 지불하는 것이 단일 테넌트 하드웨어 및 소프트웨어를 운영하는 것보다 경제적일 때가 많습니다.
멀티테넌시의 유연성. 하드웨어와 소프트웨어를 자체적으로 구입하면 수요가 많을 때는 용량이 부족하고 수요가 적을 때는 용량이 남아돌 수 있습니다. 반면에 멀티테넌트 클라우드에서는 사용자의 리소스 수요 증감에 맞춰 필요한 사용자에게 리소스 풀을 할당할 수 있습니다. 퍼블릭 클라우드 제공업체의 고객이 되면 용량이 더 필요할 때 요청하여 사용하고, 필요하지 않을 때는 비용을 내지 않아도 됩니다.
멀티테넌시의 효율성. 멀티테넌시에서는 개별 사용자가 인프라를 관리하고 업데이트 및 유지 관리를 수행하는 일이 줄어듭니다. 개별 테넌트는 이 반복적이고 번거로운 작업을 직접 처리하는 대신 중앙의 클라우드 제공업체에 맡길 수 있습니다.
클라우드의 더 큰 가능성을 살펴보세요.
단일 테넌트를 선호하는 경우
멀티테넌시의 장점에도 불구하고 활용 사례에 따라서는 프라이빗 클라우드 또는 자체 데이터센터 사용과 같은 단일 테넌트 컴퓨터 시스템이 더 적합할 수 있습니다.
고도로 민감한 데이터를 다루는 애플리케이션의 데이터 보안이 대표적인 경우입니다. 퍼블릭 클라우드 환경 및 SaaS 제품은 워크로드와 데이터를 분리하도록 설계되었으며 이러한 설계 원칙을 충실히 지켜 왔습니다. 그러나 통제 환경에서 테스트한 결과, 적어도 이론상으로는 클라우드 환경에서 크로스 테넌트 공격을 허용하는 취약점이 있습니다.
사실 그러한 리스크는 미미한 수준입니다. 공유 테넌시의 취약점은 흔치 않을 뿐 아니라 매우 정교한 공격 기술이 필요하다고 미국 국가안보국의 2020년 클라우드 취약점 보고서는 지적합니다. NSA의 보고서에 따르면, 주요 퍼블릭 클라우드 제공업체 중 어디서도 크로스 테넌트 공격이 발생했다는 기록이 없었습니다. NSA에서는 이러한 리스크보다 부실한 액세스 제어 및 설정 오류로 인한 리스크가 더 크다고 판단합니다.
Linux의 멀티테넌트 환경
멀티테넌트 환경을 설정할 때는 가상 머신(VM)으로 환경을 분리할지 아니면 컨테이너로 분리할지 선택해야 합니다.
VM을 사용하는 경우에는 하이퍼바이저가 생성하는 게스트 머신마다 자체 운영 체제와 애플리케이션은 물론 종속성까지 있으며, 하이퍼바이저에 의해 사용자도 분리됩니다.
컨테이너는 VM에 비해 더 가볍고 유연하며 스케일하기 쉬운 모델입니다. 컨테이너는 단일 호스트에서 여러 애플리케이션을 배포하고 커널 및 컨테이너 런타임을 사용하여 각 컨테이너를 가동하는 방식으로 멀티테넌시 배포를 간소화합니다. 저마다 자체 커널이 있는 VM과 달리, 컨테이너에서 실행되는 애플리케이션은 여러 테넌트 간에 커널 하나를 공유합니다.
Linux®에서는 네임스페이스 덕분에 여러 컨테이너가 같은 리소스를 충돌 없이 동시에 사용할 수 있습니다. 컨테이너 보안은 실행 중인 프로세스의 보안과 같은 방식으로 이루어집니다.
컨테이너 오케스트레이션에 쿠버네티스를 사용할 경우, 쿠버네티스 클러스터 하나로 멀티테넌트 환경을 설정할 수 있습니다. 이때 테넌트를 각자의 네임스페이스로 분리하고 테넌트 분리 정책을 생성할 수 있습니다.