# Cloud Service

Cloud Service란 물리적인 서버들을 데이터 센터라는 곳에 모아놓고 원격으로 사용할 수 있게끔 대여를 해주는 서비스입니다. 실제 서버 머신을 만지거나 관리 할 일이 없기 때문에 구름에다가 갖다놓고 쓰는 기분(?)이라 클라우드 서비스라고 합니다. 예전에는 IaaS(Infrastructure as a Service)를 목표로 하였으나 차츰 발전하여 이제는 서버 임대 보다는 PasS(Platform as a Service), SaaS(Software as a Service) 형태로 진화하였습니다. 최근에는 Serverless를 화두로 BaaS(Backend as a Service)가 트렌드로 되어가고 있습니다.

saas-paas-iaas-diagram 출처: cloudflare

IaaS, PaaS, SaaS, BaaS 개념을 쉽게 설명하면

IaaS: Infrastructure as a Service

서버에 접속하는 IP랑 아이디/비번만 꼴랑 알려주고 직접 원격으로 접속하여 필요한 거 다 설치하고 관리하면서 운영해야 하는 서비스

PaaS: Platform as a Service

OS나 DB같은 필요한 도구들을 미리 설치해주고 최적화 되어 있어 서버에 접속하면 바로 사용할 수 있게끔 해준 서비스

SaaS: Software as a Service

서비스에 필요한 도구들을 소프트웨어 형태로 제작하여 머신 관리 없이 웹이나 API 형태로 쉽게 이용할 수 있는 서비스

BaaS: Backend as a Service

백엔드에서 필요한 도구들만을 모아서 인프라 구축이나 관리를 신경쓰지 않고 서버를 운영할 수 있게한 서비스

이 자체가 중요한 게 아니라서 짧게 설명했는데 짧은 설명이 더 힘드네요. 더 이상의 자세한 설명은 생략한다. DYOR!

# 선택지

클라우드 서비스 3대장은 AWS, GCP, Azure입니다.

# AWS vs GCP vs Azure

앞서 Backend Framework에서도 설명했듯이 목적이 동일한 서비스나 프레임워크는 대부분 비슷한 기능을 각자의 서비스에 맞게 이름만 다르게하여 제공합니다.(물론 디테일에 차이가 있기는 하지만 여기서는 크게 중요하지 않습니다.)

다음은 같은 목적의 이름만 다른 서비스들입니다.(일부러 이해를 쉽게 이런 표현을 했습니다.)

기능 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 식으로 진화해가고 있다고 했습니다. BasS가 제일 효율적이고 좋다고 가정을 해도 기존에 사용자들과 수요가 여전히 있기 때문에 IaaS나 PasS 같은 서비스를 종료할 수는 없습니다. 대부분의 클라우드 서비스는 IaaS > PaaS 까지는 비슷한 구조입니다. 예를 들어, MySQL을 사용한다면 AWS에서 MySQL을 사용하든 Azure에서 MySQL을 사용하든 심지어 SaaS 형태로 MySQL 서비스를 제공했다고 하더라도 MySQL은 MySQL일 뿐입니다.

SaaS > BaaS 에서부터 현격하게 차이가 납니다. 기존의 레거시가 아니고 각 벤더들이 새로운 서비스를 직접 제작하여 만들었기 때문입니다. 각자 자신들의 클라우드 서비스를 유저들을 이용하도록 꼬시기(?) 위해서 하나의 목적이라도 세분화하고 거기에 맞는 최적화된 새로운 서비스를 만들어서 제공하거나 기존에 여러 파이프라인을 걸쳐야 했던 일들을 하나의 과정으로 합쳐서 개발하기 편리하게 만들어서 하나의 서비스 형태로 제공했습니다.

처음 개념을 접하는 분들을 위해서 구체적으로 예를 들면, 데이터 저장이라는 하나의 목적을 비싸더라도 더 빠르게 읽고 쓰도록, 느리지만 싸고 많이 저장할 수 있도록, 많은 양의 데이터를 한 번에 처리할 수 있도록, 데이터 간 마이그레이션이 편하도록 등등 DB의 형태를 수십 가지로 쪼개서 별도의 서비스 형태로 제공하는 것입니다. 이런 큰 목적이 수십 가지이고 이 수십 가지를 다시 각각 수십 가지로 쪼개서 서비스가 파생하고 기존의 IaaS, PaaS 서비스까지 합해져서 이제 각 클라우드에서 제공하는 서비스들이 수백 가지를 넘어갑니다. 클라우드를 시작하는 개발자들이 처음 '헉' 소리가 나오는 이유입니다. (필수적으로 알아야하는 서비스들에 대하여 하단에 부록으로 정리해 놓았습니다.)

이 파생된 서비스들과 디테일에서 아주 큰 차이를 가져오기도 하지만, 아이러니하게도 거시적으로는 이것 또한 상향 평준화 되갑니다. 한곳에서 좋은 서비스를 만들면 다른 곳에서도 금방 비슷한 서비스가 나옵니다.

각 클라우드의 자세한 비교에 대해서는 인터넷에 널리 포스팅이 되어있기 때문에, 여기서는 조금 다른 얘기를 해보겠습니다.

# Multi Cloud

예전에 한 클라우드 서비스에서 네임서버 문제로 해당 클라우드를 사용하는 일부 서비스들이 반나절동안 먹통이 되는 경우가 있었습니다. 또한 글로벌하게 유명한 서비스가 하나의 클라우드에 장애가 생겨서 멀티 클라우드(Multi Cloud)로 전환한 바가 있습니다.(비방으로 비춰질 수 있어 참고 링크나 서비스/회사명등은 일부러 기재하지 않았습니다.)

언어나 프레임워크와 마찬가지로 각 클라우드는 각자 장단점이 있고 대부분 비슷한 공통된 서비스들과 각자 특화된 서비스들이 있습니다. 이제는 어떤 클라우드를 선택해야 하는 것보다는 멀티 클라우드가 가능하게끔 설계를 하는 것이 더 중요하다고 생각합니다. 특히 글로벌 서비스의 경우, 다양한 선택지를 가지고 유연하게 대처할 수 있는 것이 중요합니다. 멀티 클라우드를 위해서는 가급적 클라우드에 종속적인 기술을 지양하거나 해당 기술을 사용하더라도 다른 클라우드에서 우회할 수 방법으로 서비스를 설계해야 합니다.

# Serverless Framework

Serverless Framework는 Node.js 기반에 오픈소스 프레임워크로 멀티 클라우드를 활용하기 위한 좋은 도구입니다. 각 클라우드 서비스들의 설정과 관리 방법이 다른데 Serverless Framework는 추상화된 레이어를 도입하여 한 번의 개발로 3사 클라우드에 모두 배포하거나 이전을 하기 편리하게 되어 있습니다. 예외처리를 통하여 각 클라우드에 특화된 기능들도 사용이 가능합니다. "이 프레임워크가 너무 좋다"라기 보다는 특정 플렛폼에 종속적이지 않게 개발하는 것 또한 중요하고 때론 일부러 종속성을 강하게 개발을 할 수도 있고, 이런 아키텍처를 생각해 볼 수 있게끔 한다는 데에 더 의의를 두고 있습니다.

TIP

Serverless Framework란 우리가 일반적으로 말하는 Serverless 기술 자체가 아니고 Serverless 기술들을 사용하기 쉽게 만들어놓은 프레임워크입니다. 이름이 같다보니 Serverless Framework = Serverless 라고 착각하기 쉬운데 그냥 React, Vue 같은 백엔드용 프레임워크라고 생각하시면 쉽습니다. Serverless에 대한 자세한 설명은 이어진 포스팅에서 합니다.

# 정리

저희 서비스는 멀티 클라우드를 전제로 하고 있고 실제로도 멀티 클라우드의 형태로 구축이 되어 있습니다. 이어지는 Serverless 포스팅에서 자세한 내용이 함께 정리되어 있습니다.

# 부록: AWS에서 알아야 하는 서비스

AWS에서 서비스가 너무 많다보니 신입사원들이 자주 질문을 합니다.

이 많은 것을 다 알아야 하나요?

AWS의 서비스들은 하나하나가 서비스 블록이라 많이 알수록 좋기는 합니다. 특정 기능을 구현하려고 할 때 해당 서비스 블록을 알고 있음으로 하여 더 편리하거나 빠르게 구현이 가능합니다.

GCP나 Azure도 마찬가지이기는 하나 우선적으로 집중을 할 수 있도록 AWS와 자사 서비스를 기준으로 분리해 보았습니다.

AWS 제품 살펴보기 페이지에 나와 있는 카데고리 순서대로 정리하였습니다.(2020년10월기준)

A: 우리 서비스에 필요한 기술 또는 사용하지 않더라도 기본 소양으로 알아야 하는 서비스
B: 우리 서비스에 차후에 적용될 기술 또는 필수적이진 않더라도 알았으면 하는 서비스
알아야 할 것 같은데 빠진 기술들은 자사에서 다른 벤더 기술을 사용하기 때문입니다.

카테고리 서비스 필수
Analytics Amazon Athena A
Amazon CloudSearch B
Amazon Elasticsearch Service A
Amazon EMR
Amazon Kinesis A
Amazon Managed Streaming for Apache Kafka
Amazon Redshift B
Amazon QuickSight
AWS Data Exchange
AWS Data Pipeline
AWS Glue B
AWS Lake Formation
Application Integration AWS Step Functions A
Amazon AppFlow
Amazon EventBridge
Amazon MQ
Amazon Simple Notification Service (SNS) A
Amazon Simple Queue Service (SQS) A
Amazon AppSync A
AR & VR Amazon Sumerian
AWS Cost Management AWS Cost Explorer A
AWS Budgets A
AWS Cost and Usage Report B
Reserved Instance Reporting
Savings Plans
Blockchain Amazon Managed Blockchain B
Amazon Quantum Ledger Database (QLDB)
Business Applications Alexa for Business B
Amazon Chime
Amazon Honeycode (Beta)
Amazon WorkDocs
Amazon WorkMail
Compute Amazon EC2 A
Amazon EC2 Auto Scaling A
Amazon Lightsail
AWS Batch B
AWS Elastic Beanstalk
AWS Lambda A
AWS Outposts
AWS Serverless Application Repository
AWS Snow Family
AWS Wavelength
VMware Cloud on AWS
Containers AWS App2Container
Amazon Elastic Container Registry B
Amazon Elastic Container Service (ECS) B
Amazon Elastic Kubernetes Service (EKS) A
AWS Fargate B
Customer Engagement Amazon Connect
Amazon Pinpoint B
Amazon Simple Email Service (SES) A
Contact Lens for Amazon Connect
Database Amazon Aurora A
Amazon DynamoDB A
Amazon DocumentDB (with MongoDB compatibility)
Amazon ElastiCache A
Amazon Keyspaces (for Apache Cassandra)
Amazon Neptune
Amazon Quantum Ledger Database (QLDB)
Amazon RDS A
Amazon RDS on VMware
Amazon Redshift B
Amazon Timestream
AWS Database Migration Service B
Developer Tools Amazon CodeGuru
Amazon Corretto
AWS Cloud Development Kit (CDK)
AWS Cloud9
AWS CodeArtifact
AWS CodeBuild
AWS CodeCommit
AWS CodeDeploy
AWS CodePipeline
AWS CodeStar
AWS Command Line Interface
AWS Device Farm
AWS Tools and SDKs
AWS X-Ray B
End User Computing Amazon AppStream 2.0
Amazon WorkDocs
Amazon WorkLink
Amazon WorkSpaces
Front-End Web & Mobile AWS Amplify A
Amazon API Gateway A
Amazon Pinpoint B
AWS AppSync A
AWS Device Farm
Game Tech Amazon GameLift
Amazon Lumberyard
Internet of Things AWS IoT Core
AWS Greengrass
AWS IoT 1-Click
AWS IoT Analytics
AWS IoT Button
AWS IoT Device Defender
AWS IoT Device Management
AWS IoT Events
AWS IoT SiteWise
AWS IoT Things Graph
AWS Partner Device Catalog
FreeRTOS
Machine Learning Amazon SageMaker B
Amazon Augmented AI
Amazon CodeGuru
Amazon Comprehend
Amazon Elastic Inference
Amazon Forecast
Amazon Fraud Detector
Amazon Kendra
Amazon Lex
Amazon Personalize
Amazon Polly
Amazon Rekognition
Amazon SageMaker Ground Truth
Amazon Textract
Amazon Translate
Amazon Transcribe
AWS Deep Learning AMIs
AWS Deep Learning Containers
AWS DeepComposer
AWS DeepLens
AWS DeepRacer
Amazon Inferentia
PyTorch on AWS
Apache MXNet on AWS
TensorFlow on AWS B
Management & Governance Amazon CloudWatch A
AWS Auto Scaling A
AWS Chatbot
AWS CloudFormation A
AWS CloudTrail B
AWS Command Line Interface A
AWS Compute Optimizer
AWS Config
AWS Control Tower
AWS Console Mobile Application
AWS License Manager
AWS Management Console A
AWS Managed Services
AWS OpsWorks
AWS Organizations B
AWS Personal Health Dashboard
AWS Service Catalog
AWS Systems Manager
AWS Trusted Advisor
AWS Well-Architected Tool
Media Services Amazon Elastic Transcoder B
Amazon Interactive Video Service
Amazon Kinesis Video Streams B
AWS Elemental MediaConnect
AWS Elemental MediaConvert A
AWS Elemental MediaLive
AWS Elemental MediaPackage
AWS Elemental MediaStore
AWS Elemental MediaTailor
AWS Elemental Appliances & Software
Migration & Transfer AWS Migration Hub
AWS Application Discovery Service
AWS Database Migration Service
AWS DataSync
AWS Server Migration Service
AWS Snow Family
AWS Transfer Family
CloudEndure Migration
Migration Evaluator (formerly TSO Logic)
Networking & Content Delivery Amazon VPC A
Amazon API Gateway A
Amazon CloudFront A
Amazon Route 53 A
AWS PrivateLink
AWS App Mesh
AWS Cloud Map
AWS Direct Connect
AWS Global Accelerator
AWS Transit Gateway
Elastic Load Balancing A
Quantum Technologies Amazon Braket
Robotics AWS RoboMaker
Satellite AWS Ground Station
Security, Identity & Compliance AWS Identity & Access Management A
Amazon Cognito A
Amazon Detective
Amazon GuardDuty
Amazon Inspector
Amazon Macie
AWS Artifact
AWS Certificate Manager A
AWS CloudHSM
AWS Directory Service
AWS Firewall Manager
AWS Key Management Service B
AWS Resource Access Manager
AWS Secrets Manager
AWS Security Hub
AWS Shield
AWS Single Sign-On
AWS WAF
Serverless AWS Lambda A
Amazon API Gateway A
Amazon DynamoDB A
Amazon EventBridge
Amazon Simple Notification Service (SNS) A
Amazon Simple Queue Service (SQS) A
Amazon Simple Storage Service (S3) A
AWS AppSync A
AWS Fargate B
AWS Step Functions A
Storage Amazon Simple Storage Service (S3) A
Amazon Elastic Block Store (EBS)
Amazon Elastic File System (EFS)
Amazon FSx for Lustre
Amazon FSx for Windows File Server
Amazon S3 Glacier B
AWS Backup
AWS Snow Family
AWS Storage Gateway
CloudEndure Disaster Recovery
Last Updated: 10/29/2020, 3:39:34 PM