Amazon Web Services 한국 블로그

AWS 클라우드 내 SaaS 솔루션의 테넌트당 비용 가시성 최적화

이 글은 AWS 파트너 블로그의 Optimizing Cost Per Tenant Visibility in SaaS Solutions를 기반으로 서호성, 김정원 AWS 파트너 솔루션즈 아키텍트가 한국어로 번역 및 편집하였습니다.

SaaS(Software-as-a-Service) 솔루션 운영의 가장 큰 과제 중 하나는 개별 테넌트의 리소스 소비를 측정하여 사용 패턴, 비용 귀속 등을 파악하는 것입니다. 하지만, SaaS 환경의 역동적인 특성과 변화하는 요구사항은 이를 더욱 어렵게 만듭니다.

이 블로그에서는 테넌트 리소스 소비를 측정하는 전략에 대해 설명하고, 이러한 전략을 SaaS 환경에 적용하여 비용을 할당하는 방법에 대한 예를 보여 드리겠습니다. 수집한 테넌트 리소스 소비 데이터를 사용하여 SaaS 아키텍처를 최적화하고, SaaS 환경의 운영 부담을 개선하고, 비즈니스 의사 결정을 내리는 방법에 대해 간략하게 살펴보겠습니다.

테넌트 리소스 소비량을 측정하는 것은 SaaS 환경 운영 비용을 결정하고, 테넌트당 비용을 계산하고, 테넌트의 활동 및 소비 패턴을 프로파일링하고, 더 많은 관련 인사이트를 수집하는 데 매우 중요합니다.

이러한 인사이트는 SaaS 애플리케이션을 구축, 판매 및 마케팅하는 방법에 대한 전략적 결정을 내리는 비즈니스 팀에 유용하며, 기술 팀에서는 이 데이터를 사용하여 SaaS 애플리케이션의 다양한 유형의 구성 요소를 설계, 확장 및 운영하는 방법에 대한 전략적 결정을 내릴 수 있습니다.

리소스 소비 문제 측정

SaaS 솔루션을 구축하는 산업에 따라 리소스를 공유하는 테넌트(풀 모델)가 있을 수도 있고, 자신만을 위한 별도의 리소스 세트가 필요한 테넌트(사일로 모델)가 있을 수도 있습니다. 이는 테넌트 리소스 소비를 측정하는 방식에 영향을 미치지만 유일한 측정 측도는 아닙니다.

경우에 따라 리소스 소비를 측정하는 데 애플리케이션 프로그래밍 인터페이스(API) 요청 및 트랜잭션 수와 같은 애플리케이션 수준 메트릭을 측정하는 것이 테넌트당 비용을 계산하는 데 필수적인 요소로 포함되기도 합니다. 리소스 소비량 측정 및 비용 속성 문제를 자세히 알아보려면 이 블로그를 참조하세요.

리소스 소비를 측정하기 위한 전략

리소스 소비를 측정하려면 SaaS 제공업체가 그림 1과 같이 테넌트가 시스템의 리소스를 소비하는 방식을 명확하게 보여주는 소비 매핑 모델을 만들어야 합니다.

그림 1 – 테넌트 리소스 소비 매핑

목표는 시스템의 각 테넌트에 소비량을 일정 비율로 할당할 수 있는 데이터 집합을 확보하는 것입니다. 테넌트가 시스템 리소스의 일부 또는 전부를 공유하는 멀티테넌트 환경에서는 이러한 소비량 보기를 구성하는 것이 어려울 수 있습니다. 이 워크숍을 참조하여 테넌트 소비량을 수집하고, 테넌트 소비의 비율을 도출하고, 테넌트당 비용을 계산하는 방법을 알아보세요.

모든 아키텍처에 맞는 테넌트 리소스 소비를 측정하는 단일 모델은 없으며, 애플리케이션에 맞는 전략을 선택할 때 고려해야 할 몇 가지 일반적인 전략이 있습니다. 먼저, SaaS 환경의 전체 비용 프로필을 살펴보고 애플리케이션이 청구서 비용에 어떤 영향을 미치는지 파악하세요. 아키텍처의 일부 부분(예: 데이터 스토리지 또는 컴퓨팅 전력 사용량)이 청구서에 가장 큰 영향을 미치는 것을 발견할 수 있습니다. 비용 측면에서 가장 중요한 인사이트를 얻으려면 먼저 이러한 부분에 대한 데이터를 수집하세요. 청구서에 기여하는 바가 적은 영역에는 시간을 투자할 가치가 크지 않습니다.

비용이 많이 드는 구성 요소에 대한 가시성을 얻기 위해서 두 가지 접근 방식 중 하나를 선택하거나 두 가지 방법을 결합할 수 있습니다.

  1. 거시적 접근 방식: 덜 복잡하며 테넌트 소비를 대략적으로 파악하는 데 사용됩니다.
  2. 세분화된 접근 방식: 측정 도구를 추가하고, 비용 관련 이벤트를 게시하고, 소비 지표를 집계하고 요약하는 방식입니다.

이 두 가지 접근 방식 모두 인프라(Amazon Web Services) 또는 애플리케이션 수준에서 모두 사용할 수 있습니다. 접근 방식을 선택하려면 원하는 소비 세부 정보의 수준과 소비를 파악하는 데 필요한 데이터를 계측하고 캡처하는 복잡성 간의 균형을 맞추는 것이 관건입니다. 전체 SaaS 환경에 한 가지 접근 방식을 사용하는 것보다 구성 요소(예: Microservice 또는 Function) 수준에서 어떤 접근 방식이 가장 적합한지 고려하는 것이 좋습니다. 이제 접근 방식에 대해 설명했으니 좀 더 자세히 살펴보겠습니다.

거시적 접근 방식

이 접근 방식은 일반적인 테넌트 활동을 기반으로 테넌트 소비량을 추정하는 것입니다. 대략적인 테넌트 리소스 소비량을 청구 데이터에 적용하여 테넌트당 비용을 계산할 수 있습니다. 예를 들어 SaaS 애플리케이션에 데이터 스토리지 요소가 포함되어 있다고 가정해 보겠습니다.

테넌트가 저장한 데이터의 양을 확인한 다음 테넌트당 비용을 계산하는 것이 가장 좋습니다. 하지만 근사치로 데이터 스토리지와 상호 작용하는 각 테넌트의 활성 사용자 수를 캡처하고 이를 테넌트 활동으로 간주하여 대략적인 테넌트 소비량을 추론하고 이를 청구 데이터에 적용하여 테넌트당 비용을 계산할 수도 있습니다.

예를 들어 테넌트 1의 활성 사용자가 SaaS 애플리케이션의 총 활성 사용자 수 대비 10%인 경우, SaaS 애플리케이션 청구 요금의 약 10% 를 테넌트 1에 할당할 수 있다고 가정해 보겠습니다.

여기서는 접근방식은 사용자 수/호출 빈도를 테넌트 활동에 매핑한 다음 이를 통해 테넌트 소비를 추론하고 해당 데이터를 사용하여 테넌트당 비용을 계산합니다. 위에서 설명한 것처럼 특정 SaaS 애플리케이션에서 사용자 수/호출 수가 소비량과 정확히 일치하지 않을 수도 있지만, 이는 합리적인 절충안일 수 있습니다.

또한 포괄적인 비용 및 사용량 데이터 세트가 포함된 AWS Cost and Usage Reports와 같은 AWS 서비스를 사용하여 테넌트 리소스 소비량을 추정할 수도 있습니다. 리소스에 태그를 지정하고 AWS 빌링 콘솔의 비용 할당 태그를 통해 이러한 사용자 정의 태그를 활성화하면 AWS Cost and Usage Reports에 해당 태그가 포함되며, 이 데이터를 태그별로 그룹화하여 대략적인 비용 및 사용량 값을 얻을 수 있습니다.

세분화된 접근 방식

이 접근 방식은 애플리케이션 및/또는 AWS 서비스를 사용하여 상세한 테넌트 데이터를 캡처하는 것입니다. 먼저 솔루션 스택 전반에 지표 계측을 도입하고 아키텍처 내 다양한 리소스의 소비 지표를 수집합니다. 예를 들어, 그림 2는 지표 계측 인프라를 사용하여 애플리케이션 마이크로서비스 소비 지표를 수집한 다음 테넌트 소비를 측정하는 방법을 보여줍니다.

그림 2 – 지표 계측 인프라를 통한 세부 테넌트 사용량 파악

여기서 애플리케이션 코드는 테넌트가 서비스 및 관련 리소스를 소비하는 방식에 대한 자세한 지표 데이터를 캡처합니다. 애플리케이션 코드는 지표 데이터를 이벤트로 게시하고, 사용자는 다음과 같은 핵심 AWS 서비스로 구성된 지표 계측 인프라를 사용하여 이러한 이벤트를 캡처하게 됩니다.

그런 다음 게시된 이벤트 데이터를 집계하고 자체 모델링 전략에 따라 분석하여 테넌트 간의 소비 분포를 파악한 다음 테넌트당 비용을 도출할 수 있습니다.

필요에 따라 다른 도구 또는 기술을 사용하여 지표 계측 인프라를 구축할 수 있습니다. 지표 계측 인프라를 구축하고 자세한 지표를 캡처하는 방법을 알아보려면 이 블로그를 참조하세요.

경우에 따라 애플리케이션 코드를 사용하는 대신 Amazon CloudWatch 및 AWS X-Ray와 같은 AWS 서비스에서 수집한 데이터만 사용하여 세분화된 데이터를 수집할 수 있습니다. 예를 들어 애플리케이션에서 Amazon DynamoDB를 사용하는 경우, Amazon CloudWatch logs를 쿼리하여 데이터베이스에 대한 호출 목록을 가져오거나 Amazon DynamoDB API를 사용하여 Amazon DynamoDB 테이블을 호출할 때마다 소비한 용량 단위의 양을 가져올 수 있습니다.

마지막으로 데이터를 사용하여 테넌트별로 지표를 그룹화하고 선택한 데이터 스토어에 이 정보를 저장합니다. 이 접근 방식을 구현하는 방법을 더 잘 이해하려면 이 블로그를 참조하세요.

사일로화된 리소스

경우에 따라 규정 준수, 규제 또는 격리 요구 사항으로 인해 한 테넌트에 대해 별도의 리소스 세트를 프로비저닝해야 할 수 있습니다. 고객 요구 사항에 따라 이러한 사일로 리소스를 별도의 AWS 계정 또는 단일 AWS 계정 내에서 프로비저닝할 수 있으며, Amazon Virtual Private Cloud(VPC)Amazon Identity and Access Management(AWS IAM) 정책 및 역할과 같은 AWS 구성을 사용하여 테넌트 격리를 적용할 수 있습니다.

테넌트별 계정 시나리오에서는 리소스 소비량을 측정하는 것이 간단합니다. 해당 AWS 계정에서 소비된 모든 리소스는 해당 테넌트에 귀속될 수 있습니다. 하지만 이 형식은 세밀한 가시성을 제공하지 않는다는 점에 주의하세요.

단일 계정에서 사일로 리소스를 프로비저닝할 때 AWS 태그를 사용하여 리소스에 태그를 지정할 수 있습니다. 고유한 테넌트 ID로 리소스에 태그를 지정하면 테넌트 데이터를 구분하는 데 도움이 됩니다. 다음 단계로는 해당 AWS 계정에서 AWS Cost and Usage Reports를 사용하여 리소스 사용량 및 비용 내역을 태그별로 확인할 수 있습니다.

풀링된 리소스

풀링된 구성 요소에서는 여러 테넌트가 리소스를 공유합니다. 이 경우 테넌트별 리소스 소비량을 측정하는 것은 어렵지만 위에서 설명한 전략을 유용하게 사용할 수 있습니다. 리소스 소비를 측정하려면 항상 AWS 청구서에 가장 많이 차지하는 영역을 선택해야 합니다. 그런 다음 요구 사항에 따라 거시적 접근 방식 또는 세분화된 접근 방식을 사용하여 리소스 소비량을 계산하세요.

SaaS 솔루션의 아키텍처에 따라 테넌트 리소스 소비를 가장 잘 모델링할 수 있는 테넌트 활동 차원을 선택하는 것이 좋습니다. 예를 들어, 데이터베이스에 각 테넌트가 저장한 데이터의 양을 캡처하는 경우입니다. 이 경우 위에서 설명한 거시적 접근 방식을 적용하여 데이터베이스에 특정 테넌트에 속한 데이터의 양을 쿼리하거나 테넌트가 데이터베이스와 상호 작용한 횟수를 캡처하여 대략적인 테넌트 소비량을 파악할 수 있습니다.

테넌트 소비에 대한 자세한 정보를 캡처해야 하는 경우가 더 많습니다. 예를 들어, SaaS 환경에 CPU 집약적인 워크로드가 있는 경우 컴퓨팅 실행 시간을 사용하여 테넌트 소비를 모델링할 수 있습니다.

여기서 마이크로서비스가 추상화된 라이브러리를 호출하여 테넌트 컨텍스트와 함께 컴퓨팅 실행 시간 지표를 게시하도록 할 수 있습니다. 그런 다음 그림 2의 세분화된 접근 방식에서 언급한 것처럼, 이 지표 정보를 캡처하고 저장하는 지표 계측 프로세스를 구축할 수 있습니다. 그런 다음 전략에 따라 이 지표 데이터를 사용하여 테넌트 리소스 소비량 및 테넌트당 비용을 계산할 수 있습니다.

AWS 사용량 데이터 수집

SaaS 솔루션은 다양한 AWS 서비스를 사용할 수 있습니다. 테넌트가 리소스를 프로비저닝하고 사용하는 방식은 서비스에 따라 다릅니다. 따라서 테넌트 리소스 소비를 측정하는 접근 방식도 달라집니다.

테넌트 리소스 소비를 측정하는 데 사용하는 AWS 서비스가 생성하는 데이터를 집계하거나 수집하기 위한 특정 프로세스를 구축해야 할 수 있습니다. 예를 들어, 스토리지 서비스의 경우, 테넌트 리소스 소비를 측정하기 위해 초당 입출력 작업 처리량(IOPS) 및 스토리지 사용 데이터를 수집하는 프로세스를 구축해야 할 수 있습니다. 컴퓨팅 서비스와 같은 다른 서비스에서는 접근 방식이 다를 수 있습니다.

애플리케이션 수준 사용량 데이터 수집

앞서 설명한 것처럼 리소스 유형과 AWS 서비스를 기준으로 리소스 소비량을 측정할 수 있습니다. 그러나 경우에 따라서는 애플리케이션 관점에서 리소스 소비 패턴을 이해하는 것이 중요할 수 있습니다. 애플리케이션 수준의 리소스 소비량을 통해 다양한 테넌트가 전체 아키텍처 리소스를 어떻게 소비하고 있는지에 대한 더 자세한 인사이트를 얻을 수 있으며 애플리케이션 사용 패턴을 파악할 수 있습니다.

예를 들어, 애플리케이션 수준 리소스 소비 데이터 수집에는 테넌트당 API 호출 수, 테넌트당 데이터베이스에서 검색된 항목 수, 테넌트당 컴퓨팅 계층에서 요청이 완료되는 데 걸리는 시간과 같은 상세한 애플리케이션 수준 지표를 캡처하는 작업이 포함됩니다. 이 블로그에서 볼 수 있듯이 지표 수집 및 수집 메커니즘을 사용하면 이 지표 계측 인프라를 통해 아키텍처의 여러 영역에서 이러한 다양한 지표를 캡처하고 공통 리포지토리에 저장할 수 있어 편리합니다.

그런 다음 비즈니스 전략에 따라 캡처된 개별 지표의 일부 또는 전부를 사용하여 총 테넌트 소비 데이터를 계산하는 모델을 구축합니다. 애플리케이션 수준의 테넌트 소비 데이터를 사용하여 AWS 비용 분석 도구(예: AWS Cost and Usage Reports, AWS Cost Explorer) 또는 CloudZero나 Stripe와 같은 기타 파트너 도구를 사용하여 테넌트당 비용을 계산합니다.

테넌트 리소스 소비 데이터를 사용하는 방법

테넌트 소비 데이터는 중요한 정보입니다. 앞서 언급했듯이 이 데이터는 고객에게 요금을 청구하는 방법을 이해하는 데 도움이 될 뿐만 아니라 제품 계층 정의, 기존 또는 새로 출시된 제품 기능의 인기도 파악, 제품 로드맵 수립과 같은 비즈니스 의사 결정을 내리는 데도 도움이 됩니다.

기술 측면에서도 이 데이터를 사용하여 SaaS 환경의 운영 영역을 개선할 수 있습니다. 이 데이터를 운영 대시보드 또는 뷰에 수집하면 지속적으로 변화하는 멀티 테넌트 환경의 부하에 대응하는 시스템의 능력과 같은 다양한 인사이트를 얻을 수 있습니다. 이를 통해 시스템 리소스를 가장 활발하게 소비하는 테넌트들을 식별하고 테넌트가 아키텍처의 주요 요소에 부하를 주는 방식을 이해할 수 있습니다.

이 데이터를 사용하여 아키텍처를 최적화하고 테넌트 상태를 사전에 관리하고, SLA 최대치에 근접할 수 있는 테넌트를 식별하고, 서비스 이용에 제한이 있는 테넌트를 식별하고, 아키텍처에서 임박한 기타 문제를 식별할 수 있습니다. 테넌트 리소스 소비 데이터를 사용하여 다양한 시각화를 구축하는 방법에 대한 자세한 내용은 블로그의 “SaaS 지표 시각화” 섹션을 참조하세요. 마지막으로 테넌트 소비 데이터를 사용하여 확장, 계층화 및 스로틀링전략을 개선하는 등 다양한 방식으로 현재 SaaS 아키텍처를 최적화하여 보다 효율적인 멀티테넌트 아키텍처를 만들 수도 있습니다.

결론

테넌트 리소스 소비를 측정하는 단일 방법은 없지만, 블로그에서 설명한 전략을 사용하여 테넌트 리소스 소비에 대한 인사이트를 제공할 수 있는 아키텍처에 맞는 솔루션을 구축할 수 있습니다. AWS Well-Architected SaaS Lens 비용 최적화 원칙(AWS Well-Architected Framework의 비용 최적화 원칙의 확장)에서 이 주제에 대한 추가 지침을 확인할 수 있습니다.

다음 단계로 SaaS Lens를 사용하여 비용 관점에서 현재 아키텍처를 평가한 다음 SaaS 솔루션의 비용 최적화 방법에 대한 권장 사항을 얻을 수 있습니다. SaaS Lens 사용자의 피드백에 따르면 비용 최적화는 오늘날 SaaS 제공업체가 직면하고 있는 일반적인 과제입니다.

AWS SaaS Factory에 대한 정보

AWS SaaS Factory는 SaaS 여정의 모든 단계에서 조직을 지원합니다. 새로운 제품을 구축하거나, 기존 애플리케이션을 마이그레이션하거나, AWS에서 SaaS 솔루션을 최적화하려는 경우 도움을 드릴 수 있습니다. AWS SaaS Factory 인사이트 허브를 방문하여 더 많은 기술 및 비즈니스 콘텐츠와 모범 사례를 살펴보세요.

SaaS 빌더는 계정 담당자에게 연락하여 참여 모델에 대해 문의하고 AWS SaaS Factory 팀과 협력하는 것이 좋습니다.

지금 등록하여 AWS의 최신 SaaS 뉴스, 리소스 및 이벤트에 대한 최신 정보를 받아보세요.

– Ujwal Bukka, Sr Partner Solutions Architect at AWS