A Lap around Cloud Computing – “Dynamic Set of Connected Computers”

다음 글: [Windows Azure Platform/A Lap around Cloud Computing] – A Lap around Cloud Computing – “Everything as a Service”

대한민국의 Cloud Computing은 아직 요원한가?


2010년말부터 Cloud Computing에 대한 이야기는 IT 업계 이곳 저곳을 폭풍처럼 휩쓸고 다니고 있다. 하지만 생각 외로 Cloud Computing이 왜 중요한지, Cloud Computing이 당장 어떤 방식으로 지금의 업무를 변화시키게 될 것인지를 정확히 이해하거나 파악하고 있는 사람들도 드물다. 대부분의 경우, Cloud Computing은 단순히 저장소의 개념으로 이해되거나 혹은 자신이 아닌 다른 대기업의 전산 자원을 빌려서 사용한다는 사실에만 집중한 나머지 믿을 수 없다는 선입견에 깊이 빠지는 오류를 범하는 일이 상당히 많은 것 같다.


필자 역시 Cloud Computing에 입문한지 몇 년이 채 안된, 현역으로 열심히 뛰고 있는 개발자이다. 그러나 입문한지 몇 년이 채 안된 바로 그 사이, 심지어는 이 글이 쓰여지고 여러분들에게 보여지고 있을 지금 이 순간에도 Cloud Computing은 빠른 속도로 진화하고 있다.


사실 Cloud Computing은 우리나라를 제외한 대다수의 나라에서 이미 광범위하게, 그리고 매우 성숙하게 시스템이 완성되어가고 있는 추세이다. 이 글에서는 이러한 Cloud Computing의 추세와 분류, 동향을 부족하지만 간단히 정리하고 살펴보고자 한다.


Cloud Computing은 외계 문명 따위가 아니다.


제목 그대로, Cloud Computing은 외계 문명 따위가 아니라, 우리가 이제껏 이룩해왔던 수많은 기술들과 경험들이 집약된 종합 예술 작품과 같은 것이다. 그렇다면 어떤 기술들과 경험들이 Cloud Computing을 지탱하고 있는 것일까?


한국 Microsoft에서 Cloud Computing을 열혈 전도하고 계시는 김재우 부장님의 정의 (지난 Tech-Days 2010 Fall 행사의 Keynote 세션 “Cloud를 말하다에서 언급된 내용 중 일부를 발췌)에 따르면 Cloud Computing은 기술적으로 “Dynamic Set of Connected Computers”라는 문장 하나로 표현이 가능하다. 실질적인 구현 방법에 있어서 차이는 있을 수 있지만 대부분 이 문장에서 설명하는 구도 안에 포함이 된다. 이 문장에서 추출할 수 있는 키워드만을 놓고 보더라도 그러한데, Dynamic, Set, Connected Computers라는 키워드의 각각의 사전적인 정의만 알고 있다 하더라도 이미 여러분은 Cloud Computing의 절반 이상은 이해한 셈이다.


Dynamic


Cloud Computing은 동적인 것이다. 업계 부문마다 Dynamic의 성질을 표현하는 이음동의어가 존재하는데 기술적으로는 Runtime이라고 이야기하고, 비즈니스 적인 차원에서는 On-Demand라고 이야기하며, 학계에서는 Really-Runtime (실시간)이라고 이야기한다. Cloud Computing의 도래 이전까지 이는 각자 추구하는 목표가 서로 상이한, 엄밀히 말하면 이음동의어가 아닌 완전히 다른 말로 알려져 있었다. 그러나 Cloud Computing은 이러한 단어들이 이음동의어가 될 수 있도록 해주는 큰 플랫폼이다. 이 중에서도 Cloud Computing On-Demand의 뜻을 가장 잘 실현할 수 있도록 도움을 준다. , 필요할 때 즉시 확장하고 필요치 않을 때는 접을 수 있는 탄력성을 제공한다.


또 다른 측면으로는 우리가 어렸을 적에 함수의 개념을 익히기 위하여 배웠던 상자 (Black Box) 개념과 같이, 어떤 결과를 도출하기 위하여 최소한 수행해야 할 입력만 존재한다면 나머지는 블랙 박스 안에서 온갖 처리를 하게 되고 나중에 그 결과를 받을 수 있다. , Cloud Computing이 이 블랙 박스 노릇을 하는 것이다. 개념적으로 이 블랙 박스는 이제껏 논리 연산 또는 소프트웨어의 범주 안에서 설명되어왔지만, Cloud Computing은 이 부분이 가상화, 자동화, 그리고 병렬 컴퓨팅으로 설명된다.


여기서 잠시 짚어야 할 부분은, 어떤 IT 업계 종사자들의 이야기를 들어보면 마치 가상화가 Cloud Computing의 전체를 이루고 있는 구성 요소라고 설명하는 일이 종종 있다는 점이다. 유감스럽게도 이는 정확한 정의가 아니고, 비율로 따지면 약 20%만 일치하는 정의이다. 왜냐하면, 가상화를 수단으로 동적인 시스템을 구축하는 것이 Cloud Computing을 구현하는 것에 있어서 첫 걸음에 불과한 작업이기 때문이다.


2000년대 초반까지 가상화 기술은 지금의 VMware Workstation과 같이 일부 개발자와 IT 전문가들에게 유용한 테스트 프레임워크 또는 – DOSBOX (http://www.dosbox.com)와 같이 옛날 DOS 게임의 향수를 잊지 못하여 발걸음을 돌리게 만드는 추억의 DOS 에뮬레이터 정도로 알려진 것이 고작이었다. 그러나 CPU 기술의 비약적인 발전에 힘입어 단순히 Clock 회전 수를 높이는 것보다 Core의 수를 늘이는 것이 더 큰 발전을 가져다 줄 것이라는 유행과 맞물려 가상화 기술은 르네상스 시대를 맞이하게 되었다. 이제는 우리가 설거지를 하기 위하여 사용하는 흡수율이 좋은 스펀지를 조각 내어 사용하는 것과 마찬가지로 시스템 전체를 곧바로 사용하는 것 보다는, 계획적으로 시스템을 분할하고 동시에 나누어서 사용하는 것이 더 효율적인 시대가 되었다.


시스템을 나누어 사용하는 방법은 IT 업계의 세부 분야마다 선호하는 기법이 제각기 다르지만 보통은 가상화와 병렬 컴퓨팅 중 하나를 택하게 되어있다. 가상화는 이미 실행 중인 기본 운영 체제의 자원을 기반으로 (이 때 실제 물리 하드웨어 또는 다른 가상 컴퓨터의 실행을 지원할 컴퓨터를 호스트라고 한다) 여러 대의 가상 컴퓨터 (게스트)를 생성하고 실행하는 기법을 말한다. 요즈음은 이러한 가상화 기법을 Hypervisor라고 불리는 구성 요소에 의하여 처리되도록 하고 있으며 대표적으로 Windows Hyper-V, Linux 호환 운영 체제에서는 XEN Kernel 등을 사용하는 것이 보편적이다. 반면 병렬 컴퓨팅은 단일 운영 체제가 관리할 수 있는 범위 내에서 최고의 성능을 낼 수 있도록 하는 방식으로 일반적인 CPU 기반의 Multi-threaded 연산에서부터 최근 각광받고 있는 GPU 기반 병렬 컴퓨팅에 이르기까지 그 방법이 다양하다. 양쪽 모두 폭발적인 성능을 이끌어낼 수 있고 덩치 큰 시스템을 효율적으로 분할하여 사용할 수 있는 최고의 방법이다.


이제 이렇게 분할된 각각의 자원들을 어떻게 관리하고 운용할 것인가가 과제로 남게 되는데 이 부분을 설명할 수 있는 것이 바로 자동화이다. 자동화에 대한 이야기를 하려면 다음 키워드인 Set과 같이 설명하는 것이 좋겠다.


Set


앞서 설명한 것처럼 가상화를 이용한 것이든, 병렬 컴퓨팅의 구현을 위하여 자원을 나눈 것이든 모든 것은 하나 이상의 객체로 구성된 집합 (논리적이든 물리적이든 개념적인 것이든 관계없다)으로 묶일 필요가 있다. 그리고 집합으로 되어있는 자원에 대한 컴퓨팅 업계의 일반적인 접근 방법은 일반적으로 일괄 처리 방식과 같은, 즉 자동화와 관련이 있다.


Cloud Computing에서의 자동화는 단순히 관리를 자동화하는 것 말고도 하나의 분명한 목표가 있다. 유틸리티 컴퓨팅을 구현하기 위한 탄력성을 유지하는 것이 그 목표이다. 여기서 유틸리티 컴퓨팅이란 사용한 만큼 비용을 요구하거나 비용을 내는 것으로 양쪽 모두 해당 사항이 있다. 소비자의 입장에서는 Cloud Computing을 이용하여 필요한 만큼 자원을 빌려서 사용하고 그 값을 치르는 것을 선호한다. 반대로 공급자 입장에서는 필요한 만큼 Cloud Computing 자원을 생성하여 제공하고 필요하지 않을 때는 에너지 자원 소비량을 최소화 또는 다른 Cloud Computing 소비자에게 더 많은 자원을 공급하기 위한 목적으로 낭비되는 자원을 제거하기 위한 자동화 프로세스가 필요하다. 물론 필요하다면 더 많은 자원을 확보할 수 있는 프로세스도 병행되어야 한다. 막연히 자원을 나누거나 나누어진 자원을 유지/관리하기 위한 자동화가 아니라 경제적인 이점을 가져다 줄 수 있는 자동화를 생각해야 하는 것이다.


여기서 알아둘 것이 하나 더 있는데, 단순히 시스템을 나누는 것 말고도 Cloud Computing에서 중요하게 생각하는 가치가 있다. 서로 성격이 다르고, 구성하는 방식이 다른 컴퓨터나 서비스 사이에서도 유기적으로 연결되어 전체적인 시스템이 완성될 수 있도록 돕는 상호운용성과 분산 기술에 대한 것을 빠뜨려서는 안되겠다. 내부적으로는 역할로 정의되는 서로 다른 스케일의 인스턴스 집합들이 상호작용하는 방법을 디자인하는 일이 출발점이 될 수 있고, 외부적으로는 Cloud Computing 서비스 간 또는 – Cloud Computing 서비스가 온 프레미스 서비스에 의존하는 형태와 같은 상호 작용과 아키텍처를 설계하는 일까지 포함할 수 있다. 이것이 Set이라는 키워드와 연결된 Cloud Computing의 모습이다.


Connected Computers


Cloud Computing은 언제나 연결된 상태여야 한다. 바깥이든 안이든 관계없이, 요즈음 우리는 인터넷, TCP/IP를 기반으로 하는 연결의 사용에 매우 익숙하다. 그리고 인터넷을 이용하는 것이므로 당연히 인터넷 체계를 이해하고 활용할 수 있는 수많은 전자 장치들과 상호작용할 수 있으므로 상호 운용성에 있어서도 문제될 것이 전혀 없다.


Cloud Computing을 기반으로 시스템을 구축하는 과정에서 생각해야 할 것은 이와 같이 연결되어있는 시스템들 사이의 성능에 관한 것이다. 인터넷을 기반으로 모든 것이 구동된다는 점을 고려해볼 때 그 어느 때보다도 네트워크 응답 속도가 중요한 요소로 자리잡게 되는 것이다. 이에 따라 주요 Cloud Computing 업체들은 자원의 배분 말고도 네트워크 응답 속도를 향상 시키기 위한 다양한 전략을 구사하고 있다.


더욱 재미있는 사실은, 최적의 네트워크 응답 속도의 확보를 위하여 의외로 1차원적인 관점에서 노력을 기울이고 있다는 점인데, 그 부분은 바로 데이터센터 부지의 확보와 데이터센터의 유지 보수 편의성 증대에 관한 것이다. 최상의 응답 속도 확보를 위하여 주요 경제 거점과 가장 가까우면서도 하드웨어에 대한 장애가 발생할 확률이 상대적으로 적은 기후 환경을 택하는 것이다. 그리고 각 개별 객체가 의도하지 않은 재해로 인하여 중단되는 시간을 최소화할 수 있도록 데이터 센터 내의 하드웨어 교체 시간을 최소화할 수 있는 혁신적인 데이터센터 설계 공법이 여기에 더해진다.


결국 우리가 모두 가지고 있는 기술 아닌가?


이 질문에 대한 대답은 YES이다. 앞에서 Cloud Computing을 사용한다는 것이 남의 자원을 빌려다 쓰는 것이고 그래서 그저 믿지 못하겠다고 선입견에 빠지는 것이 오류라고 하였는데 이는 사실이다. 만약 여러분의 IT 부서 또는 기업이 능력만 된다면 전사적인 차원에서 Cloud Computing으로의 이행을 기획할 수도 있고, 더 나아가서 일반 소비자들에게도 서비스가 가능한 Cloud Computing을 구현할 수도 있다. Microsoft, Amazon, IBM, VMware 등 이름만 들어도 알만한 회사들의 기술력을 바탕으로 말이다.


그렇지만 이를 실천하는 것은 매우 어렵고 비용이 비싼 일이라는 것을 몇 걸음 떼보면 금방 체감할 수 있을 것이다. 그리고 앞서 언급한 기업들이 일반 소비자들과 기업들을 대상으로 제공하는 서비스들은 당연히 여러분의 Cloud Computing 서비스보다 완성도가 높다. 그것도 99% 이상의 서비스 가동률을 보장하는 계약과 더불어서 말이다. 여러분의 능력과 재량에 따른 것이긴 하겠지만 한 가지 확실한 것은, 여러분이 생각하는 것만큼 Cloud Computing 서비스는 불안하지 않다는 것이다.


그럼에도 불구하고 Cloud Computing의 이점을 완벽하게 얻기 위해서는 이러한 기업들이 제공하는 가동률이 매우 뛰어나고 우수한 서비스 말고도 여러분 고유의 서비스를 구현해야 할 필요성이 있다. 외부에 노출하여 운영하는 서비스가 아닌, 여러분이 A-to-Z를 모두 관리하고 통제해야 할 필요가 있는 사항들을 완벽히 관리할 수 있기 위해서는 Cloud Computing 환경을 여러분의 입맛에 맞게 다듬어야 할 필요가 있다. 더 나아가서는, 전산 직원이 없을지라도 웹 사이트에서 마치 음식을 주문하듯 필요한 서비스나 자원을 사용자가 요청하면 즉시 서비스가 준비될 수 있는 자판기 같은 서비스를 만족시키기 위해서는 Cloud Computing 기술이 필수적이다. 이를 두고 흔히 Self-Service Portal이라고 한다.


Self Service Portal 하나면 만사 OK인가?


Self Service Portal은 앞서 이야기한 공용 Cloud Computing 서비스에서는 물론 사설 Cloud Computing 서비스에서도 반드시 제공되어야 하는 기본 구성 요소이다. 이러한 구성 요소를 통하면 사용자는 관리자나 개발자에게 불필요한 업무를 지시해야 할 이유가 없어지고 각자의 역할에 알맞은 업무에 더 많은 시간을 투자할 수 있어 훨씬 경제적이다.


이를 두고 일각에서는 IT 인력의 Job Security를 깨먹는 일이 아닌가 하는 우려를 하기도 한다. 그러나 필자는 이 부분에 대하여 동의하지 않는다. Job Security를 잃어버릴 만큼 얇은 지식과 노하우를 가지고는 결코 지금의 자리에 오를 수 없었을 것이다. Cloud Computing 환경이 상당부분의 작업을 자동화하고 프로그래밍 시간을 줄이는 것은 사실이지만, Cloud Computing은 사람을 대체하는 인공 지능이나 Turing Machine 따위가 아니다. 더불어서 관리자나 개발자들은 예전의 엔터프라이즈 시스템에서와 같이 시스템 하나에 집중하는 것이 아닌, 아키텍처를 관리하고 개발하기 위한 역량을 개발하는 일에 시간과 비용을 투자해야만 한다. 따라서 더 많은 부가 가치를 창출하기 위한 작업에서 이전보다 더 큰 재능과 역량을 필요로 하게 될 것이다.


다음 시간에는


다음 시간에는 Cloud Computing을 설명하는 또 다른 문장인 Everything as a Service, 즉 서비스화의 관점에서 바라보는 Cloud Computing을 집중적으로 살펴보고자 한다. 오늘 살펴본 Cloud Computing의 정의가 기술적인 것에 관한 내용이었다면, 이제 이러한 기술적 바탕으로 무엇을 서비스화할 수 있고 어떻게 가치를 창출해낼 수 있을 것인지를 깊이 있게 살펴보아야 할 때이다.


글쓴이 이력


l  Blog: http://7d5.32b.myftpupload.com / E-MAIL: rkttu@rkttu.com / Twitter: @rkttu


l  Windows Azure MVP (2011) / Visual C# MVP (2009-2010)


l  ㈜코아뱅크 코아기술연구소 (http://www.corebank.net) 연구원 재직 중


l  Windows Azure Café SYSOP (http://cafe.naver.com/wazure)


l  Visual Studio 2010 Team Blog (http://www.vsts2010.net) 집필진 활동 중

댓글 남기기