Egloos | Log-in


실전! 디스어셈블리로 디버깅하기

C/C++코드로 작성된 실행파일의 릴리즈 빌드의 경우 디버그 빌드와 달리 컴파일러가 성능을 위한 다양한 최적화를 통해 기계어 코드를 만들어 내므로 크래쉬 덤프에서 각 소스코드의 변수에 해당하는 모든 값을 제대로 볼 수 없는 경우가 빈번하다.
많은 프로그래머들이 디버거에서 쉽게 그 내용을 볼 수 없다는 이유로 근성 없이 크래쉬 덤프 보기를 포기하곤 하나, 빨리 해결하지 못하면 자신의 퇴근 시각이 늦춰지고 팀 전체가 괴로워질 뿐이다.
그나마 있는 정보를 가지고 문제를 빨리 잡기 위해서는 실행파일의 기계어 코드 수준에서 변수나 메모리의 내용을 확인해야 하는것이 훨씬 건강에 이로울 수 있다. 처음이 두려울 뿐이지 한두번 하다보면 금방 익숙해지게 마련이다. 더욱 익숙해지면 변수의 값이 이상하다고 생각함과 동시에 Alt-8을 누르는 자신을 발견하게 될지도 모른다.

비주얼스튜디오의 디버그 모드에서 소스 코드에 중단점이 걸려 있을 때, Alt-8를 누르면 각 소스코드 라인별로 disassembly를 볼 수 있다. 여기부터는 CPU와 C++ 컴파일러에 대한 지식이 다수 필요한데, 초보적인 내용은 모두 알고 있다고 가정하고 기술하고자 한다. 혹시 각 레지스터의 용도에 대해 가물가물한 사람이라면 다음의 문서를 참고하자. http://en.wikipedia.org/wiki/X86

어셈블리 코드에 익숙한 사람이라고 해도, 고급 언어로부터 컴파일 된 결과에 대해서는 익숙치 않을 수 있으므로 이들의 호출 규약에 대해서는 아래 문서를 참고하면 된다.
http://en.wikipedia.org/wiki/X86_calling_conventions#x86-64_calling_conventions

컴파일러에 의한 최적화 때문에 각 레지스터와 스택 내 주소는 기계어 코드 단락마다 다른 용도로 사용될 수 있으므로, 기계어 코드를 따라가며 원하는 변수가 어느 레지스터 혹은 어느 메모리에 저장되어 있는지 유추해 내야 한다. 그나마 이 과정을 쉽게 추적할 수 있는 몇가지 규칙을 설명하면 다음과 같다.


스택부터 시작
(스택이 거꾸로 증가한다는 사실을 모르는 사람이라면 우선 어셈블리 기본을 먼저 공부하시길 추천)

각 함수에 대한 콜스택 내에서 그나마 가장 신뢰할 수 있는 레지스터는 EBP와 ESP이다.(EBP는 늘 현재 함수 범위의 최상위 스택을 가리키며, ESP는 현재 함수 범위에서 사용된 마지막 스택의 위치를 가리킨다) 비주얼 스튜디오 디버거의 경우 콜스택의 실행 위치를 옮길 때 마다 자동으로 스택을 통해 EBP와 ESP를 찾아서 갱신해 주므로 이것을 바탕으로 하여, 스택의 어느 영역에 현재 함수와 연관된 변수들이 저장되어 있는지 유추할 수 있다. 다만 지역 변수의 경우 기계어 수준의 최적화를 통해 레지스터/스택 등에 예측이 어렵게 할당되므로, 다른 방법을 먼저 시도함이 좋을 것이다.
 함수에 인자로 전달되는 값들은 모두 스택을 통해 전달되므로 이들은 대체로 신뢰할 만 하다. 다만 스택을 통해 전달된 인자라 해도, 컴파일러 최적화에 의해 스택 내의 값이 피호출자(callee) 내에서 덮어씌워지는 경우도 있으므로 스택 내의 값이 최초 호출된 인자의 값 그대로라고 맹신할수만은 없다는 것에 주의가 필요하다.
스택은 (함수 인자, 함수 반환 주소, EBP) 를 기본으로 하며, 여기에 부가하여 각종 레지스터 값들이 임시 저장된다. 어찌보면 크래쉬 당시의 가장 많은 정보가 이곳에 들어 있다. (함수 인자들은 가장 뒤의 인자부터 먼저 push 됨)
예를 들어, 엉뚱한 주소로의 함수 호출로 인해 크래쉬가 발생한 경우 다음과 같은 과정을 통해 그 원인을 파악할 수 있을 것이다.
1. 가장 마지막 호출에서의 ESP가 가리키는 메모리 주소를 통해 스택 꼭대기를 찾음
2. (ESP 근처의 메모리에서 이전 호출자의 주소를 찾아냄 - 사실 대부분의 경우 VS 디버거의 콜스택이 이미 그 위치를 보여줄 것이나, 그 정보가 의심스러운 경우 이 방법을 사용할 수 있다)
3. 분명 call edx와 같은 동적인 주소를 통해 호출이 일어났을 것이므로, 호출이 일어난 주소를 갖고 있는 레지스터를 찾음
4. 그 레지스터가 어떻게 계산이 되었으며, 소스코드의 어떤 문제에 의해 그 값이 나올 수 있는지 유추
5. 유추한 가설에 확신이 들면 소스를 고치고 커밋


this 포인터 찾기

잘못된 값으로 인한 크래쉬가 발생했을 때, 당장 그 값에 해당하는 변수의 위치를 찾기보다는 클래스의 this 포인터 등 좀 더 큰 범위의 값을 살펴봄으로 시작하는 것이 빠른 경우가 많다.
VC++이 stdcall 방식으로 클래스의 멤버 함수를 호출 할 때, this 포인터는 ECX를 통해 전달된다. 따라서 release 빌드의 크래쉬 덤프에서 this 값이 제대로 보이지 않는다면 disassembly를 통해 ECX에 값이 할당되고 전달되는 통로를 추적하면 this를 찾을 수 있다. 호출자(caller)에서 찾고자 하는 경우, call 명령 이전에 ECX에 할당되는 값 혹은 메모리가 무엇인지 추적하는 것이 쉬울 것이며, 피호출자(calee)에서 찾고자 하는 경우, 함수 진입부에서 ECX를 stack에 push 하는 경우 혹은 현재 breakpoint에서 가까운 위치에서 this 포인터를 사용하는 메모리나 레지스터를 찾으면 된다. 간혹 this가 ESI, EDI, EBX 등에 할당된 경우에는 더욱 쉽다. 이 세 레지스터들은 다른 함수로 호출이 일어나더라도 스택을 통해 이전 호출자의 값을 유지하는 것이 보장되며, 비주얼스튜디오가 이를 자동으로 찾아주기 때문이다.
this가 어느 레지스터에 들어 있는지 찾기 쉬운 방법중의 하나는 클래스의 멤버에 접근하는 소스에 대한 disassembly에서 dword ptr [ecx+10h] 와 같은 클래스 내 멤버 변수에 대한 상수 offset이 나타나는 부분을 찾는 것이다. (이 경우에 대한 예상이 맞다면 ecx가 바로 this 포인터일 것이다)
그러나 만약 찾고 있는 객체의 포인터가 상위 콜스택에서 함수 호출 인자로 전달된 적이 있다면 구태여 이런 수고를 할 필요가 없을 것이다.


찾은 메모리 주소/포인터로부터 소스코드 수준의 변수 내용 보기

위의 복잡한 과정들은 사실상 소스코드 상에서 표현된 변수내용을 보기위한 준비작업이었다. 이제, 디버거의 Watch 윈도우에 찾아낸 포인터를 대상 변수 타입으로 캐스팅하여 살펴보면 된다. 예) (Namespace::MyClass*)ecx


Watch 윈도우의 확인으로 충분한 것은 아니다

VC++의 Watch 윈도우는 위와 같이 캐스팅 된 포인터를 나름의 방법으로 보기 쉽게 꾸며준다. 다만, 이것에 의해 실제 문제점이 가려지는 경우가 있는데, 한 예를 들자면 std::vector가 대표적이다. 사실 std::vector는 내부적으로 첫요소의 주소, 마지막요소의 주소 만으로 배열을 표현한다. VC++은 이러한 내용을 감추고 마치 count와 pointer가 멤버인것처럼 표현하기 때문에 vector의 내부 포인터에 문제가 생긴경우 쉽게 알아차리기 어렵다. 따라서 이와 같은 복잡한 컨테이너의 내용이 의심스럽다면 그 주소의 memory 내용을 memory view를 통해 직접 살펴봄이 좋다. 가령, vector에 대해 쓰레드 동시 접근 문제가 있다면 vector의 first, last 멤버가 전혀 엉뚱하게 깨진 것으로 보일 것이다.

by 김성균 | 2011/11/27 08:32 | 일(Work) | 트랙백 | 덧글(0)

Kingdom Under Fire 2 - G Star 2010 Trailer


 (주)블루사이드에서는 지스타 2010에 킹덤언더파이어2의 2D/3D 트레일러와 플레이 가능한 시연 버전을 출품하였습니다.
모든 영상은 실기상에서 실시간 캡춰 되었으며, 특히 3D 트레일러의 경우 NVidia 3D Vision에서 출력되는 stereo rendering을 직접 캡춰 받았습니다.
 화면 후처리(post-processing) 효과들이 제대로 3D로 보이도록 하기 위해 예상보다 많은 노력이 들어갔습니다.


by 김성균 | 2010/11/22 11:18 | 일(Work) | 트랙백 | 덧글(0)

GPG 7 한글판



 Game Programming Gems 7권의 한글판 표지로 Kingdom Under Fire 2의 스크린샷이 실렸습니다.

 제가 관리를 맡고 있는 Fame Tech 2 엔진을 사용하여 개발되고 있기 때문에 책에 실린 스크린샷 설명은 제가 작성하였습니다.

 엔진의 추가 개발을 위해 현재 활발히 채용중이므로, 관심 있는 뛰어난 프로그래머 분들의 지원을 기다리고 있습니다. 문의: littles@blueside.co.kr

by 김성균 | 2010/05/06 13:06 | 일(Work) | 트랙백 | 덧글(0)

클라우드 컴퓨팅 for dummies

 본문은 작년 하순경 모 책을 공동으로 집필하기 위해 작성했던 글의 초안이나, 여러가지 이유로 이렇게 블로그에 올립니다.
 사실 완성이 덜 된 글이기 때문에 많이 부족하지만 혹시라도 클라우드 컴퓨팅에 관심이 있는 분들에게 조금이나마 도움이 되었으면 좋겠습니다.


 

n 요약

컴퓨팅이 전기나 수도와 같이 모든 현대인의 일상에서 필수적인 일용품화 되어 감에 따라, 기업이나 개인이 컴퓨팅 기능을 사용하기 위해 막대한 비용과 시간을 투자하여 직접 소유하고 관리하기 보다는 필요한 때에 필요한 만큼 빌려 쓰는 서비스로서 클라우드 컴퓨팅이 대두되고 있다. 최신의 인터넷, 하드웨어, 소프트웨어 기술의 발전으로 인하여 유연성 있고 효율적인 클라우드 컴퓨팅 서비스가 가능해졌으며, 이미 적지 않은 기업과 단체들이 클라우드 컴퓨팅의 유연성 있는 서비스 특성에 의해 많은 혜택을 누리기 시작하였다. 향후 다양한 산업의 응용 분야에서 클라우드 컴퓨팅 관련 서비스들이 등장하여 많은 기업과 개인들이 직접 혹은 간접적으로 널리 사용하게 될 전망이다.

 

n 정의 및 개요

클라우드 컴퓨팅이란 대규모 데이터 센터에 존재하는 컴퓨팅 자원를 사용자의 필요에 따라 동적으로 확장 가능하도록 가상화한 서비스로서 다수의 사용자들에게 제공하는 컴퓨팅 방식을 의미한다. , 사용자가 원하는 때에 필요로 하는 하드웨어 및 소프트웨어 컴퓨팅 자원을 임의로 사용할 수 있도록 하는 것이 클라우드 컴퓨팅이다.

클라우드(cloud) 라는 단어는 컴퓨터의 네트워크 구조도에서 일반적으로 인터넷이 구름의 형태로 표현되는 것에서 기인한다. 사용자가 그 실체와 구성을 정확히 파악할 필요 없이, 사용자의 필요만큼 컴퓨팅 자원이 유연하게 제공될 수 있다는 추상적 의미를 표현하기 위한 용어이다.

클라우드 컴퓨팅은 대규모 데이터 센터의 구축, 광대역 및 무선 네트워크, 스토리지 가격의 하락, 그리고 인터넷 컴퓨팅 소프트웨어의 발전 등의 요인에 의해 구현이 가능해졌다.

시장 조사 기관인 가트너에서는 클라우드 컴퓨팅을 다수의 고객들에게 인터넷을 통한 서비스의 형태로 대규모로 확장 가능한 IT 기능을 제공하는 컴퓨팅 방식(a style of computing where massively scalable IT-related capabilities are provided ‘as a service’ across the Internet to multiple external customers)”이라 정의하였다.

또한, UC 버클리 대학에서는 클라우드 컴퓨팅을 인터넷을 통해 서비스로서 제공되는 어플리케이션과(SaaS), 이러한 서비스를 제공하기 위한 데이터 센터 내의 하드웨어 및 시스템 소프트웨어를 통칭하여 부르는 말이라 정의하기도 하였다.

 

n 배경 및 역사

과거에 기업이나 개인이 컴퓨팅 환경을 사용하기 위해서는 막대한 돈을 들여 필요에 맞는 하드웨어 인프라와 소프트웨어들을 구입하여 자신이 직접 운영 하는 것이 일반적인 방법이었다.

그러나 거의 모든 기업과 개인이 컴퓨팅 자원을 필요로 하게 되면서, 사용자가 직접 모든 것을 구입하여 운영 및 유지보수 하던 것을 대신하여 외부의 독립적인 서비스 업체가 사용자가 필요로 하는 때에 필요로 하는 만큼의 컴퓨팅 자원을 제공하는 서비스 형태가 등장하게 되었다.

컴퓨팅 자원에 대한 서비스 개념은 1961년에 John McCarthy가 컴퓨팅 환경과 특정 종류의 어플리케이션들은 수도나 전기와 같은 공공 재화처럼 개별적으로 판매될 수 있다고 전망한 데에서 그 유래를 찾을 수 있다.

1990년대 후반에 컴퓨팅 자원도 소비재처럼 사용량 단위로 빌려 쓰는 서비스의 개념인 유틸리티 컴퓨팅(Utility Computing)의 개념이 등장하였고, 2000년대 초반에는 네트워크를 통해 사용자가 필요로 하는 어플리케이션 소프트웨어를 서비스의 형태로 제공하는 SaaS(Software as a Service)가 출현하였다. 이후, 인터넷 어플리케이션 기술의 발전으로 인해 SaaS의 어플리케이션들은 표준 인터넷 및 웹 기반으로 변화함과 동시에, 데이터 센터 인프라, 플랫폼 등의 기술 발전에 힘입어 컴퓨팅에 필요한 모든 수직적 컴퓨팅 자원을 대량으로 확장 가능한 서비스로서 제공하는 형태를 포괄하여 클라우드 컴퓨팅이라 지칭하게 되었다.

이것은 기업체들이 사무실, 생산 설비, 인력 등 비즈니스에 필요한 자원들을 직접 소유하기 보다는 비즈니스 환경에 맞게 유연성 있기 임대하여 사용하고자 하는 움직임과 깊은 관련이 있다.

빠른 속도로 변화하는 기업의 내/외부 환경을 고려할 때 기업의 활동에 필요한 자원들을 직접 소유하고 관리하는 데에는 많은 위험이 따른다. 따라서 이들을 소유하기 보다는 필요한 때에 필요한 만큼 유동적으로 임대하여 사용하고자 하는 움직임이 전분야에 걸쳐 일어나고 있고, 클라우드 컴퓨팅 역시 기업 활동의 중요 자원인 컴퓨팅 자원을 효율적으로 사용하기 위한 방편인 것이다. 기업의 재무 관점에서는 IT 자원에 대한 투자가 고정비용에서 운영비용으로 바뀌기 때문에 더 유연한 자금 관리가 가능해진다.

과거에도 이러한 필요에 의해 네트워크 컴퓨터 등의 개념이 제시되었으나, 당시에는 하드웨어 인프라, 인터넷 기술 등의 한계에 의해 현실적으로 구현되지 못하다가 최근의 인터넷 속도 상승, 데이터 센터 및 인터넷 표준 기술의 발전으로 인해 컴퓨팅 자원의 모든 수직적 범위에 걸쳐 온라인 상에서 임대 서비스가 가능한 클라우드 컴퓨팅이 현실화 되었다.

클라우드 컴퓨팅 서비스 업체가 거대규모의 컴퓨팅 자원을 관리하는 것이 일반 기업이 자체적으로 제공하는 것 보다 효율이 더욱 좋기 때문에 각 기업이 더 낮은 비용으로 컴퓨팅 자원을 사용할 수 있다는 경제적인 측면도 클라우드 컴퓨팅의 활성화에 큰 기여를 하고 있다.

 

n 클라우드 컴퓨팅의 분류

클라우드 컴퓨팅 서비스들은 크게 제공되는 서비스의 유형과 서비스 대상 유형의 방식에 의해 구분될 수 있다.

제공되는 서비스의 유형에 의해 구분하자면 일반적으로 아래와 같이 3종류로 분류된다.

1.     인프라 서비스 (IaaS - Infrastructure as a Service): 프로세싱, 스토리지, 네트워크 등 하드웨어 수준의 인프라 자원을 서비스로서 제공한다. 기업들은 직접 하드웨어 인프라를 구축하는 대신 이러한 서비스로부터 가상의 자원을 임대한 후 기업의 필요에 맞는 형태로 구성을 수행하여 전용 컴퓨팅 자원을 구축할 수 있다.

2.     플랫폼 서비스 (PaaS - Platform as a Service): 최종 사용자용 어플리케이션의 개발에 필요한 운영 체제, 프레임웍, 어플리케이션 컴포넌트 등을 서비스로서 제공한다. 이에 필요한 인프라의 경우 PaaS 제공자가 자체적으로 함께 제공하거나, 외부 사업자의 IaaS를 사용하여 제공한다. 사용자나 기업들은 플랫폼 서비스를 사용하여 자신의 용도에 맞는 소프트웨어를 개발하여 사용하거나 자사의 고객들을 위한 응용 프로그램을 제공할 수 있다. 이 모든 응용 프로그램들은 플랫폼 서비스 공급자의 클라우드 상에서 작동되게 된다.

3.     소프트웨어 서비스 (SaaS - Software as a Service): 최종 사용자에게 필요한 응용 프로그램들을 서비스로서 제공한다. 이에 필요한 인프라와 플랫폼은 SaaS 제공자가 직접 제공하거나, 외부 서비스 사업자에 의해 제공될 수 있다. 대부분의 경우 소프트웨어 서비스의 사용자들은 서비스에서 제공되는 응용 프로그램 상태 그대로 혹은 약간의 구성 설정만을 수행한 이후에 서비스 제공자의 클라우드 상에서 사용하게 된다.

 

클라우드 컴퓨팅 서비스를 대상 유형에 의해 구분하면, 아래와 같이 4가지 종류로 분류할 수 있다.

1.     폐쇄형 클라우드 (Private cloud): 한 단체나 기업의 독자적인 용도를 위해서 폐쇄적으로 구성된 클라우드.

2.     공동체형 클라우드 (Community cloud): 특정한 목적을 공유하는 공동체의 구성원들이 공동으로 사용하는 클라우드.

3.     공개형 클라우드 (Public cloud): 임의의 사용자를 위해 클라우드 컴퓨팅 서비스 사업자가 공개적으로 제공하는 클라우드.

4.     복합형 클라우드 (Hybrid cloud): 위의 세 가지 형태들이 복합적으로 구성된 클라우드.

 

별도의 수식어 없이 클라우드 컴퓨팅을 얘기할 때에는 다수의 고객들에게 공개적으로 서비스 되는 공개형 클라우드(public cloud)를 지칭하는 것이 일반적이다.

 

클라우드 컴퓨팅이 이전에 등장한 다양한 종류의 서비스 유형들을 포함하고 있기 때문에 이전에 등장한 유사한 서비스들과의 차이점을 구분하는 것이 필요하다.

클라우드 컴퓨팅의 인프라 부분에 연관된 용어로 그리드 컴퓨팅(Grid Computing)이 있다. 그리드 컴퓨팅(Grid Computing)이란 대용량의 컴퓨팅 자원을 필요로 하는 복잡한 작업을 수행하기 위해 다수의 컴퓨팅 자원을 네트워크로 연결하여 빠른 시간 내에 해결하는 컴퓨팅 방식을 말한다. 클라우드 컴퓨팅 서비스를 수행하기 위한 인프라부분은 기술적으로 그리드 컴퓨팅을 사용하여 다수 사용자들의 컴퓨팅 요구사항들을 수행한다.

클라우드 컴퓨팅의 서비스 개념과 연관된 것으로는 유틸리티 컴퓨팅(Utility Computing)이 있다. 이는 데이터 센터의 하드웨어와 시스템 소프트웨어 등 컴퓨팅 자원을 고객이 직접 소유하지 않고 서비스의 형태로 임대하여 사용하는 방식을 일컫는 것으로, 클라우드 컴퓨팅의 서비스로서의 사업 모델은 유틸리티 컴퓨팅의 개념을 따른다고 볼 수 있다.

클라우드 컴퓨팅의 어플리케이션 서비스와 연관된 것 ASP(Application Service Provider)를 들 수 있다. ASP와 클라우드 컴퓨팅의 SaaS는 어플리케이션을 서비스로서 임대해 사용한다는 점은 같으나, ASP의 경우 이미 존재하는 소프트웨어 솔루션을 각 고객별로 맞춤형으로 수정하여 제공하고 인터넷 표준을 따르지 않는다는 점 등에서 차이점이 있다.

포레스트 리서치(Forrest Research)에서는 클라우드 컴퓨팅의 특징들을 아래와 같이 6가지로 요약하였다. 위에서 비교된 유사한 개념의 용어들은 그 특성들 중 일부에 대해서만 적용된다고 볼 수 있으며, 클라우드 컴퓨팅은 이들의 특징을 포괄하는 개념으로 정의되고 있다.

1.     표준화된 IT 기반 기능: 하드웨어, 소프트웨어를 포함하는 전반적인 표준화된 IT 자원들을 공급함

2.     임의 컴퓨터에서 인터넷 프로토콜을 통한 접근: 클라우드 컴퓨팅에 사용자가 연결될 때에는 기존의 클라이언트-서버 환경과는 다르게 HTTP, REST SOAP 등의 표준 프로토콜을 통해 표준 웹브라우저를 통해 접속 가능.

3.     항시 가용성, 수요에 따른 자동 확장성: 사용자의 필요에 따라 컴퓨팅 자원이 항상 안정적으로 유동성 있게 공급될 수 있어야 함.

4.     사용량 기반 또는 광고 기반 과금 방식: 광고를 보는 것, 기간별 정액 과금, 또는 순 사용량에 의한 과금 체계를 가짐.

5.     Web 인터페이스 혹은 특화된 프로그램에 의한 조작 방식: XML, REST등의 기술에 기반한 서버 기반의 조작 인터페이스 제공.

6.     완전한 사용자 셀프 서비스: 사용자가 직접 서비스를 관리할 수 있고, 웹 상에서의 인터페이스나 제공되는 API를 통해 이를 제어 할 수 있음.

 

n 사례

아마존은 2002년부터 AWS(Amazon Web Services) 서비스를 공개하여, 자사의 공개된 API를 통해 누구나 아마존의 전자상거래 데이터를 이용하는 인터넷상에서 아마존과의 협력 비즈니스를 운영 할 수 있도록 하였다. 2006년부터는 유틸리티 컴퓨팅 서비스로서, 스토리지 서비스인 S3, 컴퓨팅 서비스인 EC2, 컴퓨터간 메시징 서비스인 SQS 등을 런칭하여 아마존의 기존 전자 상거래 비즈니스와는 무관한 주요 유틸리티 컴퓨팅 사업자로서 변신하기 시작하였다.

AWS는 대표적인 IaaS로 자리매김 하였으며, 이를 통한 성공적인 비즈니스 사례들은 쉽게 찾아볼 수 있다.

사용자의 사진들을 비디오 클립으로 만들어 주는 인터넷상의 서비스인 Animoto.com의 경우, 2006 4월에 얻은 갑작스런 인기에 의한 사용자 폭증으로 인해 시스템을 대규모로 확장해야 하는 상황이었다. Animoto.com은 아마존의 AWS를 이용하여 순식간에 3,500대의 가상서버를 제공하여 실질적인 서버 구매 없이도 안정적인 서비스를 제공할 수 있었고 이에 의해 지속적인 사업의 성장을 이룰 수 되었다. 국내의 아이러브스쿨이나 싸이월드가 급격한 사용자 증가의 시기에 하드웨어 도입의 어려움으로 사용자 접속 수를 감당하지 못하여 많은 비즈니스 기회를 놓쳤던 것을 상기하면 클라우드 컴퓨팅의 유연성이 인터넷 서비스의 성공에 큰 역할을 할 수 있음을 짐작할 수 있다.

뉴욕타임즈의 경우 1851년부터 1980년 사이 발행된 1100만 건의 기사를 디지털로 변환하는 데에 필요한 대규모의 컴퓨터 장비를 구매하는 대신, 분산 처리에 특화된 소프트웨어와 단 1465달러의 임대 비용이 든 AWS의 서버들을 이용하여 이 모든 것을 하루 남짓 만에 처리할 수 있었다.[1]

대표적인 인터넷 기업인 구글(Google)은 일반 및 기업 사용자를 대상으로 하는 오피스 어플리케이션 제공 SaaS Google Apps를 서비스하고 있다. GE, P&G등의 거대 기업들을 포함하여 5백만 이상의 가입 회사와 1천만명 이상의 유저 수를 보유하고 있다. 또한 2008 4월에는 클라우드 상의 SaaS 웹 어플리케이션 제작을 위한 PaaS 서비스인 AppEngine을 출시 하여, 다른 인터넷 기업들이 서비스를 효율적으로 제공할 수 있도록 시도하고 있다.

 

n 기술

 

1.     가상화

가상화란 컴퓨팅 자원을 사용자의 요구사항에 따라 가상으로 다른 형태의 자원처럼 쓸 수 있게 하는 것을 말한다. 예를 들어 한 대의 서버 컴퓨터를 다수의 사용자들이 독립적으로 쓸 수 있는 복수의 컴퓨터 자원처럼 나누어 사용한다거나, Unix 운영체제가 작동하는 컴퓨터 상에서 윈도우 운영체제용 프로그램들을 작동시키는 것 등이 여기에 해당한다. CPU, 디스크, 네트워크 등의 하드웨어 수준의 가상화부터 어플리케이션 수준의 가상화까지 매우 광범위한 영역에 걸친 가상화 기술들이 존재한다.

가상화 기술은 클라우드 컴퓨팅 서비스의 데이터 센터에서 수많은 사용자의 다양한 환경적 요구사항들을 처리하기 위한 필수 기술로서, 클라우드 컴퓨팅 서비스 공급자의 효율성을 결정짓는 중요한 요인이기 때문에 Amazon과 같은 서비스 업체부터 EMC, VMWare 등의 하드웨어 및 소프트웨어 공급자에까지 이르는 다양한 클라우드 컴퓨팅 업체들이 많은 연구개발을 하고 있는 분야이다.

2.     분산 컴퓨팅

클라우드 컴퓨팅의 차별적인 요소 중 하나인 원하는 만큼의 컴퓨팅 능력을 제공하기 위해서는 사용자가 요청하는 막대한 컴퓨팅 자원을 요구하는 작업들이 개별 하드웨어들의 협업에 의해 분산 처리할 수 있는 기술이 필요하다. 앞에서 소개되었던 뉴욕타임즈의 과거 기사 디지털화의 사례가 클라우드 컴퓨팅의 분산 컴퓨팅 능력을 사용한 좋은 예제이다. 만약 몇 대의 컴퓨터만을 사용하여 이를 처리했다면 엄청난 시간을 필요로 했겠지만, 즉각적으로 동원된 분산 컴퓨팅 기술이 탑재된 수백 여 대의 컴퓨터들 덕분에 하루 만에 작업을 완료할 수 있었던 것이다.

그러나 기존에 존재하는 솔루션 그대로 처리 가능한 분산 컴퓨팅 작업의 종류에는 한계가 있기 때문에 뉴욕타임즈의 예와 같이 특정 기업에만 필요한 작업에 이를 적용하기 위해서는 어느 정도의 소프트웨어 개발이 필요하다. 이러한 분산 컴퓨팅 소프트웨어를 쉽게 개발할 수 있도록 PaaS 사업자들은 분산 컴퓨팅 기반 플랫폼도 제공하고 있으며, 구글이 공개한 Hadoop과 같이 무료로 사용할 수 있는 오픈 소스 기반의 플랫폼들도 다수 존재한다.

3.     대규모 데이터 센터 관리

클라우드 컴퓨팅 서비스는 관리의 효율성과 대용량 처리를 위해서 대규모의 데이터 센터상에서 각 사용자 별로 복잡한 가상화와 구성을 갖게 된다. 수많은 사용자들에게 일관성 있는 품질의 서비스를 제공하기 위해서는 중앙 집중화, 자동화 된 관리 시스템이 필수적이다. 이는 클라우드 컴퓨팅 서비스 공급자에게 필수적인 기능임과 동시에, 사용자가 직접 필요로 하는 컴퓨팅 자원의 구성과 양을 조정 할 수 있어야 하는 클라우드 컴퓨팅의 특성을 고려하면 사용자에게도 중요한 기능이라고 할 수 있다. 서비스 공급자에게 필요한 기술은 인프라 하드웨어, 소프트웨어 벤더들이 제공하거나 서비스 공급자가 직접 개발하여 운영하고 있으며, 사용자에게 필요한 관리 기능은 서비스 공급자가 개발하여 제공하거나, RightScale[2]과 같은 별도의 사업자가 사용자에게 직접 부가 서비스의 형태로 공급하기도 한다.

이러한 관리 시스템 공급자들은 서비스 공급자를 위해서는 안정적인 서비스와 효율성을, 서비스 사용자를 위해서는 편의성과 신속성 등에 초점을 맞추어 경쟁하고 있다.

4.     전력 효율

대규모 데이터 센터를 유지하는 데 있어 소모되는 운영비용의 대부분은 전력 사용비가 차지한다. 따라서 인프라 하드웨어에 사용되는 전력 소모량을 줄이는 것이 클라우드 데이터 센터 운영비용을 절감하는 가장 효율적인 방법이라고 할 수 있다.

클라우드 데이터 센터에 하드웨어 장비를 공급하는 많은 회사들은 CPU, 스토리지, 냉각 장치, 서버 랙(서버 컴퓨터가 배치되는 외부 프레임)에 이르는 전 부품의 전력 소모량을 줄이기 위해 많은 노력을 기울이고 있다. 각 부품의 기본 전력 소모량을 줄임과 동시에, 서버가 유휴(idle) 상태일 때에는 그에 맞추어 더욱 적은 양의 전력을 소모하는 기술 등을 채택하고 있다. 그 결과 데이터 센터의 와트(Watt)당 컴퓨팅 능력은 지수적으로 증가하고 있으며[3], 서버 제조사들은 성능 확장이 필요하지 않더라도 2년 여 주기로 신형 하드웨어로 교체하는 것이 비용 측면에서 이익이라고 이야기하고 있다.

5.     PaaS, SaaS 개발 환경 및 기술

소프트웨어 서비스를 제공하는 PaaS SaaS 형식의 클라우드 컴퓨팅 서비스가 수많은 사용자의 다양한 요구사항을 효율적으로 처리하기 위해서는 인프라 수준의 가상화나 분산 처리 외에도 어플리케이션 수준의 부하 조절(load balancing), 사용자가 원하는 기능을 추가할 수 있는 유연성(flexibility), 필요에 따라 성능을 증가시킬 수 있는 확장성(scalability) 등이 중요한 요건이다. 최종 사용자용 어플리케이션을 제공하는 SaaS 서비스는 물론이고, 사용자가 자신의 필요에 맞는 어플리케이션 개발 환경을 제공하는 PaaS 역시 이러한 요구사항들을 쉽게 개발할 수 있게 하는 기반 기술들을 제공해야 한다.

좀 더 구체적으로는 이 요구사항 들을 충족시키지 위해 앞에서 언급한 분산 컴퓨팅 소프트웨어 기술을 기반으로 하여, 다고객용(multi-tenant) 구조, 자동 혹은 사용자에 의한 동적인 성능 확장성, 쉬운 개발 및 관리 환경 등의 기술 요소들이 제공되고 있다.

Google, Microsoft, Salesforce 등의 기업들은 이러한 클라우드 컴퓨팅에 특화된 기반 소프트웨어 기술들을 자사의 PaaS/SaaS 서비스에 탑재하여 사용자와 자사의 효율성을 동시에 높이려 하고 있다.

 

 

n 국내외 시장동향

1.     인프라 하드웨어, 소프트웨어 공급자

클라우드 컴퓨팅의 기본적인 인프라 구조는 대규모 데이터 센터의 형태이고 하드웨어 측면에서는 큰 차이가 없기 때문에 사실상 기존의 모든 데이터 센터용 하드웨어 공급자들이 클라우드 컴퓨팅 하드웨어 공급자라고 볼 수 있다.

이들은 기존의 데이터 센터용 하드웨어 기술을 바탕으로, 클라우드 컴퓨팅에 필수적인 가상화, 중앙 집중 관리 시스템 등의 기술을 IaaS 공급자에게 제공하거나 클라우드 컴퓨팅 인프라 서비스를 자체적으로 운영하고 있다. IBM, SUN, Dell, HP, Rackable 등의 회사들은 클라우드 컴퓨팅에 적합한 확장성과 가상화에 유리한 형태의 서버 컴퓨터들을 공급하고 있다.

Cisco, Jiniper 등의 네트웍 장비 업체들 역시 가상화에 필요한 특화된 장비들을 선보이고 있고,[4] EMC, IBM, SUN, NetApp[5] 등의 회사들은 클라우드 컴퓨팅에서의 가상화에 유리한 스토리지 장비들을 출시하였다.

IBM Enterprise Workload Manager 등의 제품을 통해 클라우드 내의 각 서버 CPU 부하수준까지 제어한다. Tivoli 제품군을 통해 클라우드 컴퓨팅 서버들의 하드웨어 상태 구성을 관리하고 소프트웨어적인 구성과 설치 및 관리를 자동화 한다. 또한 IBM은 구글과 협력하여 대학 학생들이 대규모 분산 환경을 쉽게 개발할 수 있도록 하는 Hardoop 환경을 제공하고 있다.

Sun은 서버 하드웨어 수준으로부터 데스크탑까지 가상화를 구현하는 xVM 제품군과 스토리지 가상화를 위한 StorageTek 제품군 등을 공급하고 있으며, 분산 환경을 지원하는 JAVA 개발 툴들을 공급한다.

오라클은 클라우드 컴퓨팅에 특화된 Database, Fusion Middleware, Enterprise Manager, VM 등의 제품을 공급하고 있다.

 

2.     소프트웨어 공급자

기존의 소프트웨어 제품들은 대체로 단일 컴퓨터 상에서 작동하며 각 사용자에게 패키지로 판매되는 형태였으나, 클라우드 컴퓨팅에서는 인터넷을 통한 서비스로서 제공되어야 하므로 인터넷 연결을 통해 사용하는 웹 어플리케이션의 형태를 띠며 사용량 기반으로 과금되어야 한다. OS DB와 같은 기반 소프트웨어부터 일상 업무에 직접적으로 쓰이는 이메일, 문서 작성과 같은 어플리케이션, 기업 경영 관리에 이르기까지 클라우드 컴퓨팅을 통해 서비스되는 제품들이 등장하게 되었다. 가트너는 2015년경에는 SaaS 시장이 전체 소프트웨어 시장의 38%를 차지할 것으로 예상하였으며, 실제로 지난 기간 동안 매년 21%의 성장률을 보여 왔을 정도로 SaaS는 클라우드 컴퓨팅 관련 서비스 중에서도 매우 큰 잠재력을 갖고 있는 분야이다.

소프트웨어 업체들은 기존의 인지도 있는 제품들을 시작으로 클라우드 컴퓨팅 서비스 제품으로 전환 중이며, 경쟁력 있는 유관 분야로 클라우드 컴퓨팅 어플리케이션을 확장하고 있다.

오라클은 기존에 패키지 형태로 판매하던 소프트웨어 제품들을 단계적으로 SaaS의 형태로 서비스하고 있다. Oracle On Demand 브랜드 하에 Sibel CRM, Peoplesoft, e-Business Suite, JD Edwards 등의 제품들을 사용량 기반 과금 체계로 서비스 하고 있다.[6]

IBM은 전통적으로 많은 고객을 확보해 온 기업용 협업 시스템인 Lotus 제품을 LotusLive라는 이름의 SaaS로써 제공하고 있다.

Salesforce.com은 고객들이 하드웨어 구매 없이 온라인으로 바로 사용이 가능한 영업, 마케팅, 고객 서비스, 파트너사 관리 등의 CRM 어플리케이션 서비스들을 제공하고 있으며, 2008년부터 다우기술과 제휴하여 국내 시장에도 적극적으로 진출하고 있다. 또한 고객사 들이 자신의 용도에 맞는 CRM 서비스를 직접 구축할 수 있도록 하는 PaaS Force.com 플랫폼 서비스와 인프라를 제공하고 있다.

Sun Network.com은 클라우드 컴퓨팅 플랫폼인 Sun Grid 기술과 그들의 하드웨어 인프라를 이용한 PaaS 제품들의 집합이다. 또한 Project Caroline을 통해 SaaS 개발자들에게 효율적인 환경을 제공하고자 노력하고 있다. 이것들은 전통적인 SUN의 노선대로 오픈 소스 정책을 기반으로 하고 있다.

마이크로소프트는 PC, 기업용 소프트웨어, 호스팅 서비스, 클라우드 상의 서비스 등을 대칭적으로 제공하고자 하는 통합 전략을 사용하고 있다. 빌 게이츠는 이를 서비스 통합 소프트웨어(Software plus service)” 라고 칭하였다. 2008년에 발표한 PaaS 클라우드 컴퓨팅 플랫폼인 Azure를 기반으로 하여, 기업용 SaaS Online Services 제품군을 출시하였고, 구체적인 제품으로는 Dynamics CRM online, Exchange Online, Office Communications Online 등 다수를 제공하고 있다. 또한 최종 사용자용 클라우드 서비스로서 Windows Live 라는 통합 브랜드 아래 핫메일, 대용량 파일 저장소 스카이 드라이브, 디바이스간 파일 동기화 서비스인 Live Mesh 등을 제공하고 있다. 특히 마이크로소프트의 Azure는 클라우드 상의 어플리케이션(SaaS)을 개발하고 서비스하기 위한 PaaS 플랫폼으로서 Windows 아키텍쳐를 기본으로 하는 운영체제와 클라우드 서비스에 특화된 다양한 컴포넌트들로 이루어져 있다. 어플리케이션 개발자는 Live Service, SQL Service, .NET Service, SharePoint Service, Dynamics CRM Service 등의 기본 제공 컴포넌트를 이용하여 자신의 용도에 맞는 클라우드 서비스를 개발 및 사용할 수 있다.[7]

 

3.     인터넷 기업들

인터넷 기업들의 기존 서비스는 이미 다수의 사용자를 위한 웹 어플리케이션의 형태이기 때문에, 이러한 SaaS와의 유사점을 이용하여 최종사용자용 웹 어플리케이션 SaaS 서비스 분야를 중심으로 플랫폼, 인프라 사업에까지 그 영역을 확장하고 있다.

아마존의 AWS는 초기에는 외부의 협력사들이 아마존의 DB를 이용하여 상호 연동이 가능한 전자상거래 생태계를 제공하기 위한 목적이었으나, 2006년에 아마존의 기존 비즈니스와 무관한 프로세스(EC2), 스토리지(S3) 및 네트워크 인프라에 대한 범용적인 IaaS 서비스를 시작하였다.[8]이러한 아마존의 각 인프라 서비스들은 각 인프라 요소들이 사용자가 원하는 조합으로 구성될 수 있도록 되어 있다. 최근에는 Oracle과의 협력 하에 Oracle Database, 웹 서버 등을 추가 제공하게 되었다.

구글은 기업에서 일반적으로 널리 사용되는 이메일, 문서 작성, 일정 관리, 인스턴트 메시징 등의 기능을 온라인으로 제공하는 Google Apps 서비스를 제공하다가 최근에는 고객이 자신의 용도에 맞는 인터넷 비즈니스용 SaaS를 직접 개발하여 서비스할 수 있는 PaaS AppEngine을 출시하였다.

특히 Google Apps Zoho의 서비스들은 기존의 Microsoft Office를 비롯한 패키지 판매 기반 오피스 제품들과 클라우드 컴퓨팅 SaaS의 경쟁 구도로 시장을 형성하게 되었다.

 

4.     인프라 서비스 공급자

기존에 인터넷 인프라 등을 공급하던 기간 사업자들 역시 자신들의 서비스 제공 경험과 기간망을 바탕으로 하여 인프라 중심으로 클라우드 컴퓨팅 서비스에 진출하고 있다. 이들은 기존에 이미 대규모의 데이터 센터를 운영해온 경험이 있으며, 광범위한 사업망을 갖고 있기 때문에 IaaS 서비스를 제공하기에 유리하다.

AT&T의 경우 EMC와의 공조 하에 Synaptic Storage라는 이름의 클라우드 스토리지 서비스를 제공하는 것을 시작으로 컴퓨팅, 보안 등의 광범위한 IaaS를 제공할 예정이며, 경쟁사인 Verizon 역시 Computing as a Service라는 이름의 IaaS를 시작으로 하여 추후에는 소프트웨어 서비스까지 제공할 예정이다.

일본의 NTT는 일본 내 18개의 IDC 센터를 연계하여 클라우드 컴퓨팅 서비스를 구축 중인데, Zoho와의 협력으로 Setten 이란 이름의 일반 업무 어플리케이션 SaaS 및 가상 데스크탑 서비스를 제공할 예정이다.

국내의 KT역시 오랜 기간 데이터 센터들과 ASP 서비스들을 제공해오던 기반을 갖고 있다. 향후 데이터 센터의 인프라를 사용자가 동적으로 제어 가능한 IaaS 서비스로 제공하고, 기존의 비즈메카 ASP를 개방형 플랫폼으로 업그레이드하여 SaaS로서 변화시킬 예정이다. 또한, 개인 사용자를 위한 가상 데스크탑 형태의 클라우드 PC 서비스도 계획 중이다. KT는 정부의 특수 목적을 위한 폐쇄형 클라우드 서비스 사업에도 참여하고 있는데, 2010년부터 사용될 국방부의 클라우드 컴퓨팅 서비스 구축을 진행하고 있다.

SKT는 자사의 기존 비즈니스에 영역에 국한된 클라우드 컴퓨팅 서비스로서, 핸드폰 사용자들이 핸드폰의 데이터를 클라우드 스토리지에 백업할 수 있는 서비스를 제공하고 있다.

 

5.     시스템 통합 공급자

각 기업에 필요한 컴퓨팅 시스템을 통합으로 구현하여 납품하는 시스템 통합자(System Integrator)들은 클라우드 컴퓨팅 시장에서도 기업들이 클라우드 컴퓨팅을 사용하는데 필요한 컨설팅과 구현을 수행하거나, 직접 클라우드 컴퓨팅 서비스를 제공하는 사업을 펼치고 있다.

액센츄어(Accenture)는 기업들이 클라우드 컴퓨팅을 도입하는 과정 전반에 걸쳐서 컨설팅 서비스를 수행하며, 인포시스(Infosys)는 고객 기업이 직접 폐쇄형 클라우드를 구축하거나, 공개형 클라우드 상에서 타사의 플랫폼이나 인포시스 자체의 플랫폼을 사용하여 기업의 SaaS를 구축하는 방향을 모두 지원하는 사업을 수행하고 있다.

국내의 삼성SDS는 삼성그룹 계열사 시스템의 클라우드 컴퓨팅 서비스를 위한 폐쇄형 클라우드 구축을 시작으로 하여, 외부 고객에 대한 공개형 클라우드 서비스로 확장하기 위해 국내외의 데이터 센터에 클라우드 컴퓨팅 인프라를 구축할 예정이다. 특히 스마트 폰 솔루션, 디지털 미디어, 바이오 인포메틱스 분야에 적용 가능한 클라우드 컴퓨팅 서비스를 선보일 예정이다.

LG CNS 역시 계열사를 위한 폐쇄형 클라우드를 통해 검증을 거친 후에 공개형 클라우드 서비스를 제공할 예정이다. 특히, 2010년까지 사내의 전체 직원을 대상으로 하는 클라우드 컴퓨팅을 통한 가상 데스크탑 환경도 구축할 예정이다. 직원들이 사용하는 모든 데이터 등은 개인의 PC가 아닌 클라우드 상에서 저장되고 실행되는 모델로서, 개인용 인프라에 대한 대규모 클라우드 컴퓨팅 서비스라는 점에서 주목 받고 있다.

 

6.     각 국가별 정부의 움직임

전 세계의 주요 국가들은 클라우드 컴퓨팅이 미래의 중요 서비스 산업이 될 것으로 보고 다양한 연구 지원 활동과 클라우드 컴퓨팅 인프라의 구축을 전략적으로 수행하고 있다.

미국은 공공업무에 SaaS를 이미 2007년부터 도입하여 관련 예산의 11%를 절감할 수 있었다. 특히 텍사스주 알링턴의 경제개발부와 콜로라도주 세무부서에서는 클라우드 컴퓨팅 CRM을 도입하여 높은 효율을 달성한 것으로 보고되었다. 연방정부는 IT 인프라구축 비용 절감과 환경 보호를 위해 2010년부터 문서자료관리 시스템을 클라우드 컴퓨팅을 옮기기 시작하여, 클라우드 컴퓨팅을 통한 온라인 민원서비스, 부처별 전산 시스템 단순화 등을 계획하고 있다.

중국 정부는 경제 구조의 중심을 서비스 경제로 전환하는 움직임의 일환으로 클라우드 컴퓨팅 산업을 전략적으로 추진하고 있다. IBM과 협조 하에 우시(Wu Xi)에 설립된 클라우드 컴퓨팅 센터는 벤처 기업들의 혁신을 위해 인프라와 플랫폼을 제공하고 있다.

일본은 가스미가세키 클라우드라는 사업명으로 2015년까지 정부의 모든 IT 인프라를 단일 클라우드 컴퓨팅으로 전환할 계획으로 대규모의 투자를 계획하고 있다.

우리나라도 지식경제부, 방송통신위원회, 행정안전부 등 각 부처별로 클라우드 컴퓨팅 정책을 추진하고 있다. 지식경제부는 친환경 클라우드 인프라 구축 계획을 수립하고 있으며, 방송통신위원회는 디지털 방송관련 서비스를 위한 방안을 마련 중이고, 행정안전부는 정부통합전산 센터를 클라우드 컴퓨팅 인프라로 전환하여 정부의 IT 인프라 효율성을 높일 예정이다. 그러나 관련 업계에서는 정부의 부처별 정책 통일성과 투자 규모에 증대 요구가 큰 상황이다.

 

n 비즈니스 모델

1.     종량제 과금 (Pay-as-you-go)

대다수의 클라우드 컴퓨팅 인프라 서비스(IaaS) 사업자들은 고객의 서비스 사용량에 기반한 종량제 방식으로 과금하고 있다. 여기서 말하는 서비스 사용량이란 일반적으로 고객이 일정기간 동안 사용한 컴퓨팅 자원의 총량(규모)을 말한다.

프로세스의 사용에 대해서 아마존의 EC2, Microsoft Azure, ServePath GoGrid 등은 모두 가상 CPU의 총사용 시간만큼 과금하고 있다.

스토리지에 대해서는 월간 혹은 주간 저장 용량과 스토리지로의 데이터 전송량에 비례해서 과금하고 있다. 아마존 AWS의 경우 월간 저장된 GB 12~15센트의 가격에 서비스를 제공하고 있다.

웹 서비스의 네트워크 사용량의 경우 웹 페이지 요청 수에 비례하여 과금하는 것이 일반적이다.

아마존과 같이 여러 국가에 서버를 두고 서비스를 제공하는 경우에는 사용자가 선택한 데이터 센터의 위치 지역에 따라 가격 차이를 보이기도 한다.

 

2.     정액제 과금

많은 SaaS 어플리케이션 사업자들은 기간 단위로 정량의 금액을 부과하는 사업 모델을 채택하고 있다. Google Apps의 경우 프리미엄 사용자 1인당 연간 50달러를 부과하며, Microsoft Office Live의 경우 서비스 등급에 따라 월간 19.95 달러에서 39.95 달러까지 부과한다.

IBM LotusLive 제품군은 사용자당 월별 48달러에서 99달러까지 혹은 분당 25센트에서 35센트까지 부과하고 있다.

 

3.     솔루션 판매

클라우드 컴퓨팅 서비스에 필요한 인프라 하드웨어 혹은 솔루션을 공급하고 있는 기업들은 영구적인 소유를 위한 전통적인 판매 방식을 기본으로 하고 있다. 이들은 대형 클라우드 컴퓨팅 서비스 공급자에게뿐만이 아니라, 기업이 자신만의 폐쇄형 클라우드 컴퓨팅 서비스를 구축하는데 필요한 인프라 솔루션들을 공급하고 있다.

특히 마이크로소프트와 같이 이미 공개형 클라우드 컴퓨팅 서비스를 공급하고 있는 서비스 공급자들도 고객이 자사의 플랫폼으로 이루어진 폐쇄형 클라우드 컴퓨팅 서비스의 구축을 위한 전체 솔루션을 판매하려는 움직임을 보이고 있다.

 

4.     기타

IBM, Oracle, Sun 등의 클라우드 컴퓨팅용 인프라 하드웨어 혹은 소프트웨어 공급사들은 고객이 클라우드 컴퓨팅 서비스를 구현하거나 사용하기 위해 필요한 개발 과정에 컨설팅 서비스를 수행하거나 직접 개발에 참여함에 의한 수익을 얻고 있다.

Microsoft는 개발자들이 만든 Azure용 서비스나 컴포넌트들을 상호 거래할 수 있는 마켓플레이스를 열어, 서비스 공급자, 개발자, 사용자들이 모두 확장 가능한 클라우드 플랫폼 서비스의 가치를 누릴 수 있는 환경을 만들려 한다.

 

n 당면한 과제

1.     기술적 문제

A.     서비스의 가용성

클라우드 컴퓨팅을 사용하는 대부분의 고객들은 서비스의 가용성에 매우 민감하다. 특히 자사의 고객을 대상으로 어떤 서비스를 제공할 목적으로 클라우드 컴퓨팅 서비스를 사용하는 기업들의 경우 클라우드 컴퓨팅 서비스의 안정성은 곧 기업 서비스의 품질과 직결된다.

하나의 클라우드 컴퓨팅 서비스가 잠깐의 서비스 실패를 일으킨다고 해도, 서비스를 사용하는 다수의 기업들이 동시에 장애를 겪게 되므로 그 파급효과는 매우 엄청날 수 있다.

아마존, 구글과 같이 가장 인지도 있는 사업자들의 경우에도 몇 차례의 서비스 불안정 혹은 접속 불가 현상을 보인바 있으며, 이러한 사건들이 발생할 때마다 클라우드 컴퓨팅 시장의 성장 전망에 저해 요소가 되었다.

2009 3월에는 Carbonite라는 클라우드 컴퓨팅을 통한 데이터 백업 서비스 업체가 7,500에 달하는 고객들의 데이터를 손실한 사건을 비롯하여, 기술적이거나 기업 자체의 불안정성으로 인하여 고객들이 직접 피해를 입게 된 다수의 사례들이 발생하였다.

특히 해커가 고의로 클라우드 컴퓨팅 서비스 사업자를 공격한다면 다수의 고객들이 함께 공격에 노출되므로 서비스 제공자는 서비스 자체의 가용성뿐만이 아니라 외부로부터의 위협 상황에 대해서도 많은 대비를 해야 한다.

고객은 다수의 서로 다른 클라우드 컴퓨팅 서비스를 동시에 이용함에 의해 해커의 공격 및 서비스 불안정에 의한 위험도를 낮출 수 있을 것이다. 이를 위해서는 클라우드 컴퓨팅 서비스들을 통합하여 관리할 수 있는 기술이 추가로 필요할 것인데, IBM이나 아마존과 같이 다수의 데이터 센터를 운영하고 있는 거대 서비스 공급자들이 이러한 기능을 일부분 제공하고 있기도 하다. 그러나 서로 다른 서비스 공급자간의 통합 문제는 아직 많은 발전이 필요한 분야이다.

B.      데이터 전송 병목

큰 기업의 데이터는 수십 테라바이트 이상의 수준이기 때문에, 이정도 분량의 데이터를 네트워크를 통해 원격의 클라우드 상에 전송하는 데에는 많은 비용과 시간을 필요로 한다. 예를 들어, 미국 내에서 아마존 S3 서비스에 10 테라바이트를 전송하고자 한다면, 초당 20Mbps의 전송 속도를 가정했을 때 1111시간을 필요로 하며, 1천 달러 정도의 네트워크 전송료가 추가로 부과된다.

사실상 현재 가장 빠르고 저렴하게 데이터를 전송하는 방법은 기업의 데이터가 담긴 디스크를 클라우드 데이터 센터에 우편으로 보내는 것이다. 앞에서 예를 든 10테라바이트 전송의 경우 디스크를 우편으로 보내면 400 달러 가량의 비용으로 하루 만에 전송할 수 있다.

전 세계적인 인터넷 속도의 향상과 기업 네트워크 장비의 고속화, 저비용화에 따라 데이터 전송의 효율성은 지속적으로 개선되겠지만, 기업의 데이터 양 역시 빠르게 증가하고 있으므로 네트워크를 통해 클라우드 상에 기업 데이터 전체를 전송하는 것은 쉽게 해결되지 않을 것으로 보인다.

그러나 일단 기업의 기존 데이터가 대량으로 클라우드 상에 전송된 상태라면 지속적으로 기업의 데이터를 클라우드 상에 빈번하게 업데이트 하는 것은 비교적 쉬운 문제일 것이다. 따라서 초기의 대량 데이터 전송의 문제를 디스크 발송 등의 방식으로 해결할 수 있다면 네트워크를 통한 전송의 어려움은 다소간 극복될 수 있을 것이다.

C.      성능 불안정성

대부분의 경우 클라우드 컴퓨팅을 제공하는 각 하드웨어들은 가상화 기술을 통해 여러 명의 사용자에게 동시에 서비스를 제공한다. 한 사용자가 요구하는 작업의 부하에 따라 같은 하드웨어를 사용하고 있는 다른 사용자들이 느끼는 하드웨어의 처리 성능이 크게 달라진다면 사용자는 클라우드 컴퓨팅의 성능을 불안정하게 느낄 수 있다.

이 문제는 클라우드 컴퓨팅에 사용되는 컴퓨터 하드웨어들의 구조적 발전과 가상화 기술의 지속적 발전에 의해 해결될 수 있을 것으로 보인다.

D.     빠른 확장성

현재 대부분의 클라우드 컴퓨팅 서비스들은 사용자가 사용할 컴퓨팅 자원의 규모를 미리 신청해 두고 그 범위 내에서 서비스를 공급하다가 상황에 따라 사용자가 직접 그 규모를 재조정 하는 방식으로 되어 있다. 따라서 사용자가 컴퓨팅 필요량에 따라 직접 조정하지 않으면 사용되지 않고 남아도는 자원에 대해서 과금이 이루어지거나, 반대로 일시적으로 부족한 컴퓨팅 자원 때문에 사용자의 비즈니스가 어려움에 처하기도 한다.

따라서 사용자의 컴퓨팅 요구 수준에 따라 빠르게 자원 배분을 재조정 할 수 있는 기능이나, 더 나아가서는 자동으로 컴퓨팅 자원량이 조정되는 기술이 큰 도움이 될 것이다.

E.      가상화가 어려운 영역들

일반적으로 높은 안정성을 추구하는 기업의 IT 시스템들은 하드웨어 수준의 장애 시에도 안정적인 서비스 공급을 위해 동일한 기능을 하는 하드웨어가 다수 존재할 필요가 있다. 그러나 하나의 클라우드 컴퓨팅 서비스 상에서 가상화된 다수의 하드웨어를 사용한다고 해도 실제로는 동일한 하드웨어 상에서 작동한다면 여전히 하드웨어 장애 위험에 노출되어 있다고 볼 수 있다. 따라서 클라우드 컴퓨팅 서비스 상에서 사용자가 각 하드웨어 요소 별로 구성을 제어할 수 있는 기능이 부여되거나, 다수의 클라우드 컴퓨팅 서비스들을 통합하여 사용자의 시스템을 관리 및 구성할 수 있는 기능이 필요하다.

클라우드 컴퓨팅 서비스를 제공하기 위해 하나의 하드웨어가 다수의 사용자를 위해 가상화될 수 있는 분야는 프로세서, 네트워크, 스토리지 등이다. 이러한 하드웨어들은 기업 사용자들의 사용 용도 대부분을 처리할 수 있으나, 다수의 사용자에게 고품질의 실시간 그래픽을 처리하는 등의 기능은 제공할 수 없다.

최근 그래픽 프로세서 생산 기업인 AMD는 개인 컴퓨터용 그래픽 프로세서를 대량으로 연결하여 클라우드 컴퓨팅 서비스를 통해 제공할 수 있는 기술을 선보이기도 하였으나, 대량의 사용자 환경에서의 작동 가능성과 성능 안정성 면에서 해결해야 할 과제들이 남아 있다.

 

2.     정책적 문제

A.     데이터의 보안성과 감시성

클라우드 서비스 상에 존재하는 기업의 데이터는 물리적으로 기업 외부의 클라우드 데이터 센터상에 위치하는 것이기 때문에 데이터의 보안성과 타인에 의한 감시 가능성 문제에 자유로울 수 없다. 클라우드 컴퓨팅 서비스 공급자들은 데이터의 보안 침해와 외부인에 의한 감시 가능성에 대해서 부정하고 있지만 많은 기업들이 클라우드 컴퓨팅을 사용함에 있어 가장 우려하는 문제 중에 하나이다.

몇몇 국가들은 기업의 데이터는 물리적으로 반드시 해당 국가 내에 위치할 것을 제약하고 있으며, 미국은 9.11테러 이후 제정된 패트리어트 법안(Patriot Act)의 통과를 근거로 자국 내 데이터 센터들에 대한 감시권을 요구하고 있고, 사베인-옥슬리 법안과 의료 산업의 HIPAA 법에 영향 받는 기업들은 데이터의 보안성과 감시성에 대해 규제 받고 있기 때문에 클라우드 컴퓨팅 사용에 어려움이 있다.

가트너에서는 클라우드 컴퓨팅 사용시 보안 문제의 고려 사항으로 데이터 접근권, 규제 준수, 데이터 저장 위치, 데이터 격리, 데이터 복구, 당국의 수사 지원, 장기적 생존 능력 등 7가지의 사항을 권고하였다.

다수의 하드웨어, 소프트웨어 공급자들이 이 문제를 해결하기 위해 다양한 제품들과 서비스들을 선보이고 있다. 아직 업계 전반적인 보안 수준의 표준화가 이루어지지 않고 있지만, 서비스 사업자는 다양한 계층에서 보안성을 추구하고 있고, 사용자는 최초 어플리케이션 데이터 수준에서 암호화를 수행함에 의해 지속적으로 이 문제를 해결해 나갈 수 있을 것이다.

B.      소프트웨어 라이센싱

일반적으로 소프트웨어들은 설치대상이 되는 서버 컴퓨터의 수에 비례하여 판매 가격이 산정된다. 그러나 클라우드 컴퓨팅에 사용되는 하드웨어들은 다수의 사용자들에게 가상으로 공유되기 때문에 기존의 소프트웨어 라이센스 방식은 사용자에게 부과되어야 하는 적절한 소프트웨어 가격 산정에 많은 어려움이 있다. 이 문제 때문에 지금까지 클라우드 컴퓨팅에 사용되는 소프트웨어들은 리눅스, MySQL등 무료인 오픈 소스 소프트웨어들을 기반으로 구축되어 왔다.

이에, 소프트웨어 공급자들이 클라우드 컴퓨팅의 사업 구조를 이해하고, 여기에 특화된 제품들을 내놓으면서 사용자의 사용량에 비례하여 가격을 부과하는 가격 정책을 도입하고 있다. Microsoft Windows, SQL Server 제품들이나, 아마존에서의 Oracle Database 등은 사용자의 서비스 사용량에 따라 과금되고 있다. 플랫폼 기능을 제공하는 많은 소프트웨어 공급자들이 향후 이와 같은 클라우드 컴퓨팅용 사용량 기반 과금 체계를 도입해 나갈 것으로 예상된다.

 

3.     환경적 문제

A.     데이터 고착화

현재 클라우드 컴퓨팅 서비스들은 각 사업자 마다 고유한 기술과 방식으로 구성되어 있기 때문에 한 서비스 내에서 구현된 어플리케이션이나 데이터들은 다른 서비스로 이전되는데 많은 비용과 시간이 필요하다. 또한 위에서 제시된 서비스 장애 위험도를 최소화 하기 위해서는 여러 클라우드 컴퓨팅 서비스를 동시에 이용해야 할 필요성도 있다.

이 문제를 해결하기 위해서는 업계 전반에서 호환성이 보장되는 개방형 표준이 정립되어야 할 것이며, 실제로 이를 위해 대학들을 중심으로 하여 Open Cloud Consortium[9]이 설립되었다.

B.      사용자의 직접 운영 대비 비용 이득

UC 버클리 대학 연구소의 비용 분석 자료에 따르면, 2008년 기준으로 기업이 하드웨어를 직접 구매하여 운영하고자 할 때 1$로 구입할 수 있는 프로세싱은 128 CPU 시간, 네트워크는 2.7GB, 스토리지는 10GB 였다. 만약 이와 동일한 자원들을 모두 아마존 클라우드 컴퓨팅 서비스에서 임대한다면 프로세싱의 경우 2.56달러, 네트워크는 0.27~0.40달러, 스토리지는 1.2~1.5 달러의 비용이 필요하다. 이 비교에 의하면 프로세싱과 스토리지의 경우 클라우드 컴퓨팅 사용시 직접 소유할 때보다 비용이 더 많이 드는 것으로 보인다. 그러나 여기에는 직접 소유에 필요한 전력비, 건물 임대료, 백업 비용, 인건비 등의 운영비용이 모두 제외된 것으로, 현실적인 비용들을 고려하면 아마존의 클라우드 컴퓨팅 서비스 사용 비용이 직접 운영보다 더 낮은 것으로 제시되었다.

또한, 기업의 유동적인 컴퓨팅 사용량 요구사항에 맞추어 탄력적으로 시스템을 운용할 수 있으므로 이에 의한 효과를 추가 고려하면 비용 측면에서는 클라우드 컴퓨팅이 큰 이점을 가져다 줄 수 있는 것으로 제시되었다. IBM의 통계에 의하면 평균적으로 기업들이 자체 운영하고 있는 데이터 센터에서 컴퓨팅 자원의 85%는 유휴상태에 있다고 한다. 서비스의 안정성을 높이기 위해 넉넉한 컴퓨팅 자원을 확보한 결과 평균적으로 많은 자원의 낭비가 발생하고 있는 것인데, 클라우드 컴퓨팅의 동적 확장성은 컴퓨팅 자원의 활용률을 크게 높여줄 것이며, 이에 의한 추가 비용 절감을 예측할 수 있다.

 

n 향후 전망

1.     클라우드 컴퓨팅 서비스 공급자의 차별화

클라우드 컴퓨팅 서비스의 영역 중 인프라 서비스(IaaS)의 경우 제공되는 컴퓨팅 자원의 양과 질은 수치적으로 쉽게 비교 가능하기 때문에 장기적으로는 대부분 사업자들이 유사한 가격 수준으로 제공할 것으로 예상된다. 때문에 서비스 공급자들은 보안성, 품질 보증 정책 등의 요소에 의해 차별성을 제공하려 할 것이다.

플랫폼 서비스(PaaS)나 어플리케이션 서비스(SaaS) 공급자 들이 제공하는 서비스는 그 성격과 구조에 따라 사용자에게 제공하는 가치가 현저히 다를 것이므로, 이들 분야의 공급자들이 가장 높은 수익성이 지닐 것이다. 거대 기업들은 플랫폼 서비스에 많은 투자를 하여 다수의 SaaS 서비스 기업들을 고객으로 유입하고자 노력할 것이고, 다양한 규모의 기업들이 수많은 SaaS 분야에서 경쟁할 것으로 예상된다. SaaS에서 제공되는 어플리케이션은 개인 사용자부터 기업 사용자를 대상으로 하는 매우 다양한 시장을 창출할 것이므로 소규모의 소프트웨어 기업들까지 활발히 참여할 것으로 전망된다.

 

2.     클라우드 컴퓨팅 관련 기술의 표준화

Open Cloud Consortium은 대학 등 학계를 중심으로 하여 클라우드 컴퓨팅 업계 전반의 공개형 표준화에 힘쓰고 있다. 또한 각 IBM, VMWare 등의 관련 인프라 및 플랫폼 업체들은 선두권을 잡기 위해 확장성과 연계성에 초점을 둔 플랫폼들을 선보이고 있는 추세이다. 국내의 경우 한국정보통신기술협회(TTA)와 국책 연구기관의 주도로 클라우드 컴퓨팅의 전 계층에 걸친 표준화 연구를 진행할 예정이기도 하다.

그러나 아직 시장 초기인데다가 많은 글로벌 기업들이 서로 주도권 경쟁을 하고 있는 상황이기 때문에 단시일 내에 기술 표준화가 이루어지기는 어려워 보이며, 표준화가 이루어진다고 해도 벤더별 지원 기술의 종류와 성능의 문제 등으로 인해 직접적인 호환성은 그다지 현실적이지 않아 보인다. 대신, 이 분야를 전문적으로 취급하는 업체들이 출현하거나, 시장 주도자가 아닌 벤더들이 부가 서비스로서 타사 방식과의 연동 기능을 지원할 것으로 예상된다.

 

3.     유비쿼터스 컴퓨팅 사회

클라우드 컴퓨팅에서는 각 작업에 필요한 컴퓨팅의 많은 부분이 사용자의 하드웨어가 아닌 클라우드 상에서 이루어지기 때문에 사용자의 하드웨어는 현재보다 더욱 단순해 질 수 있다. 비교적 저성능의 휴대용 기기나 저사양의 컴퓨터 장치를 통해서도 뛰어난 어플리케이션을 사용할 수 있기 때문에 사용자가 원하는 데이터에 대한 작업을 인터넷 접속이 가능한 곳이면 어디에서든 처리할 수 있는 유비쿼터스 사회의 초석이 될 수 있다.

특히나, 시간과 장소를 불문하고 인터넷 접속이 가능한 범용 기기로서 스마트폰의 폭발적 인기 덕분에 클라우드 컴퓨팅은 휴대용 기기에서도 이미 많은 성공 사례를 보여주고 있으며, 작은 화면에 의한 인터페이스 문제를 잘 극복한다면 앞으로 더욱 많은 가능성을 보여줄 것으로 전망된다.

 

 

n 레퍼런스

Armbrust et al, Above the clouds, UC Berkely, 2009

J. Nicholas Hoover and Richard Martin, Demystifying the cloud, InformationWeek, 2008

Startups shape the cloud, InformationWeek, 2008

Wikipedia: http://en.wikipedia.org/wiki/Cloud_computing

O’Reilly radar: http://radar.oreilly.com/2008/10/web-20-and-cloud-computing.html

KIPA – 클라우드 컴퓨팅 시장 동향 및 전망, 2009

http://www.software.or.kr/ICSFiles/afieldfile/2008/03/17/cloud.pdf

IBM, Seeding the Clouds: Key Infrastructure Elements for Cloud Computing, 2009

ETRI – 클라우드 컴퓨팅 기술 동향, 2009

 

by 김성균 | 2010/04/26 00:22 | 잡다구리 | 트랙백 | 덧글(0)

지난 학기 까지의 성과

 KAIST 정보미디어 MBA과정에서 10개월째 열심히 학업에 매진하고 있습니다. 이제 2개월 남았군요.



 남은 2개월동안 더 분발하고, 업계로 돌아갈 도전적인 포지션도 찾을 수 있었으면 좋겠습니다.

by 김성균 | 2009/10/28 01:13 | 잡다구리 | 트랙백 | 덧글(6)

◀ 이전 페이지          다음 페이지 ▶