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