Azure의 다중 테넌트 SaaS

Microsoft Entra ID
Azure App Service
Azure DNS
Azure Front Door
AKS(Azure Kubernetes Service)

브랜드를 해제하고 다른 비즈니스에 마케팅할 수 있는 비즈니스 소프트웨어 솔루션의 일부를 식별하면 회사의 전체 새 수익원이 추가됩니다. 그러나 많은 테넌트가 가져오는 부하를 고려하도록 솔루션을 구성하는 것은 종종 해결하기 어려운 장애물입니다. 이 솔루션은 트래픽을 보호하고 균형을 맞추는 Azure 기술 제품군을 안내합니다.

아키텍처

서로 다른 두 지역의 Azure에서 설정된 다중 테넌트 SaaS 아키텍처를 보여 주는 다이어그램

이 아키텍처의 Visio 파일을 다운로드합니다.

워크플로

Azure 기술 제품군은 트래픽을 보호하고 부하를 분산합니다.

  1. Microsoft Azure Front Door는 몇 가지 초기 작업을 처리합니다.

    • 초기 요청 처리

    • 지역 간 부하 분산

    • SSL(HTTPS) 종료 및 오프로드

    • 지역 가동 중단이 발생하는 경우 장애 조치(failover)

  2. Azure DNS는 DNS 레코드를 관리하고 올바른 Azure Front Door 엔드포인트로 라우팅되도록 합니다.

  3. 이 아키텍처는 인증을 위해 MICROSOFT Entra ID를 ID 공급자로 사용합니다.

  4. 적절한 지역으로 라우팅되면 Application Gateway는 적절한 Azure 앱 서비스에 요청을 전달하여 부하를 분산합니다.

  5. 이 아키텍처의 경우 App Service를 사용하는 것이 다음을 위한 기본 서비스입니다.

    • 모든 HTTP 기반 애플리케이션.

    • 웹 콘텐츠 제공.

    • RESTful API 노출.

    • 프런트 엔드 애플리케이션 뒤에서 비즈니스 논리 구현.

    자동으로 스케일 업 및 스케일 아웃하도록 App Service를 구성할 수 있습니다. 이렇게 하면 App Service는 요청 시 테넌트 HTTP 기반 요청의 호스트를 스케일링하는 데 적합합니다.

  6. 또한 데이터 액세스 계층 서비스는 부하에 따라 독립적으로 확장됩니다. 데이터 서비스는 데이터 모델, 연결 클라이언트 및 드라이버를 관리합니다. 또한 이 서비스는 애플리케이션에서 데이터를 사용하려는 모든 상위 수준 서비스에 일관된 데이터 인터페이스를 제공합니다. AKS(Azure Kubernetes Service)를 사용하여 이 데이터 서비스를 배포하고 스케일링할 수 있습니다. 각 AKS 클러스터는 계층의 관련 기능 세트를 처리해야 합니다. AKS는 각각 클러스터 내에서 특정 기능을 캡슐화하는 일련의 컨테이너를 제공하는 마이크로 서비스 아키텍처를 구현할 수 있습니다. 이렇게 하면 코드 내에서 높은 수준의 추상화 및 결합 해제가 가능합니다. 또한 여러 테넌트에서 증가된 부하를 고려하도록 클러스터를 개별적으로 스케일 아웃할 수 있습니다. 클러스터에서 부하가 증가하는 경우 각 클러스터는 리소스를 스케일 아웃할 수 있습니다. 동일한 증가가 발생하는 경우가 아니면 스케일 업은 리소스 그룹의 다른 클러스터에 영향을 주지 않습니다.

  7. 애플리케이션 프레임워크 외부에서 관계형 데이터를 저장하고 관리합니다. 이렇게 하면 두 지역 모두의 단일 데이터 진입점이 제공됩니다. Azure SQL 탄력적 풀의 강도를 활용하여 복제본(replica)tion, 가용성, 확장성 및 보안을 달성할 수 있습니다. 각 테넌트를 풀의 데이터베이스로 프로비저닝합니다. 부하와 요청이 들어옴에 따라 요청 시 풀에서 사용할 수 있는 리소스를 데이터베이스에 할당합니다. 이렇게 하면 테넌트에 사용할 수 있는 데이터베이스 리소스가 예산에 맞게 최적화됩니다.

구성 요소

기본 구성 요소는 이 솔루션에서 아키텍처에 제안된 구성 요소입니다. 기본 구성 요소가 아키텍처에 적합하지 않은 경우 대체 구성 요소 목록을 참조하세요.

기본 구성 요소

  • Azure Front Door: 클라이언트 트래픽을 올바른 지역으로 라우팅하는 지역 부하 분산 장치입니다. 지역 오류가 발생하면 두 번째 지역으로 장애 조치(failover)할 수 있으며 Azure Web Application Firewall을 통해 인터넷 연결 진입점을 보호할 수 있습니다.

  • Microsoft Entra ID: 애플리케이션에서 요청의 인증 및 엔드 투 엔드 권한 부여를 적용하여 전체 애플리케이션의 ID 공급자 역할을 합니다.

  • Azure DNS: 도메인 이름 확인을 위한 Azure의 호스팅 서비스입니다. 다중 테넌트 솔루션에서 여러 클라이언트는 개별 작업을 통해 솔루션에 액세스합니다기본. Azure DNS를 사용하여 클라이언트 요청을 구성하고 올바른 애플리케이션 스택으로 확인합니다.

  • Application Gateway: 클라이언트 비즈니스 요구를 충족하는 다양한 서비스에 대해 애플리케이션에서 내부적으로 트래픽을 라우팅하고 부하를 분산합니다. Azure Front Door는 상위 수준 지역에서 부하를 분산하지만 그룹 내의 개별 서비스에 대한 부하를 인식하는 것은 Application Gateway입니다. Azure Front Door 및 Application Gateway가 결합되어 다중 테넌트 솔루션의 모든 수준에서 복잡한 부하 분산을 제공합니다. Azure의 부하 분산 옵션에 관한 자세한 내용은 Azure 부하 분산 개요를 참조하세요.

  • App Service: 웹 애플리케이션과 웹 기반 API에 대한 Azure 프리미어 서비스입니다. 보안은 Microsoft Entra ID 및 Azure Key Vault와 같은 서비스와 통합됩니다. 자동 크기 조정을 구성할 수 있습니다. 또한 크기 조정에 사용할 수 있는 리소스의 양은 앱이 실행 가능한 다양한 App Service 계획 간에 유연합니다. App Service는 여러 환경에 대한 연속 통합 및 배포를 위해 통합된 DevOps 기능을 활용할 수도 있습니다. 이러한 기능과 Azure 플랫폼의 기타 지원 기능을 통해 개발자는 애플리케이션 개발에 집중할 수 있습니다.

  • AKS(Azure Kubernetes Service): 클러스터에 배포된 컨테이너 이미지의 인스턴스를 오케스트레이션합니다. 여러 클라이언트의 데이터를 관리하려면 일반적으로 관리할 구성 요소 모음을 구현해야 합니다.

    • 데이터 모델링

    • 데이터 원본 연결

    • ETL(추출, 변환 및 로드)

    • 가져오기/내보내기 작업

    이러한 많은 더 작은 구성 요소를 컨테이너 기반 마이크로 서비스로 개발하면 AKS 클러스터에 배포하기 위한 이상적인 시나리오가 만들어집니다. 자동 크기 조정, 부하 분산 및 업그레이드 기능을 위한 도구가 프레임워크에 기본 제공됩니다. AKS는 사용 가능한 DevOps 기능과 Azure Container Registry를 사용하여 CI/CD(연속 통합 및 지속적인 업데이트) 전략과 잘 통합됩니다.

  • Azure SQL 탄력적 풀: 리소스 풀을 사용하여 유연하게 데이터베이스 세트를 관리하기 위한 솔루션을 제공합니다. 이 서비스는 요청 시 리소스를 데이터베이스에 할당합니다. 이를 통해 다중 테넌트 SaaS 아키텍처의 개발자는 필요에 따라 데이터베이스 리소스를 클라이언트에 제공할 수 있습니다. 또한 이 서비스는 사용되지 않는 컴퓨팅 리소스가 많은 여러 SQL 서버를 유지 관리해야 하는 예산과 오버헤드를 줄입니다.

  • Azure Cognitive Search(이전 Azure Search): 강력한 인덱싱 및 쿼리 엔진을 애플리케이션에 추가하는 서비스입니다. 이 서비스를 통해 클라이언트는 강력한 쿼리 기능에 액세스할 수 있습니다. 또한 클라이언트는 Azure의 AI 기능을 사용하여 쿼리 기능을 보강하고 향상할 수 있습니다. Azure Cognitive Search는 테넌트당 인덱스 또는 테넌트당 서비스 전략을 사용하여 다중 테넌트를 고려할 수 있습니다.

  • Azure Cache for Redis: 캐싱 계층을 서비스로 솔루션에 적용하여 메모리 내 관리형 캐시를 제공함으로써 대기 시간을 줄이고 클라이언트의 성능을 향상합니다. 처리량이 높으면 많은 양의 요청이 시스템에 액세스하는 여러 테넌트를 처리할 수 있습니다. 애플리케이션 부하가 증가함에 따라 서비스를 유연하게 스케일 업할 수 있습니다. 또한 캐시된 테넌트 데이터를 보호하고 격리하기 위해 미사용 암호화를 지원합니다.

대체 구성 요소

  • Azure Virtual Machine Scale Sets: 필요에 따라 자동으로 확장되고 확장되는 VM(가상 머신) 환경에 서비스를 배포할 수 있습니다. Virtual Machine Scale Sets는 부하 분산 장치 또는 Application Gateway와 잘 통합되어 확장 집합이 증가함에 따라 부하의 균형을 자동으로 조정합니다. Virtual Machine Scale Sets는 이 솔루션이 요구하는 스케일링 성능을 제공합니다. 하지만 대부분의 경우 전체 VM 환경을 관리할 필요가 없으며 해당 수준의 스택을 App Service 또는 AKS에서 결정하도록 할 수 있습니다.

  • Azure SQL Database: 탄력적 풀을 대체하는 개별 전용 인스턴스로 구현합니다. Azure SQL Database를 사용하면 인스턴스를 직접 관리해야 하는 더 높은 오버헤드가 추가되고 할당된 리소스에 대한 더 많은 비용이 발생합니다. 즉, 테넌트에 전용 서버가 필요한 경우 허용되는 대안입니다. 특히 클라이언트는 인스턴스 및 사용 가능한 전용 리소스에 대한 더 많은 제어가 필요할 수 있습니다. 전용 SQL Server가 필요한 테넌트는 탄력적 풀 구성에서 테넌트와 나란히 존재할 수 있습니다. SQL 데이터베이스 계층을 SaaS에 대한 라이선스를 구매할 때 테넌트에 사용할 수 있는 가격 책정 옵션 중 하나로 만들 수 있습니다.

  • Virtual Machines의 SQL Server: SQL 데이터베이스 배포를 위한 또 다른 옵션입니다. 테넌트에는 기존 IT 인프라와 기존 SQL Server 온-프레미스가 있을 수 있습니다. 이 경우 테넌트는 전체 마이그레이션 또는 하이브리드 시나리오에서 현재 라이선스를 사용할 수 있습니다. SaaS의 분리된 특성을 사용하면 애플리케이션의 데이터 계층이 구성을 통해 모든 SQL Database 대상으로 지정할 수 있습니다.

시나리오 정보

브랜드를 해제하고 다른 비즈니스에 마케팅할 수 있는 비즈니스 소프트웨어 솔루션의 일부를 식별하면 회사의 전체 새 수익원이 추가됩니다. 그러나 많은 테넌트가 가져오는 부하를 고려하도록 솔루션을 구성하는 것은 종종 해결하기 어려운 장애물입니다.

Azure는 다음과 같은 소프트웨어 솔루션을 관리하기 위한 다양한 서비스를 제공합니다.

  • 모든 클라이언트에 대해 데이터베이스를 유연하게 유지 관리합니다.

  • 솔루션의 비즈니스 및 논리 계층을 스케일링하여 컴퓨팅 계층에서 병목 현상을 방지합니다.

  • 가용성 및 지역 장애 조치(failover)를 통합합니다.

  • 솔루션의 모든 수준에서 엔드투엔드 보안을 제공합니다.

잠재적인 사용 사례

이 사용 사례에는 Azure에서 호스트되는 다중 테넌트 SaaS 솔루션을 활용할 수 있는 디자인 패턴이 있습니다.

  • 클라이언트가 고객에게 마케팅하고 판매할 수 있는 CRM(고객 관계 관리) 솔루션을 개발합니다.

  • CMS(콘텐츠 관리 시스템) 시스템을 구현하고 이 아키텍처를 사용하여 여러 사용자에게 제공합니다.

고려 사항

이러한 고려 사항은 워크로드의 품질을 향상시키는 데 사용할 수 있는 일단의 지침 원칙인 Azure Well-Architected Framework의 핵심 요소를 구현합니다. 자세한 내용은 Microsoft Azure Well-Architected Framework를 참조하세요.

다중 테넌시

다중 테넌트 솔루션은 이 솔루션의 주요 고려 사항입니다. 이 솔루션은 여러 클라이언트를 동시에 처리합니다. 또한 모든 클라이언트 요청을 효과적으로 처리하기에 충분한 리소스를 할당합니다. 요청을 처리하는 동안 솔루션은 전역 엔드포인트의 트래픽을 보호하고 클라이언트 데이터를 격리하여 위반과 교차 오염을 방지합니다. 기본 위치를 기준으로 지역 리소스 그룹 쌍에 클라이언트를 배포합니다. 이렇게 하면 지역별 가용성이 최적화됩니다.

시스템이 인증 및 클라이언트 키를 기반으로 요청을 격리하므로 단일 컴퓨팅 그룹에 많은 클라이언트를 배포할 수 있습니다. 이러한 고유 식별자에 따라 요청을 구분합니다. 시스템은 클라이언트가 다른 클라이언트의 데이터를 해독할 수 없도록 키로 모든 클라이언트 요청을 개별적으로 암호화할 수 있습니다. 단일 컴퓨팅 스택에서 여러 클라이언트를 관리하면 리소스 할당을 최적화하여 클라이언트에 필요한 응답성을 원가로 제공할 수 있습니다.

클라이언트 요청이 지역 스택 중 하나에서 도착할 수 있으므로 컴퓨팅 스택 외부에서 비슷한 방식으로 클라이언트 데이터베이스를 관리합니다. 많은 클라이언트 데이터베이스가 TDE(투명한 데이터 암호화)로 격리되고 보호되는 동일한 탄력적 풀에 존재할 수 있습니다. 클라이언트 관리형 키를 사용하여 데이터를 암호화하도록 각 데이터베이스를 구성하고 JIT(Just-In-Time) 데이터의 암호를 해독할 수 있습니다. JIT 암호 해독은 개발자 및 다른 클라이언트의 클라이언트 데이터를 보호합니다. 시스템은 탄력적 풀을 활용하여 할당된 클라이언트에 요청 시 리소스를 제공하면서 비용을 낮게 유지합니다. 각 탄력적 풀에 복제 정책을 할당하여 클라이언트 데이터에 대한 백업 및 장애 조치(failover)를 제공할 수 있습니다. 시스템에 더 많은 클라이언트를 온보딩함에 따라 더 많은 탄력적 풀을 온라인 상태로 전환합니다.

다중 테넌트 솔루션에 대한 자세한 내용은 Azure의 설계자 다중 테넌트 솔루션을 참조하세요.

안정성

안정성은 애플리케이션이 고객에 대한 약속을 충족할 수 있도록 합니다. 자세한 내용은 안정성 핵심 요소 개요를 참조하세요.

스케일링 성능 및 가용성

이 솔루션은 SaaS를 사용하는 많은 테넌트를 고려하도록 디자인되었습니다. 많은 스케일링 가능한 구성 요소와 서비스를 활용하여 부하에 따라 증가시킵니다. 이 아키텍처는 몇몇 테넌트 또는 작은 요청 및 데이터 부하를 제공하는 솔루션용으로 디자인되지 않았습니다. 단일 클라이언트 또는 더 작은 부하를 대상으로 하는 솔루션의 예산을 강조할 수 있습니다. 또한 불필요한 복잡성과 비용이 추가되기 때문에 고가용성이 요구 사항이 아닌 다중 변경 오버헤드가 필요하지 않습니다.

보안

우수한 보안은 중요한 데이터 및 시스템에 대한 고의적인 공격과 악용을 방어합니다. 자세한 내용은 보안 요소의 개요를 참조하세요.

시스템은 애플리케이션의 각 수준에서 엔드투엔드의 보안을 처리합니다.

  • Azure Front Door는 해당 도메인에 대한 기본 제공 HTTPS 지원을 제공합니다. 즉, 시스템이 SaaS 애플리케이션에 대한 모든 트래픽을 암호화할 수 있습니다. 또한 Azure Front Door는 시스템이 요청을 애플리케이션에 라우팅하기 전에 에지의 공격으로부터 SaaS 스택을 보호하는 Azure Web Application Firewall을 구현합니다.

  • 각 지역의 각 애플리케이션 스택은 Azure Virtual Network 내에 있습니다. 시스템은 Azure Front Door의 요청을 수락하는 가상 네트워크에 대한 트래픽을 제한하여 외부 트래픽으로부터 모든 애플리케이션 서비스를 보호합니다. 보안 방화벽 내에 들어오면 Application Gateway는 SSL을 종료하고 애플리케이션 내에서 성능 부하 분산 및 라우팅을 제공할 수 있습니다.

  • Azure Key Vault를 사용하여 모든 자격 증명, 비밀 및 연결 문자열 안전하게 관리할 수 있습니다. 이 중요한 데이터를 비밀로 관리하면 개발자는 배포 시 애플리케이션에 자격 증명을 삽입할 수 있습니다. 이렇게 하면 코드가 중요한 정보로 오염되지 않습니다. 비밀을 사용하면 코드 위반 또는 중간자(man-in-the-middle) 공격이 테넌트 데이터베이스에 대한 액세스 권한을 얻지 않는지 확인하여 클라이언트 데이터를 보호합니다.

  • 이 시나리오에서는 동일한 데이터베이스가 아닌 경우 여러 테넌트 데이터가 동일한 데이터베이스 서버에 나란히 있을 수 있습니다. TDE 및 JIT 암호 해독을 사용하면 데이터베이스의 데이터가 보호됩니다. 시스템은 미사용 데이터베이스의 모든 데이터를 암호화하고 테넌트가 요청할 때만 암호를 해독합니다. 클라이언트는 자체 키를 제공할 수 있으며, Azure Key Vault에 모든 클라이언트 키를 저장하여 여러 테넌트의 암호화를 관리할 수 있습니다. 클라이언트 데이터를 엔드엔드로 보호하고, 개발자가 클라이언트 데이터에 액세스할 수 없도록 하고, 테넌트 간에 데이터를 격리하며, 보안 및 데이터에 대한 규정 준수 요구 사항을 충족하는 데 도움이 됩니다.

비용 최적화

비용 최적화는 불필요한 비용을 줄이고 운영 효율성을 높이는 방법을 찾는 것입니다. 자세한 내용은 비용 최적화 핵심 요소 개요를 참조하세요.

Azure 앱 Service는 필요한 예상 컴퓨팅 리소스에 따라 많은 가격 책정 계층을 제공합니다. 다중 테넌트 SaaS의 경우 고가용성 및 스케일 아웃 기능은 서비스 플랜을 선택하기 위한 주요 구성 요소입니다. 많은 테넌트를 호스트해야 하는 경우 높은 트래픽을 고려하는 데 필요한 컴퓨팅 리소스를 제공하기 위해 프리미엄 또는 격리 계층을 선택해야 할 수 있습니다. 표준, 프리미엄 및 격리된 계층은 모두 전용 VM 인스턴스입니다. 지정한 해당 계층의 VM 수를 기준으로 시간 단위당 비용을 계산할 수 있습니다. 자세한 내용은 App Service 요금제 개요를 참조하세요.

Azure Kubernetes Service는 비용 효율적인 컨테이너 서비스를 제공합니다. AKS 노드 요금은 사용량에 대해서만 발생하므로 다음에 대한 요금만 부과됩니다.

  • VM

  • 사용된 스토리지 및 네트워크 리소스

  • 사용량과 직접 관련된 스케일링 비용

비용을 절감하려는 경우 AKS를 데이터 계층 서비스로 사용하는 것이 이상적입니다. AKS 인스턴스 계층 가격 책정에 대한 예상은 Kubernetes 서비스 계산기를 참조하세요.

기본적으로 Azure SQL 탄력적 풀 가격 책정은 다중 테넌트 시나리오에서 매우 비용 효율적입니다. 탄력적 풀의 테넌트 데이터베이스는 사용 가능한 리소스를 공유합니다. 시간이 지남에 따라 테넌트 간에 요구가 변화하면서 리소스도 변화합니다. Azure SQL 탄력적 풀은 모든 데이터베이스에서 리소스 오버헤드가 없어도 요구되는 데이터베이스에 사용 가능한 최대 리소스를 제공합니다. 이 서비스는 SaaS 개발자와 테넌트의 비용을 낮게 유지합니다. Azure SQL Database 가격 계산기를 사용하여 가격을 책정하고 테넌트와 해당 데이터를 제공하는 데 필요한 리소스의 계층과 양을 결정합니다.

  • vCore(가상 코어) 가격 책정 모델을 사용하면 필요한 리소스를 충족하기 위해 훨씬 더 유연하게 스케일링할 수 있습니다. 또한 Azure 하이브리드 혜택을 활용할 수 있습니다. 기존 SQL Server 라이선스는 클라우드의 vCore SQL 리소스에 대한 할인을 제공합니다. 따라서 온-프레미스 서버가 이미 개발자 인프라의 일부인 경우 이러한 할인을 사용하여 비용을 훨씬 더 관리할 수 있습니다. Azure 하이브리드 혜택 절감 계산기를 사용하여 잠재적 절감액을 예측할 수 있습니다.

  • Azure SQL Database 예약된 용량을 구매하여 SQL Server 리소스에 대한 비용을 절감할 수도 있습니다. 예약된 용량을 구매하면 장기 SQL Database 사용량에 대한 약정이 표시됩니다. 기간은 일반적으로 1~3년 사이입니다. 대신에 예약에 있는 리소스의 컴퓨팅 비용에 대한 할인을 받습니다. 예를 들어 1년 동안 32개의 범용 vCore를 예약하여 해당 연도의 32개 vCore 비용을 줄일 수 있습니다. 여러 테넌트에서 SaaS에 대한 라이선스를 구매하는 것은 예약된 용량을 사용하는 것이 솔루션에 적합하다는 강력한 지표이며 이 워크로드에서 이상적인 비용 절감 요인입니다.

Azure Cache for Redis 가격 책정 페이지에서 Azure Cache for Redis의 가격 책정 구조를 찾을 수 있습니다. 필요에 따라 기본, 표준 및 프리미엄 계층 간에 언제든지 캐시 계층을 조정합니다. 더 큰 캐시 한도와 복제, 재해 복구 등의 추가 기능에 대한 가격은 더 높다는 것을 알 수 있습니다. 또한 Azure Cache for Redis는 장기 사용량 약정에 대한 예약된 용량 가격 책정을 제공합니다.

Azure Front Door의 가격은 서비스 내/외부 데이터 전송 양에 따라 달라집니다. 아웃바운드 데이터의 경우 영역에 따라 가격이 다릅니다. 지역별로 다른 비용이 발생합니다. 가격 차이가 발생하면 비용을 별도로 예측합니다. 가격에는 일부 라우팅 및 수행기본 용량이 포함되지만 시스템은 초기 한도를 초과하여 비용이 발생합니다. Azure Web Application Firewall은 적용된 정책 또는 규칙당 약간의 추가 요금이 발생합니다. Azure Front Door 가격 책정 페이지에서 Azure Front Door의 가격 정보를 찾을 수 있습니다.

Azure Cognitive Search 가격 책정은 완전히 계층화된 시스템입니다. 무료 계층은 개발과 테스트에 사용할 수 있습니다. 이후 각 계층에서는 할당된 각 Cognitive Search 인스턴스에 대한 시간당 비용이 발생합니다. 계층이 증가함에 따라 총 스토리지, 인덱스 수, 스케일 아웃 한도도 증가합니다. Azure Cognitive Search는 이미지 추출 서비스를 동일한 요금으로 모든 유료 계층에 제공합니다.

다음 단계