• [Elasticsearch] Elasticsearch는 멀티테넌시?

    2021. 7. 6.

    by. SDev

    728x90

     

    최근 2021 멋쟁이사자처럼 세렝게티 올빼미 프로젝트에서 카카오엔터프라이즈와 k8s 과정을 하면서 Metric Monitoring & Logging 기술 중 Elasticsearch를 알아보고 있다. 

     

    Elasticsearch의 특징 중 하나가 멀티테넌시(Multi-tenancy)라는데, 이 개념에 대해 전혀 몰랐기 때문에 기술을 익히면서 찾아보고 지나갔는데 시간이 지나고 다시 봤을 때 기억이 나지 않아 여기 정리해두려고 한다.

     

     

    멀티테넌시(Multi-tenancy)

    tenancy의 뜻을 찾아보면, '(주택, 토지 등의)차용[임차/소작]'으로 소개되어 있다. 쉽게 말해 빌려 쓴다는 뜻이다. 멀티테넌시를 구글링해보면 단일테넌시와 구분지어 설명되어 있는 글을 쉽게 볼 수 있다.

    단일 테넌시하나의 소프트웨어나 인스턴스가 하나의 사용자 혹은 사용자그룹을 위해 작동하는 아키텍처,

    멀티테넌시하나의 소프트웨어나 인스턴스가 여러 사용자 혹은 사용자그룹을 위해 작동하는 아키텍처라고 한다.

     

    쉽게 예를 들면, 웹메일 서비스로 생각해볼 수 있다. 웹메일 서비스는 멀티테넌시 구조로 동작하고 있다. 많은 사람들이 크게 하나의 웹메일 서비스(gmail, naver...)를 이용해 메일을 주고받고 있다. 하지만 여기서 중요한 것은 여러 사용자 및 사용자 그룹이 사용하더라도 각각이 독립적으로 이용한다는 사실이다. 모든 사용자의 메일 데이터는 각 메일 서비스 제공 기업에서 관리하지만, 사용자는 나를 제외한 다른 사람들의 메일 자료에 접근할 수 없고 마치 나만을 위한 서비스처럼 느껴진다.

     

    만약 멀티테넌시가 아닌 단일테넌시라면 어땠을까? 단일 사용자 및 그룹을 위해 작동하는 아키텍처라는 점에서 모든 사용자가 각 메일 프로그램을 다운로드하고, 각 기기에서 설치한 뒤 각자의 기기 내에서 메일 데이터를 보관하고 사용하며 심지어 노트북에서 받은 메일은 스마트폰에서 읽을 수 없을 수도 있다. 

     

     

    멀티테넌시 아키텍처의 장점

    • 비용 절감

    소프트웨어를 지탱하는 하드웨어 측면에서 바라보면 규모의 경제로 인해 자원 구축 비용 절감, IT 리소스를 유연하게 할당할 수 있는 유연성을 포함해 새로운 버전이 나와도 장비 쪽 소프트웨어만 업데이트하면 모든 사용자가 새로운 기능을 사용할 수 있어 관리 비용도 크게 절감할 수 있다. 크게 최근 많이 사용되고 있는 클라우드 서비스와 맥락을 같이한다.

     

    • 편리한 데이터 통합

    하나의 시스템과 소프트웨어를 여러 사용자가 공유하는 구조이므로 사용자별 데이터가 사실상 같은 저장소에 저장된다. 결과적으로 대규모 데이터를 모을 수 있고, 분석하는 작업도 더 편리해진다. 최근 분석에 대한 수요가 커지고, 데이터의 양도 급속도로 거대해지면서 더 두드러지고 있다.

     

     

    멀티테넌시 아키텍처의 단점

    • 개인화를 지원하기 위한 정교한 아키텍처 구현

    개인화를 지원하기 위해 그만큼 더 정교한 아키텍처 설계가 필요하다. 자칫 소프트웨어나 인스턴스 하나의 장애가 수많은 사용자 및 사용자그룹에게 모두 피해를 입힐 수 있고, 일부 사용자를 위한 업데이트가 또 다른 사용자에게는 오히려 불편함을 유발할 수도 있다.

     

    • 보안

    구조적으로 사용자별로 완전히 구분되어 있는 것처럼 보이지만, 실상은 단일 저장소에 여러 사용자 및 사용자그룹의 데이터가 보관되어 있다. 따라서 각 단위의 데이터가 서로 섞이지 않도록 해야 하고, 몸집이 커지는 만큼 해킹 위협에 대해서도 그만한 보안 체계를 갖춰야만 한다.

     

     

    멀티테넌시 용어의 다양한 쓰임

    지금까지 일반적인 소프트웨어 관점에서의 멀티테넌시 구조를 살펴봤는데, 쿠버네티스와 같은 컨테이너 오케스트레이션 플랫폼에서 멀티테넌시라는 용어는 또 조금 다르게 쓰인다. 소프트웨어 관점에서 tenancy 대상인 tenant(사용자)는 사용자, 사용자 그룹이지만, 컨테이너 오케스트레이션 플랫폼에서는 프로젝트 단위가 tenancy이기 때문이다. 즉 컨테이너 오케스트레이션 플랫폼에서 멀티테넌시라는 용어는 대개 여러개의 프로젝트를 서비스하는 단일 클러스터를 의미하고, 이 클러스터는 서로 분리 실행하도록 설정되어 있다.

     

    그리고, 다시 Elasticsearch로 돌아가보자. Elasticsearch는 왜 멀티테넌시 구조인가? 

     

    Elasticsearch는 여러 개의 분리된 인덱스(Indecies)를 그룹으로 저장한다. 인덱스는 관계형 DB에서 데이터베이스와 대응되는 개념이다. 관계형 DB에서 다른 데이터베이스의 데이터를 검색하려면 별도의 커넥션을 생성해야하는데, Elasticsearch에서는 서로 다른 인덱스의 데이터를 하나의 쿼리로 묶어서 검색하고 하나의 출력으로 모아줄 수 있다. 이 때문에 Elasticsearch를 멀티테넌시 구조라고 소개하는 것이다.

     

     

    참고 자료

    댓글