두 가지 이상의 클라우드를 병행해서 활용하는 멀티 클라우드 전략은 유연하고 안정적으로 자원을 활용할 수 있고, 비용을 절감할 수 있는 등의 장점을 가지고 있습니다. 따라서 많은 기업과 기관에서 멀티 클라우드 전략을 채택하고 있습니다. Flexera의 조사에 따르면 멀티 클라우드를 채택 비율이 89%에 이른다고 합니다.
하지만 각 클라우드마다 구조와 기능, 관리 방법이 다르기 때문에 이를 통합해서 관리하는 데에는 적지 않은 어려움이 따릅니다. 그리고 이러한 어려움을 해결하지 못하면 서비스를 안정적으로 운영할 수 없거나 비용 낭비로 이어질 수 있습니다.
멀티 클라우드 관리가 어려운 6가지 이유
그렇다면 멀티 클라우드 관리에는 구체적으로 어떤 어려움이 있는지, 6가지로 나눠서 상황별 예시와 함께 살펴보겠습니다.
첫 번째, 클라우드 서비스 연동
퍼블릭 클라우드(AWS, Azure, Google Cloud 등)와 프라이빗 클라우드(OpenStack, VMware 등)는 서로 다른 API와 인터페이스를 제공합니다. 이로 인해 서로 다른 플랫폼을 연동해서 활용하는 것에 어려움이 따릅니다. 각 플랫폼의 고유한 기능과 서비스가 서로 호환되지 않거나 절차가 복잡하기 때문입니다.
AWS와 Azure: AWS에서 Azure로 데이터를 전송할 때, 두 플랫폼의 API가 다릅니다. 이를 위해 Apache NiFi나 Talend와 같은 데이터 통합 도구를 사용하여 데이터를 추출하고, 변환하여 전송해야 합니다. 이 과정은 시간과 비용이 많이 소요될 뿐만 아니라, 각 도구의 사용 방법을 숙지해야 합니다.
VMware와 AWS: VMware 환경에서 실행 중인 애플리케이션을 AWS로 확장하려면, VMware Cloud on AWS를 사용할 수 있습니다. 그러나 이 과정에서 네트워크 설정, 보안 정책, 리소스 할당 등의 문제를 해결해야 하며, VMware와 AWS의 관리 콘솔과 API를 모두 이해해야 하는 어려움이 있습니다.
두 번째, 네트워크 구성
퍼블릭 클라우드와 프라이빗 클라우드 간의 네트워크 연결을 설정하고 유지하는 것도 어려움이 따릅니다. 각 클라우드 제공자(CSP)는 고유한 네트워크 구성 방법을 제공하기에, 이를 통합하여 일관된 네트워크 아키텍처를 구축하는 것이 복잡하기 때문입니다.
AWS와 Azure: AWS(VPC)와 Azure(VNet)을 연결하려면 VPN 터널 또는 전용 회선을 설정하고, 라우팅 테이블을 구성하며, 보안 정책을 일치시켜야 합니다. 이 과정에서 네트워크 주소 충돌 방지, 라우팅 설정, 보안 그룹과 네트워크 보안 그룹(NSG) 간의 트래픽 제어를 조정해야 하며, 지속적인 모니터링에도 어려움이 따릅니다.
AWS와 OpenStack: AWS(VPC)는 서브넷, 라우팅 테이블, 인터넷 게이트웨이 등을 사용하여 네트워크를 구성합니다. 반면 OpenStack에서는 Neutron을 사용하여 네트워크를 구성합니다. 따라서 두 환경을 연결하려면, VPN이나 전용 회선을 설정하고, 양쪽에서 네트워크 트래픽을 안전하게 전송하기 위한 보안 정책을 구현해야 합니다. 이는 매우 복잡한 작업이며, 지속적인 유지보수가 필요합니다
위 예시와 같이 다른 구성의 플랫폼을 연결하기 위해서는 어렵고 복잡한 절차가 필요합니다. 특히, 보안과 성능을 모두 만족시키는 네트워크 구성을 구현해야 하기 때문에, 어려움이 더욱 증가하고 있습니다.
세 번째, 보안 및 접근 제어
각 플랫폼마다 고유한 보안 모델과 접근 제어 정책을 가지고 있습니다. 예를 들어, 퍼블릭 클라우드에서는 클라우드 제공자의 보안 정책을 따르지만, 프라이빗 클라우드에서는 자체 보안 정책을 적용해야 합니다.
AWS와 Azure: AWS에서는 IAM을 사용하여 리소스 접근을 제어하며, Azure에서는 RBAC를 사용합니다. 따라서 두 클라우드 환경을 함께 사용하려면 각 환경에 맞춘 별도의 사용자 계정과 권한 설정을 관리해야 합니다. 이는 중복된 작업을 유발하고, 보안 정책의 일관성을 유지하기 어렵게 만듭니다. 이를 해결하기 위해 Okta나 Auth0와 같은 중앙 집중식 인증 서비스를 사용할 수 있지만, 추가적인 비용을 들이고 설정 작업을 진행해야 합니다.
AWS와 OpenStack: OpenStack 환경에서는 Keystone을 사용하여 인증과 권한 부여를 관리합니다. 반면, AWS에서는 IAM을 사용합니다. 두 시스템의 접근 제어를 통합하려면, 각 환경의 사용자 계정과 권한을 일치시키기 위한 추가적인 스크립트와 관리 도구가 필요합니다.
이러한 보안 정책의 통합의 복잡성은 멀티 클라우드의 보안 취약점을 초래할 수 있습니다.
네 번째, 자원 활용
퍼블릭 클라우드, 프라이빗 클라우드, VM, 컨테이너는 자원의 효율적인 활용면에서도 각각 다른 방법과 전략을 가지고 있습니다. 따라서 각 환경에서 자원 사용량을 모니터링하고, 필요에 따라 자원을 확장하거나 축소하는 작업을 자동화하는 데 어려움이 있습니다.
AWS와 OpenStack: AWS에서는 Auto Scaling을 사용하여 EC2 인스턴스를 동적으로 확장하거나 축소할 수 있습니다. 반면 OpenStack에서는 Heat를 사용하여 스택을 관리합니다. 두 자원을 동시에 관리하려면, AWS Auto Scaling 그룹과 OpenStack Heat 템플릿을 통합한 후, 자원 사용량을 모니터링하여 필요 시 자동으로 조정해야 합니다. 이를 위해서는 추가적인 스크립트와 자동화 도구를 사용해야 하며, 각 환경의 자원 관리 방식을 이해해야 합니다.
Azure와 Google Kubernetes Engine(GKE): Azure VM Scale Sets는 가상 머신을 자동으로 확장하거나 축소하는 기능을 제공합니다. Google Kubernetes Engine(GKE)는 Kubernetes 클러스터를 관리합니다. 두 시스템을 통합하여 애플리케이션의 부하에 따라 VM과 컨테이너 자원을 동적으로 조정하려면, Azure VM Scale Sets과 GKE의 자원 할당 정책을 조정하고, 모니터링 데이터를 공유해야 합니다. 이는 각 플랫폼의 자원 관리 도구와 API를 사용하여 통합 솔루션을 구축해야 하는 복잡한 작업입니다.
퍼블릭 클라우드나 멀티 클라우드를 활용하는 가장 큰 이유가 자원의 활용이지만, 전문적인 지식이나 관리 솔루션이 없을 경우 오히려 효율이 더 떨어질 수 있습니다.
다섯 번째, 비용 관리
각 클라우드 제공자는 고유한 과금 모델을 가지고 있습니다, 따라서 각 플랫폼의 비용 모델을 정확히 이해하고, 이를 바탕으로 비용을 예측하고 최적화해야 하는 어려움이 따릅니다.
AWS와 Google Cloud: AWS는 사용한 만큼 지불하는 온디맨드 과금 모델과 예약 인스턴스를 제공하고, Google Cloud는 지속 사용에 따른 할인을 제공합니다. 두 클라우드 환경의 비용을 통합 관리하려면, AWS Cost Explorer와 Google Cloud Billing 데이터를 수집하여 분석해야 합니다. 이를 위해 CloudHealth와 같은 멀티 클라우드 비용 관리 도구를 사용할 수 있지만 기본적인 설정과 유지보수가 복잡하며 추가적인 비용이 발생합니다.
Azure와 OpenStack: Azure는 사용한 리소스에 대한 비용을 청구하며, 예약 인스턴스를 통해 비용을 절감할 수 있습니다. OpenStack 환경에서는 하드웨어와 운영 비용을 자체적으로 관리해야 합니다. 두 환경의 비용을 통합 관리하려면, Azure Cost Management와 OpenStack의 비용 데이터를 각각 수집하여 통합 후 분석해야 합니다. 물론 CloudCheckr와 같은 도구를 활용할 수 있지만, 추가비용이 들고 맞춤 설정과 유지보수에 어려움이 있습니다.
여섯 번째, 자동화 및 오케스트레이션
퍼블릭 클라우드, 프라이빗 클라우드, VM, 컨테이너 각각은 고유한 자동화 도구와 오케스트레이션 방법을 가지고 있습니다. 이를 통합하여 일관된 자동화와 오케스트레이션을 구현하는 것은 매우 어렵습니다. 특히, 서로 다른 환경에서의 배포와 관리 작업을 자동화하려면, 각 환경에 맞는 스크립트나 도구를 사용해야 합니다.
AWS와 Azure: AWS의 CodePipeline과 Azure DevOps를 각각 사용하는 경우, 두 시스템을 통합하여 멀티 클라우드 CI/CD 파이프라인을 구축하려면 Jenkins 같은 외부 도구를 활용해 중간에 위치시켜 두 클라우드의 배포 작업을 조정해야 합니다. 이를 위해서는 각 클라우드의 API를 깊이 이해하고, 이들을 통합하는 스크립트를 작성하는 복잡한 작업이 필요하며, 일관된 배포를 위해서 지속적인 조정과 유지보수도 진행되어야 합니다.
AWS와 OpenStack: AWS와 OpenStack을 함께 사용하는 멀티 클라우드 환경에서 애플리케이션을 배포하거나 워크로드를 이동시키는 작업을 자동화하는 것은 복잡한 과제입니다. 예를들어 Terraform을 통해 AWS와 OpenStack의 인프라를 코드로 관리하리 하더라도, 두 플랫폼 각각에 맞춘 모듈을 작성해야 하고, 네트워크 연결 설정, 보안 그룹 동기화, 워크로드 전환 시의 데이터 동기화 등을 자동화해야 합니다. 이 과정에서 각 클라우드의 고유한 설정과 도구를 통합하고 조정하는 데 많은 시간이 소요됩니다.
지금까지 살펴본 것처럼, 각기 다른 특성과 환경을 가진 클라우드 플랫폼을 함께 활용하는 것은 복잡하고 어
려운 과제들을 동반합니다. 따라서 이러한 과제를 해결하려면 단순한 기술적 지식을 넘어, 통합된 전략과 솔루션이 반드시 필요합니다.