본문 바로가기
Study/Software Engineering

클라우드 서비스란? (Cloud Service)

by SeulKom 2011. 3. 22.

최근 IBM, MS, Google 등의 거대 기업들이 이 클라우드 컴퓨팅이라는 사업에 주력하고 있고, 열광하고 있다. 근데 정작 나는 소프트웨어 공학을 연구하는 한 사람으로 왜 이게 이렇게 각광을 받아야 하는지 제대로 조사해보지도 않고 있었다. (부끄럽다.)

이에, 클라우드 컴퓨팅이 무엇인지, 앞으로 어떻게 발전할 것인지를 지금에서라도 정리해보려고 한다. 



1. 배경

1990년대 초, 웹이 시작되면서 짧다면 짧은 그 시간동안 세상의 많은 것들을 바꾸어 놓았다. 컴퓨팅 속도와 데스크탑의 보급률이 는 매년 기하급수적으로 증가하면서 이를 이용하는 사용자들의 웹으로의 진출이 용이해졌다. 이로인해 웹은 또 다른 사회의 모습이 되어갔고, 웹의 보편화를 가능케 하는 인프라도 복잡 및 다양해졌다.

지금은 이런 복잡한 인프라를 기반으로 사용자들의 요구사항을 충족시키기 위해 웹 기반의 서비스들이 다양하게 제공되고 있으며, 이런 측면에서 이젠 데스크탑은 그저 웹을 접속하기 위한 수단이 되었다. (웹으로의 플랫폼 및 소프트웨어 이동, SaaS - Software as a Service, PaaS - Platform as a Service)

사용자들은 웹에서 제공하는 다양한 서비스들로 인해 서버를 유지할 필요를 느끼지 못하게 되었고, 서버 유지를 대신해줄 인프라서비스도 구축하게 된다. 이를 IaaS (Infrastructure as a Service) 라고 말하고, 사용자가 원하는 방법으로 필요한 만큼 서버를 구축하여 사용한다는 개념을 웹에다 포함시킨다.



2. 정의

"클라우딩 컴퓨팅은 사용자의 환경 밖에서 서비스로서 제공된 확장 가능한 컴퓨팅 자원을 사용한 양에 따라 비용을 지불하고 사용하는 것" [1] 이라고 할 수 있다. 사용자는 사용한 자원에 대한 비용만을 지불하며 클라우드 환경에 있는 모든 자원을 언제 어디서나 인터넷을 통해 액세스 할 수 있다.



3. 클라우드 서비스의 유형

SaaS (Software as a Service)
클라우드 서비스 중 가장 일반적인 유형이며 대부분의 사용자가 언젠가 사용해 본 경험이 있는 유형이다. SaaS 클라우드 모델에서는 서비스 제공자가 모든 인프라와 소프트웨어 제품을 제공한다. 사용자는 웹 기반의 프론트엔드를 사용하여 서비스와 상호작용한다. 이러한 서비스는 Gmail과 같은 웹 기반의 이메일에서 Mint와 같은 금융 소프트웨어에 이르기까지 다양한 범위에 적용된다.

PaaS (Platform as a Service) [2]
서비스 제공자가 자체 하드웨어 인프라에서 호스트하는 소프트웨어와 제품 개발 도구를 제공하는 클라우드 서비스이다. 사용자는 제공된 API와 플랫폼 또는 개발용 그래픽 사용자 인터페이스를 사용하여 애플리케이션을 개발(빌드)할 수 있다. 이러한 유형의 서비스에 대한 일반적인 사례로는 Salesforce.com의 Force.com과 Google App Engine을 들 수 있다.

IaaS (Infrastructure as a Service) [1]
가상 서버, 데이터 스토리지 및 데이터베이스와 같은 일련의 빌딩 블록에 대한 액세스를 서비스 형태로 제공하는 클라우드 서비스이다. 사용자는 이러한 빌딩 블록을 결합하거나 계층 구조화하여 애플리케이션을 실행하는 데 필요한 인프라를 구축할 수 있다. IaaS와 관련된 가장 유명한 사례는 AWS(Amazon Web Services)와 Rackspace이다.


즉, 제공되는 범위가
SaaS < PaaS < IaaS 라고 생각할 수 있다.

* 접근 권한에 따라 공용 / 사설 / 혼용(VPN사용) 의 형태로 클라우드 서비스를 제공할 수 있다.




4. PaaS 클라우드 서비스들의 사례

Google App Engine (Google code) [5][6][7]
Google의 인프라에서 웹 애플리케이션을 실행할 수 있다. JVM(Java Virtual Machine) 기반의 애플리케이션을 실행하기 때문에 Java가 아닌 언어로도 애플리케이션을 작성할 수 있다. (JRuby, Scala, Clojure, Groovy, Jython, Beanshell 등)

제한사항
- 사용자는 Python이나, Java 기술을 이용하여 사용할 수 있는 표준 라이브러리의 서브세트만을 사용할 수 있다.
- CPU 요청량, 메모리, 파일의 크기 등에 대한 할당향이 정해진다.
- 애플리케이션에 전달되는 모든 요청은 30초 내에 리턴되어야 한다.
- 사용자는 해당 파일 시스템에 대한 액세스 권한을 가지고 있지 않으며 애플리케이션의 일부로 업로드된 정적 파일만을 읽을 수있다.
- App Engine 환경에서는 사용자가 스레드나 프로세스를 생성할 수 없다.
- App Engine에서 사용된 스토리지 백엔드는 스키마리스 키 값 데이터 저장소인 BigTable이다.
- App Engine은 HTTP 요청에서 트리거되는 코드만 실행할 수 있다.

* 현재 Google App Engine 을 오픈 소스로 구현한 AppScale[3] 도 존재한다. AppScale은 IaaS 클라우드에서 Google App Engine 애플리케이션을 쉽게 실행할 수 있게 하는 클라우드 컴퓨팅 플랫폼이다. AppScale은 Google App Engine 애플리케이션을 로컬에서 테스트하고 디버그할 수 있는 유용한 방식이다. (오픈소스, 실험용으로 유용, 사설 클라우드, App Engine 호환성)



5. IaaS 클라우드 서비스의 특징 

테스트와 스테이징
완전한 테스트 환경과 스테이징 환경을 구축하여 사용할 수 있으며 필요 없는 경우에는 해체할 수 있다. 더 이상 환경을 준비하거나 하드웨어를 조달할 때까지 기다릴 필요가 없다. 테스트하고자 하면 언제든지 새로운 환경을 구축할 수 있으며 테스트가 완료된 후에는 구축한 환경을 해체할 수 있다.

웹 애플리케이션 전개 환경
사용자는 IaaS를 사용하여 웹 사이트를 실행할 수 있으며 필요 시에는 자원을 확장하여 트래픽 증가량을 쉽게 처리할 수 있다. IaaS 클라우드 서비스를 사용하여 특정 마케팅 캠페인이나 영업 전략을 제공하는 임시 웹 사이트를 추가로 작성할 수도 있다.

스토리지 니즈
엔터프라이즈에서는 클라우드 서비스를 파일이나 기타 고객 데이터를 저장하기 위한 공간으로 사용할 수 있다.

대용량 데이터 처리
클라우드 서비스의 기능을 사용하여 대용량 데이터 세트를 처리하고 대규모 병렬 처리를 활용할 수 있다. 필요 시에 대용량 데이터를 처리할 수 있는 그리드를 작성한 후, 처리가 끝난 다음, 이 그리드를 해체할 수 있다.




6. 클라우드 서비스와 웹 서비스의 관계 (Discussion)

클라우드 서비스는 SOAP 과 REST를 사용하여 접근 하며, 서비스 제공자가 제공하는 API (Operation)의 동작원리를 알 필요가 없는 느슨한 결합(Loosely coupled)을 통해 재사용성을 향상시킨다는 점에서 웹 서비스의 일부라고 생각한다. 웹 서비스의 개념을 플랫폼, 인프라로 확대 해석하여 사용자에게 제공해준다는 개념으로, 사용자에게 있어서는 기존 웹 서비스와 같지만, 개발자 입장에선 기존의 개념만으로는 서비스 및 리소스 제공에 불완전한 측면이 많은 듯 하다. 이를 해결하기 위해서 IBM에선 Eucalyptus [1], 산타바바라 대학에서 제공하는 플랫폼인 AppSclae[3] 와 같은 인프라 혹은 플랫폼을 오픈소스 소프트웨어로 제공하기도 한다. 계층 적인 모델링, 리소스에 대한 체계적인 관리가 필요한 분야가 된 것 같다.


하지만, 이는 기존의 CBD(Component-based development), Reliable software, Grid computing 개발 측면에서 고려했던 항목들도 포함되어 있기 때문에, 클라우드 서비스만의 특징을 좀 더 공부 및 연구해 볼 필요가 있다.


* Cloud service's issues [4]
 - Privacy
 - Compliance
 - Legal
 - Open source
 - Open Standard
 - Security
 - Availability and performance
 - Sustainability and siting



Reference 

[1] P. Changanti, 가상 인프라용 클라우드 서비스, Part 1: IaaS(Infrastructure as a Service) 및 Eucalyptus,
http://www.ibm.com/developerworks/kr/library/os-cloud-virtual1/index.html
 

[2] P. Changanti, 가상 인프라용 클라우드 서비스, Part 2: PaaS(Platform as a Service) 와 AppScale
http://www.ibm.com/developerworks/kr/library/os-cloud-virtual2/index.html 

[3] AppScale Project wiki
http://code.google.com/p/appscale/w/list 

[4] Wikipedia, Cloud Computing  
http://en.wikipedia.org/wiki/Cloud_computing

[5] Google App Engine
http://code.google.com/intl/ko-KR/appengine/ 

[6] likejazz, 구글 웹 어플리케이션 플랫폼: App Engine
http://www.likejazz.com/archives/280

[7] 한날, Google App Engine으로 "안녕하세요, 여러분" 출력하기
http://www.hannal.net/blog/say_hello-world_on_google-app-engine_service/

[8] J. Han., Cloud Computing
http://webappscon.com/2008/uploads/Program/ws-2-2.pdf