Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

클라우드 개요

클라우드 컴퓨팅은 컴퓨터 시스템의 구성 요소들을 모아서 하나의 풀로 만든다. 그리고 어떤 유저가 컴퓨터 자원을 요청 할 때, 풀에서 일부분을 떼어내서 대여하는 서비스를 클라우드 서비스라고 한다.

사용자는 직접 물리적인 인프라를 구성, 운영하는 대신에, 마치 "전기나 수도"처럼 필요한 필요한 만큼 빌려서 사용 할 수 있다. 때문에 다른 복잡한 것들에 신경쓰지 않고 핵심 비지니스에 집중 할 수 있게 한다.

또한 클라우드 서비스 제공자는 컴퓨팅 자원의 요청에서 전개, 회수까지를 소프트웨어화 해서 제공하기 때문에, 사용자는 클릭 몇 번만으로 인프라를 전개 할 수 있다. 클라우드 환경에 익숙한 조직이라면 API나 CLI로 이 과정을 완전히 자동화 할 수 있다. 사용자 입장에서는 프로그래밍 가능한 소프트웨어처럼 보이는 것이다. 인프라가 소프트웨어화 되면서, 사용자(개발자와 관리자)는 유연함과 속도라는 큰 장점을 얻게 된다.

단지 컴퓨팅 자원만 전개하는 것이라면, 큰 장점이 아니라고 생각 할 수 있다. 고전적인 서버 호스팅의 경우에도 많은 부분을 추상화 했기 때문에, 클릭 몇 번이면 수분만에 서버를 전개할 수 있기 때문이다. 그리고 클라우드 서비스는 "생각하는 것 저렴하지 않다". (비교적)본격적으로 클라우드 서비스가 국내에 서비스되던 2010년 경에는 "저렴한 비용"을 클라우드의 특징으로 소개하고는 했지만, 지금은 누구도 비용을 클라우드의 특징이라고 하지 않는다.

컴퓨팅 자원만 전개하는 입장에서 클라우드를 보면, 그 다지 큰 장점이 없어보일 수 있겠다. 하지만 클라우드 서비스는 단일 서버 시스템을 올리는 것 이상의 일을 한다. 지금의 클라우드 서비스는 이를테면 인터넷 상에 완전한 데이터센터의 구축을 위한 모든 것을 제공한다. 글로벌한 전개를 위한 거점 제공, 완전히 제어 가능한 네트워크, 관리가 필요없는 풀 매니지드 서비스들, (거의)무한히 확장 할 수 있는 저장소, 가용성 툴, 모니터링 도구, 보안 솔류션 등을 포괄한다.

여기에서는 클라우드에서 무엇을 얻을 수 있는지, 왜 클라우드를 사용해야 하는지를 살펴볼 것이다.

소프트웨어로 정의되는 컴퓨팅 서비스

도요다는 린 개발 공정을 도입한다. 린 개발 공정은 설계,개발,품질,판매 까지의 과정을 압축해서 제품의 라이프사이클을 짧게 가져감으로써, 시장의 변화에 능동적으로 대처하기 위해서 만들어진 일하는 방법 이다.

이게 소프트웨어에 적용된게 애자일이다. 설계에서 테스트, 품질관리, 전개, 고객의 피드백까지를 압축시켜서 시장의 요구에 유연하게 대응할 수 있도록 조직과 일하는 방식을 리엔지니어링 한게 애자일이다.

이렇게 새로운 개발 방법을 도입한 이유는 첫번째. 인터넷 시장의 빠른 변화에 대응해서 살아남기 위함이며, 두번째. 시장의 요구에 선제적으로 움직여서 시장을 주도 하기 위함이다. 핵심은 변화에 대한 적응 이라고 할 수 있겠다.

린 개발 공정을 생각해보자. 만약에 하드웨어까지 이러한 업무 프로세스에 녹여낸다면 어떻게 될까 ? 예를 들어 설계의 내용을 즉시 반영해서, 자동차 조립 라인이 만들어지고, 이게 아니다 싶으면 조립라인을 새로 만들 수 있도록 된다면 어떤 일이 벌어질까. 자동차 산업의 혁명이 일어날 것이다.

자동차 산업에서는 이러한 일이 일어나지 않았지만(주문형 공장이나 소프트웨어로 완전제어되는 로보트들로 이루어진 공장이 만들어진다면 모르겠다.) 소프트웨어에서는 이런 일이 일어났다. 클라우드의 등장이 그것이다.

클라우드는 "하드웨어로 정의되던 컴퓨팅 자원들을 소프트웨어로 정의"할 수 있게 된 상태를 의미한다. 하드웨어라는 물리적 제약을 장애물을 뛰어넘게 되면서, 컴퓨팅 자원을 소프트웨어 개발 공정에 녹여낼 수 있게 됐다. 이를테면 애자일 + 컴퓨팅 자원이 된 건데, 이 흐름이 만들어낸 기술 트랜드가 DevOps(데봅스)다.

클라우드의 분류

클라우드는 기존에 물리적으로 정의되던 자원을 소프트웨어로 추상화 했다. 이 추상화 정도에 따라서 클라우드 서비스 타입을 분류할 수 있다.

 클라우드 서비스 분류

On-Premises는 하드웨어까지 직접 관리하는 방식이다. 서버실 혹은 데이터센터를 만들고(일부를 임대하거나), 네트워크, 스토리지, 소프트웨어를 모두 관리한다.

Infrastructure as a Server 부터 Software as a Service 까지는 클라우드의 타입에 들어간다. 클라우드 서비스 제공자에 따라서 3개 타입 모두를 지원하거나 일부를 지원한다. 또한 각 타입에서도 지원하는 범위에 있어서 차이가 있을 수 있다. AWS의 경우 3개 타입 모두를 지원한다.

Infrastructure as a Service

IaaS(Infrastructure as a Service)는 물리적인 컴퓨팅 자원을 가상화 하는 타입으로 물리적인 컴퓨팅 자원을 서비스 형태로 제공한다.. IaaS는 컴퓨팅, 네트워킹, 스토리지 등을 전개하고 모니터링하기 위한 완전한 서비스를 제공하는 것을 목표로 한다. 사용자는 하드웨어를 구매할 필요 없이, 필요에 따라서 API를 호출하는 것으로 리소스를 구입 할 수 있다. 클라우트 타입에서는 추상화가 가장 낮은 단계의 서비스다. 추상화가 낮다는 것은 가장 쉽게 마련할 수 있는 서비스이며, 다른 타입의 기반이 되는 서비스라는 걸 의미한다. 때문에 클라우드 서비스 제공자들은 IaaS 부터 시작하는 경우가 많다.

Platform as a Service

PaaS는 소프트웨어 서비스를 개발 할 때 필요한 플랫폼을 제공하는 서비스다. 사용자는 인프라 구축 및 유지관리의 복잡성을 신경쓰지 않고, 서비스 제공자가 제공한 플랫폼 위에서 응용 프로그램을 개발, 실행 및 관리를 할 수 있다. PaaS는 아래의 서비스들을 제공한다.

  • 네트워크 연결 인프라에서 애플리케이션을 실행하기 위한 런타임(Java 런타임, .NET 런타임, Python 런타임), 데이터베이스 등이 제공된다. 사용자는 애플리케이션과 데이터만 관리한다.
  • 사용자에게는 인프라, OS, 플랫폼 등이 감춰진다. 사용자는 (완전히는 아니지만) 비지니스로직만 구현하면 된다.
2008년 4월, 구글이 App Engine을 출시했다. 이전에도 PaaS 제공자가 있기는 했지만 일반적으로 App Engine을 본격적인 PaaS의 시작으로 보고 있다.

Software as a Service

SaaS는 구독(subscription)을 기반으로 라이센스되며 중앙에서 호스팅되는 소프트웨어 라이센싱 및 전달되는 클라우드 서비스 모델이다. 주문형 소프트웨어라고도 하며 한때 소프트웨어 플러스 서비스(Software plus services)라고 부르기도 했다.

일반적으로 SaaS는 웹 브라우저등의 씬 클라이언트를 사용해서 접근 한다. SaaS는 오피스 소프트웨어, 메시징, 급여처리 소프트웨어, DBMS, 관리 소프트웨어, CAD, 개발 소프트웨어, 게임, 회계, 협업, 가상화 등 많은 비지니스 애플리케이션의 배포/판매 모델로 사용하고 있다.

개념적으로 ASP(Application Hosting)가 SaaS와 아주 유사하다. 클라우드 엔지니어도 ASP와 SaaS의 차이점을 설명하는 것은 쉽지 않다. 개념적으로 동일하기 때문으로 사용자 입장에서는 둘 간에 차이가 거의 없기 때문이다. 차이는 애플리케이션 제공자 입장에 있다. SaaS는 IaaS를 바탕으로 하고 있기 때문에 멀티 테넌트(Multi Tenant), 설정관리(Configuration), 확장성(Scalability)을 담보한다. SaaS 제공자는 클라우드 환경에서 규모의 경제와 혁신을 실현, 비지니스 효과를 누릴 수 있다.

실제 AWS는 SaaS 제공자를 위한 AWS Marketplace 서비스를 운영중에 있다. AWS Marketplace에는 보안, 네트워크, ERP, CRM, 모니터링, 메시징, 클라우드 스토리지, SQL/NoSQL 등 수 많은 SaaS 애플리케이션이 거래되고 있다.

Mobile backend as a Service

MBaas는 웹 및 모바일 애플리케이션 개발자가 애플리케이션을 백앤드 클라우드 저장소 및 API에 연결하고 사용자 관리, 푸시 알림, 소셜 네트워킹등의 서비스와 통합하는 기능을 제공한다. 이들 기능은 모바일 소프트웨어 개발에서 어느 정도 정형화된 측면이 있는데, 이들 기능을 개발 할 필요 없이 빌려서 사용 하는 것으로 서비스의 주요 비지니스로직에 집중 할 수 있다. 클라우드 컴퓨팅에서는 비교적 최근에 나타난 모델이다.

Serverless Computing

인터넷 서비스는 기능의 실행은 서버 애플리케이션이 담당한다. 그리고 서버 애플리케이션이 하는 일은 결국 "함수의 실행"이다. 서버리스란 함수를 실행하는데, 서버장비와 운영체제, 런타임등을 클라우드 서비스 제공자가 관리를 하고, 개발자는 "함수만 개발"해서 올리는 모델이다.

서버리스란 이름에도 불구하고 실제로 서버없이 코드를 실행하는 것은 아니다. 하지만 사용자 입장에서는 가상 시스템을 임대할 필요가 없으므로 실질적으로는 서버 없이 실행되는 것처럼 보인다.

클라우드 컴퓨팅 전개 모델

프라이빗 클라우드

프라이빗 클라우드는 내부의 단일 조직만을 위해서 운영되는 클라우드 인프라스트럭처다. 공용으로 사용 할 수 있는 전력망이 있는데, 비지니스의 요구사항에 따라서 사설 전력망을 구축하는 경우와 비슷하다.

프라이빗 클라우드 프로젝트에 착수하려면, 비지니스 환경과 개발환경을 가상화하기 위한 상당한 노력이 필요하며, 리소스의 사용방법에 대한 의사 결정과정이 필요하다. 비지니스를 향상 시킬 수 있다는 장점이 있으나, 안정적인 프라이빗 클라우드 환경을 만드는 것 자체가 과업이며, 운영, 보안, 조직 문화 등 해결해야 하는 문제가 많기 때문에, 클라우드의 장점을 누리지 못하는 경우가 많다.

퍼블릭 클라우드

공공 사용을 위해 개방된 네트워크를 통해 서비스가 전개될 때, 이를 퍼블릭 클라우드라고 한다. 공공이란 공익을 위한이 아닌 "인터넷에서의 사용을 위한"을 의미한다.

기술적으로는 보안 고려사항을 제외하면 프라이빗 클라우드와 차이가 거의 없다. 프라이빗 클라우드가 외부로부터 격리된 환경에서 주로 접근 한다면, 퍼블릭 클라우드는 인터넷을 통해서 접근한다.

만약 퍼블릭 클라우드에 서비스 인프라를 구축했다면, AWS Direct Connect, Oracle FastConnect, Azure ExpressRoute, Cloud Interconnect 등과 같은 가상 사설망을 통해서 연결한다.

하이브리드 클라우드

하이브리드 클라우드는 두 개 이상의 클라우드로 구성된 클라우드 컴퓨팅 환경을 의미한다. 보통은 IT 조직이 가지고 있는 프라이빗 클라우드가 충족할 수 없는 애플리케이션 & 용량의 요구사항을 충족하기 위해서 퍼블릭 클라우드 컴퓨팅 리소스를 사용해야 하는 경우에 구성한다.

하이브리드 클라우드는 두 개 이상의 클라우드로 구성된 클라우드 컴퓨팅 환경을 의미한다. 보통은 IT 조직이 가지고 있는 프라이빗 클라우드가 충족할 수 없는 애플리케이션 & 용량의 요구사항을 충족하기 위해서 퍼블릭 클라우드 컴퓨팅 리소스를 사용해야 하는 경우에 구성한다.

클라우드의 장점과 단점

클라우드 컴퓨팅의 가장 큰 장점은 민첩성(기민성)이다. 컴퓨팅, 네트워크를 비롯해서 RDBMS, 메시지큐, 빅데이터 솔류션, 캐시, 가용성, 확장성, 보안까지가 소프트웨어에 통합 할 수 있기 때문이다. 소프트웨어가 하드웨어에 비해서 민첩한 이유를 생각해보면 된다.

사용자는 아이디어를 빠르게 테스트하고 검토 할 수 있다. 아이디어가 맘에 들지 않으면 수정된 아이디어 혹은 전혀 다른 아이디어를 테스트 해 볼 수 있다. 테스트한 아이디어는 빠르게 구현 할 수 있다. 이렇게 구현된 아이디어는 비지니스의 변화에 따라서 자유롭게 변경하고 확장 할 수 있다.

많은 사용자가 클라우드 컴퓨팅의 기밀성과 프라이버시에 대해서 우려를 표하고 있다. 예를 들어 NDA(비밀유지계약)에 따라 일을 해야 하는 보안담당자, 서비스 운영자들은 데이터의 암호화, 데이터가 저장된 위치 등과 관련된 정치적 문제를 직면해야 한다.

그리고 클라우드는 싸지 않다. 운영비만 고려한다면 AWS와 같은 클라우드를 이용하지 않는 편이 더 이득이다. 운영비 같은 것들은 계산이 명확하기 때문에, 클라우드 시스템을 적극적으로 도입하려는 조직은 IT 관리자를 설득하기 위해서 많은 준비를 해야 한다. 결국 조직은 총소유비용(TCO)관점에서 접근을 해야 하는데, 민첩성, 가용성, 확장성, 혁신성, 자동화, 통합 등 클라우드를 이용함으로써 얻을 수 있는 잇점은 수치화하기가 쉽지않다.

클라우드 엔지니어를 채용하는 것도 쉽지 않다. 시스템과 네트워크, 소프트웨어 개발, 품질과 보안 전반에 대한 통찰을 가지고 있는 팀을 만들어야 하는데, 오랫동안 분리돼 있던 분야라서 그런 개발자가 많지 않을 뿐더러, 어떤 개발자가 필요한지, 조직을 어떻게 만들고 운영해야 하는지 경험이 충분하지 않다.

클라우드 동향

클라우드 컴퓨팅은 여전히 연구 대상이다. 클라우드 컴퓨팅이 산업계에 완전히 안착하기 위해서는 복잡성 문제를 해결 해야 한다. 기술책임자들은 하드웨어에서 소프트웨어 영역에 이르는 대략 8개 이상의 계층을 통합하면서 필연적으로 발생하는 복잡도를 해결하기 위해서 노력하고 있다. 2011년 마이크로소프트사는 자사의 클라우드 서비스에 투자한 96억 달러의 예산 중 90%를 R&D에 사용했다.

가트너에 따르면 2018년 퍼블릭 클라우드 서비스 시장은 2017년의 1,535억 달러보다 21.4% 성정한 1,864억 달러를 기록할 것으로 예상하고 있다. 그리고 2021년경에는 2017년의 2배인 3,025억 달러를 기록할 것으로 예상하고 있다.

Cloud Service 2017 2018 2019 2020 2021
BPaas 42.6 46.4 50.1 54.1 58.4
Paas 11.9 15.0 18.6 22.7 27.3
SaaS 60.2 73.6 87.2 101.9 117.1
Management & Security 8.7 10.5 12.3 14.1 16.1
IaaS 30.0 40.8 52.9 67.4 83.5
Total Market 153.5 186.4 221.1 260.2 302.5

결론

클라우드는 완성된 시장이 아니다. 여전히 성장중이며, 많은 과제들이 산적해 있다. 클라우드 엔지니어인 내 입장에서 보자면, 개척이 끝나지 않은 영역이다. 2011년 쯤 클라우드 관련 업무를 시작했던 것 같은데, 분야를 잘 선택 한 것 같다. 해야 할게 너무 많아서 문제이긴 한데, 뭐 그 재미로 하는 거니까.