Cloud Computing 이란?

Updated:

최근에 기술 포스팅들을 보면 우리 시스템이 “클라우드로 전환했다”, “클라우드에 구축했다” 라는 내용을 많이 볼 수 있다. 그럼 이 클라우드가 무엇인지, 클라우드를 도입하면 어떤 혜택을 얻을 수 있는지 알아보자.

Cloud Computing

Cloud computing이란 클라우드 서비스 제공업체로 부터 CPU, Storage, Network과 같은 하드웨어 인프라부터 애플리케이션 구동을 위해 필요한 다양한 플랫폼 영역의 많은 기술들을 서비스의 형태로 제공 받고, 이런 서비스의 사용에 따른 비용을 지불하는 방식을 말한다. Cloud Computing

이렇게 우리는 클라우드 컴퓨팅을 통해 다음과 같은 혜택들을 얻을 수 있게 된다.

  • 인프라나 플랫폼을 서비스의 형태로 사용하고, 사용량에 따라 종량제 또는 사용량 기반의 가격 책정 모델을 제공받을 수 있다.
  • 수요나 워크로드에 따라 사용되는 리소스를 빠르게 늘리거나 줄일 수 있다.
  • 하드웨어 인프라, 플랫폼을 서비스의 형태로 사용함으로써 하드웨어와 소프트웨어의 관리 책임과 부담을 줄일 수 있다
  • 데이터의 백업, 재해 복구 및 데이터 복제의 서비스를 제공 받을 수 있다.
  • 클라우드 공급 기업은 전 세계 다양한 지역에 데이터 센터를 운영하므로, 어느 곳에서도 최적의 성능으로 시스템을 운영할 수 있다.
  • 가장 관리하기 어려운 보안, 보안을 위한 정책, 기술제어와 전문 기술 지원을 받을 수 있다.

사실 이 외에도 많은 혜택을 누릴 수 있지만 대표적인 몇가지에 대해서 알아봤다.

그렇다면 클라우드의 다양한 배포 모델에 대해 알아보자

클라우드 배포 모델

보통 클라우드라 하면 Public 클라우드를 많이 얘기한다. 하지만 클라우드는 Public 뿐 아니라 Private 클라우드, 그리고 Public-Private-On Premise를 조합해서 사용하는 Hybrid 클라우드와 같이 다양한 배포 모델을 제공한다. Cloud Distrbuting Model

Public 클라우드는 표현 그대로 Public한 공간에 시스템 운영을 위한 리소스를 할당 받아 서비스를 하는 형태로 높은 확장성과 안정성, 고 가용성의 잇점을 최대한 누릴 수 있는 형태의 배포 모델이다. Private 클라우드는 공유되지 않은 공간에 나만의 클라우드를 구축해서 운영하는 것으로, Public 클라우드를 활용했을 때 충족하지 못하는 정책이나 보안 요구사항이 있는 경우 선택할 수 있는 모델이다. 하지만 이 Private 클라우드는 장비를 소유해야 하므로 이로 인한 민첩성에 제한이 있을 수 있다. (인프라의 크기 조정을 위해나 장비의 구매, 설치, 설정에 많은 시간이 필요하다.) 따라서 이런 Public과 Private의 장단점이 존재하게 되는데 장점을 최대한 누리면서도 단점을 최소화하기 위해서는 Hybrid 클라우드를 선택할 수 있다. Private 클라우드 도입을 통해 특수한 정책, 보안 요구사항이 필요한 영역은 Legacy 시스템에 구축해서 운영하고, 확장이 필요한 경우 Public 클라우드로 확장함으로써 비용 효율성을 얻을 수 있게 된다. 이런 특징으로 최근 Hybrid 클라우드가 많이 채택되고 있다. 하지만 이 Hybrid 클라우드도 On Premise-Public 클라우드를 같이 사용하게 되어 설정이나 관리가 복잡하고 어렵다는 단점이 있다.

클라우드 서비스 유형

IaaS, PaaS, SaaS, 클라우드과 같이 많이 들어봤을 단어들이다. IaaS는 Infra as a Service, PaaS는 Platform as a Service, 그리고 SaaS는 Software as a Service로 인프라, 플랫폼, 소프트웨어를 서비스의 형태롤 제공받아 사용할 수 있다는 것을 말한다. 그럼 이 세가지의 클라우드 서비스 유형을 기존 On-Premise 와 비교해서 차이점에 대해 알아보자

Cloud Service Type

네트워크, 스토리지, 서버, 그리고 가상화의 영역까지를 인프라의 영역이라고 하며, 그 위에 소프트웨어와 데이터 구축을 위한 운영체제, 미들웨어와 라이브러리 구축 영역을 플랫폼이라고 한다. 마지막으로 소프트웨어와 데이터 영역을 애플리케이션 영역이라고 한다. On-Premise에서 시스템을 구축하는 경우 인프라 영역의 서버, 스토리지 설치와 네트워크 구축부터 시스템 운영을 위해 운영체제, 미들웨어와 애플리케이션 구동을 위한 라이브러리를 구성하고 그 위에 우리가 개발한 애플리케이션과 데이터베이스를 구축해야 한다. 다시말애 저 끝단의 하드웨어의 구축부터 애플리케이션 개발과 설치의 전체 영역을 프로젝트 팀에서 해야한다는 것이다. 그런데 우리가 IaaS를 도입하게 되면 서버, 스토리지 설치와 네트워크 구축의 인프라 영역을 실제 구축없이 클라우드 서비스 제공업체로 부터 서비스의 형태로 제공받아 사용할 수 있게 된다. 여기에 플랫폼 영역까지를 서비스의 형태로 제공받을 수 있는 PaaS를 도입하게 되면, 우리는 비즈니스를 구현하는 애플리케이션과 데이터 구축만 직접하게 되고, 이를 통해 하드웨어와 플랫폼 구축의 시간을 최소화해서 비즈니스 민첩성을 극대화 할 수 있게 된다. 추가로 SaaS는 Google Docs 같이 로컬 PC에 설치 없이도 클라우드 상에 구축된 워드 프로세서를 활용하는 것 처럼 애플리케이션과 데이터 마저도 서비스의 형태로 제공받아 사용하는 것을 말한다. 최근 우리 회사도 Microsoft 365를 도입했는데 이 서비스도 SaaS의 형태라고 말할 수 있다.

이렇게 클라우드를 어떤 배포 모델, 어떤 서비스의 유형을 선택해서 도입함으로써 비즈니스 상 많은 혜택을 누릴 수 있게 된다. 그럼 클라우드의 도입에 따라 애플리케이션은 어떤 변호가 필요한지 애플리케애션의 유형에 대해 알아보자.

클라우드 애플리케이션 유형

Cloud app Type

앞에서 얘기한 데로 IaaS를 도입하는 경우, 우리는 서버, 스토리지, 네트워크 구축의 하드웨어 인프라 구축 영역을 서비스의 형태로 제공받을 수 있게 된다. 이렇게 구축된 인프라 위에 우리의 애플리케이션을 이전하기 위해서는 애플리케이션과 데이터베이스에 적합한 운영체제와 미들웨어, 런타임 환경을 구축한 후 그 위에 애플리케이션을 설치한다. 이 경우 플랫폼 구성을 위한 작업과 최소한의 애플리케이션 설정 변경 만으로 클라우드 환경으로 애플리케이션을 이전할 수 있다. 그런데 보통 클라우드에 시스템을 구축하는 프로젝트를 한다고 하면, 가운데와 오른쪽 그림과 같이 PaaS 위에 기존 Monolith 또는 Microservice의 형태로 애플리케이션을 구축하는 것을 말한다. PaaS 위에 구축하는 Monolith 구조의 애플리케이션을 Cloud Friendly Application이라고 하고, Microservice 형태로 구축되는 애플리케이션을 Cloud Native Application이라고 하나. Paas 위에 Monolith 구조의 애플리케이션을 구축하기 위해서는 비즈니스의 구현에 변경 없이 애플리케이션과 데이터베이스 설정 변경이 필요하다, 즉 기존 방식과 동일한 구조로 개발하고 PaaS에 배포하고 운영하기 위한 설정의 변경이 필요하다는 것이다. 그러나 Cloud Native Application 구축을 위해서는 서비스의 분리, 서비스 별 데이터베이스 분리와 같이 코드를 재 개발하는 수준의 많은 변경이 필요하다, 다시 말해 기존 개발 방식과 다른 새로운 방식으로 개발해야 하고 또 다양한 외부 아키텍처에 해당하는 서비스들을 추가로 구축해야 하는 등 개발이 가장 어려운 방식이라고 할 수 있다.

이렇게 PaaS를 도입하는 경우, Cloud Native Application, Microservice가 가장 좋으니까 무조건 선택해야 한다는 것은 아니다, 비즈니스의 요구사항과 운영환경, 민첩성, 안정성, 고가용성 등 다양한 요구사항에 적합한 형테를 선정하는 것이 중요하다.

정리

2016년 사내 온라인 교육 플랫폼을 Cloud와 MSA를 적용해 개발하는 프로젝트에 참여한 경험이 있다. 처음으로 MSA를 적용하는 프로젝트, Microservice로 개발하는 프로젝트로 책에서 봤던 DDD(Domain-Driven Design)까지 Full로 적용했었다. 예상했겠지만 프로젝트 전체가 새로운 인프라, 새로운 플랫폼, 새로운 애플리케이션 개발 방법과 새로운 애플리케이션 유형을 적용해서 개발하느라 개발 기간 내내 혼동 속에서 진행을 했었다. 당시 부족했던 지식과 경험으로도 어찌어찌 프로젝트를 완료하게 되었고,이 후 몇번의 프로젝트로 우리 회사에서 수행하는 Cloud/MSA 적용 프로젝트에 적합한 관리/개발 방법론을 정립할 수 있었다. 이게 CNAPS 방법론이다. 만약 16년도에 지금의 지식을 갖고 있었더라면 우리 회사의 온라인 교육 플랫폼이 Cloud Friendly Application으로 개발되었을 수도 있지 않았을까 라는 생각을 해보며 글을 마무리 한다.

감사합니다..