Cloud Service란 물리적인 서버들을 데이터 센터라는 곳에 모아놓고 원격으로 사용할 수 있게끔 대여를 해주는 서비스
입니다. 실제 서버 머신을 만지거나 관리 할 일이 없다는 장점이 있습니다. 예전에는 IaaS(Infrastructure as a Service)를 목표로 하였으나 차츰 발전하여 이제는 서버 임대보다는 PaaS(Platform as a Service), SaaS(Software as a Service) 형태로 진화하였습니다. 최근에는 Serverless를 화두로 BaaS(Backend as a Service)가 트렌드로 되어가고 있습니다.
다음은 각각의 클라우드 서비스 형태를 설명한 것입니다.
IaaS: Infrastructure as a Service
서버에 접속하는 IP랑 아이디/비밀번호를 알려주고 직접 원격으로 접속하여 필요한 서비스를 직접 설치하고 관리하면서 운영해야 하는 서비스
PaaS: Platform as a Service
OS나 DB같은 필요한 도구들을 미리 설치해주고 최적화 되어 있어 서버에 접속하면 바로 사용할 수 있게끔 지원해주는 서비스
SaaS: Software as a Service
서비스에 필요한 도구들을 소프트웨어 형태로 제작하여 머신 관리 없이 웹이나 API 형태로 쉽게 이용할 수 있는 서비스
BaaS: Backend as a Service
백엔드에서 필요한 도구들만을 모아서 인프라 구축이나 관리를 신경쓰지 않고 서버를 운영할 수 있게한 서비스
목적이 동일한 서비스나 프레임워크는 대부분 비슷한 기능을 각자의 서비스에 맞게 이름만 다르게하여 제공합니다. 다음은 같은 목적의 이름만 다른 서비스들입니다.
기능 | AWS | GCP | Azure |
---|---|---|---|
가상 머신 | EC2 | Compute Engine | Virtual Machines |
Auto Scale | Auto Scaling | Virtual Machine Scale Sets | Autoscaling |
Batch | AWS Batch | Azure Batch | Batch on GKE |
Storage | S3 | Cloud Storage | Blob Storage |
Function | Lambda | Cloud Functions | Azure Functions |
서비스에서 가상 머신과 저장소가 필요하다면 AWS는 EC2/S3, GCP는 Compute Engine/Cloud Storage, Azure는 Virtual Machines/Blob Storage를 사용하는 식입니다. 사용법이나 구조도 대부분 비슷합니다. 심지어 이름도 똑같은 서비스들도 있습니다. 그것도 그럴 것이 목적이 같은데 서비스 내용이 완전 다르면 상식적으로도 맞지 않습니다.
이제 조금 더 깊이 들어가보겠습니다. 서두에서 클라우드 서비스 벤더(Cloud Service Vendor)들이 IaaS > PaaS > SaaS > BaaS 식으로 진화해가고 있다고 했습니다. BaaS가 제일 효율적이고 좋다고 가정을 해도 기존에 사용자들과 수요가 여전히 존재하기 때문에 IaaS나 PaaS 같은 서비스를 종료할 수는 없습니다. 대부분의 클라우드 서비스는 IaaS > PaaS 까지는 비슷한 구조입니다. 예를 들어, MySQL을 사용한다면 AWS에서 MySQL을 사용하든 Azure에서 MySQL을 사용하든 심지어 SaaS 형태로 MySQL 서비스를 제공했다고 하더라도 MySQL은 MySQL일 뿐입니다.
SaaS > BaaS에서부터 현격하게 차이가 납니다. 기존의 레거시가 아니고 각 벤더들이 새로운 서비스를 직접 제작하여 만들었기 때문입니다. 각자 자신들의 클라우드 서비스를 유저들이 이용하도록 유도하기 위해서 하나의 목적이라도 세분화하고 거기에 맞는 최적화된 새로운 서비스를 만들어서 제공하거나 기존에 여러 파이프라인을 걸쳐야 했던 일들을 하나의 과정으로 합쳐서 개발하기 편리하게 만들어 하나의 서비스 형태로 제공했습니다.
처음 개념을 접하는 분들을 위해서 구체적으로 예를 들면, 데이터 저장이라는 하나의 목적을 비싸더라도 더 빠르게 읽고 쓰도록, 느리지만 싸고 많이 저장할 수 있도록, 많은 양의 데이터를 한 번에 처리할 수 있도록, 데이터 간 마이그레이션이 편하도록 등등 DB의 형태를 수십가지로 쪼개서 별도의 서비스 형태로 제공하는 것입니다. 이런 큰 목적이 수십 가지이고 이 수십 가지를 다시 각각 수십 가지로 쪼개서 서비스가 파생하고 기존의 IaaS, PaaS 서비스까지 합해져서 이제 각 클라우드에서 제공하는 서비스들이 수백 가지가 넘어갑니다. 클라우드를 시작하는 개발자들이 처음 '헉'소리가 나오는 이유입니다.
이 파생된 서비스들과 디테일에서 아주 큰 차이를 가져오기도 하지만, 아이러니하게도 거시적으로는 이것 또한 상향 평준화 되어갑니다. 한 곳에서 좋은 서비스를 만들면 다른 곳에서도 금방 비슷한 서비스가 나오기 때문이다.
예전에 한 클라우드 서비스에서 네임서버 문제로 해당 클라우드를 사용하는 일부 서비스들이 반나절 동안 먹통이 되는 경우가 있었습니다. 또한 글로벌하게 유명한 서비스가 하나의 클라우드에 장애가 생겨서 멀티 클라우드(Multi Cloud)로 전환한 바가 있습니다.
언어나 프레임워크와 마찬가지로 각 클라우드는 각자 장단점이 있고 대부분 비슷한 공통된 서비스들과 각자 특화된 서비스들이 있습니다. 이제는 어떤 클라우드를 선택해야 하는 것보다는 멀티 클라우드가 가능하게끔 설계를 하는 것이 더 중요하다고 생각합니다. 특히 글로벌 서비스의 경우, 다양한 선택지를 가지고 유연하게 대처할 수 있는 것이 중요합니다. 멀티 클라우드를 위해서는 가급적 클라우드에 종속적인 기술을 지양하거나 해당 기술을 사용하더라도 다른 클라우드에서 우회할 수 있는 방법으로 서비스를 설계해야 합니다.
출처: 위펄슨 기술 블로그