본문 바로가기
팁 & 테크

클라우드 컴퓨팅의 근원 '가상화 기술'

by 테리™ 2009. 4. 15.
반응형

최근 IT 업계 전체에 가상화(Virtualization)의 바람이 불고 있다. 사실은 바람이 아니라 폭풍이 불고 있다고 할 정도로 많은 관심을 받고 있다. 가상화는 이제 단순한 패러다임이나 개념 수준의 기술이 아니라, 실제 업무에서 효율을 높이기 위해 반드시 사용해야 할 기술로 자리잡고 있으며, 가상화 기술을 도입하는 기업 또한 빠르게 늘어나고 있다.

현재 대부분의 기업들에서 ‘가상화’라 하면 서버 가상화만을 떠올린다. 하나의 서버에 여러 개의 가상화 서버를 올려서 더 높은 효율과 안정성, 관리 효율을 이루어 내는 서버 가상화는 분명 가장 대표적인 가상화이다. 하지만 가상화는 단순히 서버에서만 가능한 게 아니라 IT 인프라 전체에서 가능하며, 범위 또한 대단히 넓다. 이제는 서버 뿐 아니라 스토리지와 네트워크까지도 가상화되고 있으며, 많은 업체에서 이를 위한 솔루션을 많이 만들어내고 있다.

가상화란 무엇인가?

▲ 가상화 기술은 '존재하지 않는 것을 존재하는 것처럼 만드는 것' 이다.

최근 주목받고 있는 ‘가상화’의 의미부터 생각해 보자. 가상화 기술은 쉽게 말해, ‘없는 것을 있는 것처럼 보이게 만든’ 것이다. 이렇게 만드는 것은 현실에서는 힘들지만 컴퓨터 안에서는 가능하다.

컴퓨터가 사용할 수 있는 자원의 일부를 쪼개거나 여러 자원을 합쳐서 특정한 소프트웨어의 틀로 묶고, 그 안에서 돌아가는 프로그램이 이 가상의 자원을 진짜 컴퓨터처럼 보이게만 하면 되는 것이다. 그리고 이 방법들은 시스템 자원의 ‘나눔’ 개념을 완전히 뒤바꾸어 놓았다.

사실 이 가상화는 어제오늘 나온 기술이 아니다. 뿌리를 찾아 가자면 예전 IBM의 초기형 메인프레임까지 거슬러 올라가는 이 기술은 다양한 방법으로 사용되었다. 그 중에는 우리가 가상화라고 특별히 인지하지 못하면서 사용하고 있는 기술들도 몇 있다.

예를 들면 흔히 사용하는 에뮬레이터도 하나의 플랫폼 가상화나 애플리케이션 가상화에 해당하며, 디스크 가상화에서는 디스크 파티션이나 RAID 등이 이에 해당한다.

가상화에는 완전한 하나의 플랫폼을 구현하는 플랫폼 가상화(Platform virtualization)에서부터 다양한 자원을 가상화하는 자원 가상화(Resource virtualization), 고성능 컴퓨팅을 위한 클러스터, 그리드 컴퓨팅(Grid Computing), 애플리케이션 레벨의 가상화(Application virtualization), 환경 가상화(Virtualization Development), 데스크탑 가상화(Desktop virtualization) 등이 있다.

플랫폼 가상화에는 우리가 흔히 접할 수 있는 전체 가상화와 부분 가상화, 상가상화, 운영체제 레벨의 가상화, 하드웨어 기반 가상화 등 여러 종류가 있다. 이들의 구분은 다소 애매한 면이 있지만, 크게 나누면 전체 가상화와 상가상화로 나눌 수 있을 것이다. 이는 가상화의 구현 방법 차이이며, 현재는 이들에 하드웨어 기반의 가상화가 접목되어 사용되고 있는 상태이다.

현재는 다양한 방법을 사용한 가상화 플랫폼이 출시되어 있으며, 이들 간의 표준화도 조금씩 진행되고 있다. 가상화 플랫폼에서의 솔루션 호환을 위해 몇몇 업체들이 협력하고 있으며, 가상화 플랫폼 자체의 기본 표준화도 진행되고 있다. 가상화 시장이 넓어지고, 사용자가 늘어나면 이 협력의 성과도 사용자들이 쉽게 느낄 수 있을 것으로 보인다.


▲ 사실 우리가 사용하는 디스크들은 이미 모두 '가상화'되어 있다.

자원 가상화에도 여러 종류가 있다. 자원 구성의 복잡도를 낮추기 위한 모듈화 개념의 ‘캡슐화(Encapsulation), 여러 시스템의 메모리를 하나의 시스템 메모리처럼 쓸 수 있는 메모리 가상화(Memory Virtualization), 메모리 주소 영역의 가상화로 실제 메모리 이상을 사용하기 위한 가상 메모리(Virtual Memory), 디스크의 물리적 한계를 극복하기 위해 논리적인 스토리지 개념을 도입한 스토리지 가상화(Storage Virtualization), 네트워크 자원의 분배나 재구성을 위한 네트워크 가상화(Network virtualization) 등이 있다.

스토리지 가상화는 막상 파고들면 익숙한 면이 많다. 최근에는 개인 사용자도 많이 사용하는 RAID(Redundant array of independent disk)는 여러 개의 디스크를 하나의 디스크처럼 사용할 수 있게 해 주는, 컨트롤러 레벨에서의 가상화 기술이다. 또한 흔히 사용하는 디스크 파티션도 가상화의 일종이며, 이것이 발전하여 여러 개의 디스크를 자유롭게 구성 가능한 논리 볼륨 관리 기술이 등장했으며 최근에는 이를 네트워크와 접목시킨 솔루션도 등장하고 있다.

이종 환경을 구현하기 위한 애플리케이션 가상화(Application Virtualization)도 있다. 여기에는 우리에게 익숙한 에뮬레이션(Emulation)이 대표적이며, 이외에도 포터블 어플리케이션(Portable application), 크로스 플랫폼 가상화(Cross-platform virtualization) 등이 있다. 애플리케이션 가상화는 개발 쪽, 특히 임베디드 개발에 있어 필수적인 환경이다.

가상화 기술로 뭘 얻을 수 있는가?


▲ '가상화'를 잘만 사용하면 낮은 효율의 서버 여러 대를 통합할 수 있다.

가상화 기술을 사용할 경우 가장 큰 장점은 효율과 편리함이다. 일반적으로 서버를 구축할 때는 ‘최대 부하’ 상태를 버틸 수 있을 정도의 컴퓨팅 능력을 전제로 도입하며, 실제 최대 부하가 서버에 가해지는 경우는 거의 없다. 이는 다시 말해 ‘대부분의 시간에 이 서버의 자원은 거의 사용되지 않는다’는 것이며, 효율이 대단히 낮다고도 할 수 있다.

하지만 가상화를 사용할 경우, 이런 남는 자원을 적절하게 사용할 수 있게 구성이 가능하다. 가상화 기술을 활용해 각 가상 머신의 최대 부하 시점을 정확히 예측해 이들이 겹치지 않게 잘 배치할 수 있다면, 서버의 이용 효율을 100%에 가깝게 끌어올리면서 성능면에서 전혀 손해를 보지 않게도 구현이 가능하다. 비용 효율은 여기에서 얻을수 있는데, 잘만 구성하면 비싼 대형 서버를 몇 대나 들이지 않고도 마치 이런 서버를 들인 것과 비슷한 효과를 얻을 수 있다는 것이다.

게다가 효율성도 높다. 가상화의 장점으로 ‘유연한 자원 배분’이 강조되는데, 이는 가상화된 각 서버에 필요한 정도의 컴퓨팅 지원을 할당하여 현재 가지고 있는 환경을 최대한으로 이용하게 할 수 있다. 비교적 부하가 적은 서버는 적게 할당하고, 특정 자원을 집중적으로 사용하는 서버는 그에 맞게 유연한 할당과 추후 조절이 가능하여 좀 더 높은 효율을 끌어낼 수 있다.

또한 물리적인 서버를 증설하는 것보다 가상 머신을 증설하는 것이 관리 측면에서도 간편하며, 가용성 면에서도 더 뛰어나다. 서버가 많아질수록 기계적인 고장은 늘어나며, 위험이 분산된다고 생각할 수도 있으나 보통 대형 서버로 갈수록 가용성에 대한 배려는 더 뛰어나므로 오히려 대형 서버 한 대가 위험이 더 적다. 유지 비용이 적은 것은 두말할 나위도 없다.


▲ '가상화'는 하나의 시스템에서 동시에 여러 개의 운영체제를 구동 가능한 최선의 방법이다.

가상화를 사용할 경우 서버를 줄일 수 있다는 것은 자원 문제에서만 접근할 수 있는 것은 아니다. 가상화를 사용할 경우, 가상화 솔루션이 운영되는 서버 (편의상 호스트라 칭한다)와 가상화 솔루션 안에서 운용되는 서버 (편의상 게스트라 칭한다)의 운영체제 플랫폼과 솔루션이 완전하게 독립적으로 운영될 수 있다. 이 장점은 특히 리눅스와 윈도우 등 다양한 이종 환경을 사용하는 경우 더욱 빛을 발한다.

예를 들면, 기존에 쓰던 서버가 웹 서버는 리눅스 기반의 아파치 서버, DB는 리눅스 기반에서 MySQL4, 그리고 애플리케이션 서버는 윈도우 서버 2003, 그룹웨어는 마이크로소프트의 솔루션을 사용하고, 여기다가 소프트웨어 개발 테스트 환경이 좀 더 필요하다고 해 보자.

이런 경우, 가상화를 사용하지 않을 경우 하나의 서버에서 모두 돌릴 정도의 적은 부하라 해도 최소 4대 이상의 OS 환경과 서버 구축이 이루어져야 된다. 한 시스템에 원칙적으로는 하나의 OS만이 작동하며, OS 교체를 위해서는 서버를 내리고, OS를 바꾸어 다시 켜는 방법밖에 없기 때문이다.

리눅스 환경의 경우, 오픈 소스의 특성상 같은 이름을 가지면서도 수많은 커널과 솔루션의 조합을 가질 수 있다. 또한 각 서비스 모듈은 특정 커널이나 모듈들에 의존성을 가지고 있는 경우도 흔하며, 심한 경우 특정 조건을 맞추지 않으면 동작이 보증되지 않는 경우도 있다. 물론 이와 연계되는 다른 솔루션들 또한 이런 문제를 흔히 가지고 있다.

그리고 이런 환경을 모두 일치시켜서 서버를 세팅하기란 참 머리 아픈 일이다. 또한 기껏 맞추더라도 추후에 환경이 변화하면 그것도 나름 문제가 된다. 기존에 겨우 설정해 둔 조합을 백지화하고 처음부터 다시 짜야 되는 경우도 은근히 흔하고, 이는 기업이 새로운 솔루션을 도입하는 데 큰 부담이 되기도 했다.

하지만 가상화를 도입하는 경우, 단순히 호스트에 가상화 솔루션을 올리면 모든 게스트 OS는 물리적인 한 시스템에서 서로간에 논리적으로 완전히 분리되어 동작한다. OS 환경이나 프로그램 환경도 완벽히 분리된 별개의 물리적 서버처럼 동작하며, 시스템 의존성에 대한 문제와 각종 보안에 대한 위험 또한 한 서버에 여러 서비스를 구동하는 것에 비해 크게 줄어든다.


▲ '플렉스 마이그레이션' 기능은 가상화의 유연함을 잘 활용한 기술이다.

가상화 플랫폼은 추후에 서버의 하드웨어가 바뀐다 해도, 일단 가상화 솔루션 기반에서는 하드웨어를 직접 건드리지 않는 구조이므로 자잘한 시스템 트러블에서도 자유롭고 서버를 옮겨 다니더라도 같은 환경을 쉽고 빠르게 구축할 수 있다는 장점도 있다. 이런 장점을 적극적으로 활용하는 게 인텔이 제온 프로세서에서 사용하는 ‘플렉스 마이그레이션(FlexMigration)’ 기능이다.

이 기능은 하드웨어 기반의 가상화에서 프로세서의 의존성으로 생기는 문제를 근본적으로 해결해 줄 수 있다. 추후 프로세서의 명령어 셋이 바뀔 경우, 하드웨어 기반 가상화 환경에서는 프로세서 의존성 덕분에 호환성이 문제가 생길 가능성이 있는데, 플렉스 마이그레이션을 사용할 경우 프로세서와 가상 시스템의 호환성을 체크해서 이를 맞추어 주어 호환성 문제를 근본적으로 해결할 수 있다.

플렉스 마이그레이션 기능을 사용할 경우, 신규로 서버를 도입하고 별도의 까다로운 서비스 세팅 없이 기존에 구성된 가상 시스템을 그대로 사용할 수 있다. 서버의 도입과 초기 설정의 번거로움을 줄이고, 빠르게 실제 업무에서 즉각 투입해 사용할 수 있다는 것은 효율 면에서 대단히 큰 장점이다.

또한, 이 기능은 다수의 서버를 가상화 환경으로 운영할 경우, 일부 서버가 장애를 일으켰을 때 그 서버에서 구동되던 가상 머신을 실시간으로 다른 서버로 옮겨 구동할 수 있는 기능도 가지고 있다. 가상화되지 않은 서버가 장애를 일으켰을 때 이를 확인하고 복구하는 데 걸리는 시간과 손실을 생각할 때, 임시방편이라도 다운타임을 최소화시켜주는 이 기능은 놀라운 가용성을 제공해 준다.


▲ '가상화' 기술은 이제 사무용 컴퓨터의 패러다임도 바꿀 수 있는 힘을 가지게 되었다.

서버를 벗어나도 가상화 환경은 여러 가지 장점이 있다. 일단 모든 가상화 시스템은 물리적인 시스템처럼 인식되므로, 이를 이용해서 가상화와 원격 제어를 결합한 솔루션들이 시장에 나오고 있다. 이 경우 클라이언트는 화면을 보여줄 수 있는 최소한의 요건만 갖추면 되므로 이 솔루션과 넷톱(Nettop) 씬클라이언트(Thin Client)를 결합시킨 기업용 솔루션이 제시되기도 했다.

개발자 입장에서도 가상화 환경은 유용하다. 프로그램 개발과 테스트가 단 하나의 플랫폼과 단 하나의 OS로만 이루어지는 경우라면 별 상관이 없겠지만 대개 이런 경우는 없다. 현재 사용자들이 사용하는 OS만 해도 많게는 수십 가지에 이르며, 이를 모두 구비해놓고 테스트하기엔 현실적인 제약이 크다. 하지만 가상 시스템을 사용한다면 시스템 구성 부담 없이, 멀티플랫폼 환경의 테스트가 가능하다.

최근에는 개인 사용자들도 가상화 환경을 많이 사용하는데, 이는 테스트 목적 이외에도 플랫폼 호환성을 피해 가기 위한 목적이 크다. 현재 한국의 인터넷 기반 전자결제 등의 환경이 윈도 XP와 인터넷 익스플로러에 맞춰져 있는 만큼, 그 이외의 운영체제를 쓰는 사용자들이 주 운영체제를 바꾸기보다는 가상화를 사용해 이런 문제를 해결하고 있기도 하다.

하드웨어 기반 가상화가 지니는 '의미'

최근 하드웨어 업계의 화두 또한 가상화이다. 현재 각 프로세서 업체들은 가상화 지원 기능을 프로세서에 포함하고 있으며, 프로세서 이외의 면에서도 가상화의 효율을 높이기 위한 다양한 기술들이 발표되었다. 스토리지나 네트워크의 가상화는 대형 업체들을 중심으로 시스템 솔루션 형태로 찾아볼 수 있다.

x86 계열에서의 가상화는 크게 두 가지 방법으로 구현되었다. 유닉스/리눅스 기반의 솔루션이 사용하던 Xen 등에서 채택한 ’상가상화(Paravirtualization), 그리고 VMware 등이 사용한 전체 가상화(Full virtualization)이 그것이다. 그 이외의 방법은 이 두 가지 방법과 겹치는 부분이 많아서 별도로 구분하지 않는 경우도 있다.

상가상화는 게스트 OS를 소스 레벨에서 조절하여 가상화에 맞추어 동작시키는 방식으로, 이 경우 성능은 확실하게 올릴 수 있다. 하지만 이를 수정하기는 만만치 않은 일이다. 게다가 수정이 불가능할 경우, 최악의 경우 동작시키지 못할 수도 있다. 이 덕분에 상가상화는 소스가 공개되고 수정하기 쉬운 솔루션들이 표준으로 자리잡은 리눅스 환경에서 강세를 보인다.

현재 주위에서 가장 흔히 볼 수 있는 것은 플랫폼 가상화, 그 중에서도 에뮬레이션 형태의 전체 가상화이다. 이 방법은 지금까지 가장 보편적으로 사용되었으며, 새로운 하드웨어의 도입 등을 요구하지 않으므로 가장 가상화의 본질에 가까운 형태다. 이론적으로는 하드웨어의 영향을 받지 않는 독자적인 플랫폼이므로 잘만 만들면 하드웨어에 구애받지 않는 가장 표준적인 플랫폼을 만들 수 있다는 장점이 있다.


▲ 장치를 사용하는데 들어가는 '단계'의 차이는 '성능'의 차이로 연결된다.

전체 가상화에서 가상화 시스템에서 사용한 시스템 명령어는 가상화 매니저가 모두 중간에서 호스트 시스템에 맞게 변환한다. 이 경우 별도의 수정 없이 다양한 시스템의 구동이 가능한 장점이 있지만, 성능 문제가 생긴다. 게다가 가상화 매니저의 호환성 문제까지 대두되면 제약은 더욱 커진다.

실제로 가상화 기술이 등장한 초기에 많은 사용자들이 불만을 가진 게 ‘가상 시스템의 성능이 실제 시스템에 비해 너무 떨어진다’ 라는 것이었다. 이는 몇 가지 원인이 있는데, 그 중 하나는 가상 시스템이 돌아가는 환경이었다. 대부분의 가상화 솔루션은 기본 OS 위에 별도의 프로그램 형태로 구동된다. 이 상황에서 가상 시스템이 무엇인가 작업을 하기 위해서는 상당히 복잡한 과정을 거쳐야 한다.

우선 가상 시스템에서 요청이 들어오면 이 요청은 가상 시스템의 커널을 거쳐 가상화 솔루션, 호스트 OS의 커널을 거쳐 프로세서로 들어간다. 이런 긴 과정은 심하게는 프로세서 성능을 반쪽으로 만들기 충분한 수준이다. 프로세서 뿐 아니라 메모리, 입출력 등 모든 부분이 이런 과정을 거치므로 효율이 떨어지고 성능이 낮은 건 당연하다.

이것도 그나마 같은 플랫폼일 때 이야기다. 다른 플랫폼으로 가면 이는 더 절망적으로 바뀌는데, 일반적으로 프로세서를 에뮬레이션하기 위해서는 목표하는 성능의 10배가 넘는 프로세서를 사용해야 한다고 알려질 정도로 이 방법은 성능에서 핸디캡이 크다.

또한, 호스트 OS의 커널을 거친다는 것은 호스트 OS의 한계를 그대로 적용받는다는 말과 같다. 예전처럼 모든 OS 환경이 32비트 환경이었다면 이는 아무래도 상관없는 문제였지만, 64비트 환경을 사용할 수 있는 프로세서가 나오면서 문제는 달라졌다. 기존의 방법으로는 호스트 OS가 32비트 구성일 때, 가상 시스템으로 64비트 OS를 사용할 수 없었고, 이는 가상 시스템이 호스트 OS에 어느 정도 종속되기 때문에 벌어진 문제였다.

그리고 프로세서를 직접적으로 제어하는 프로그램의 경우 가상 머신이 대처하지 못하는 움직임을 보이기도 하며, 이런 프로그램들은 가상화 솔루션을 사용할 수 없다. 이 문제는 많이 개선되어  현재는 성능 면이나 호환성 면에서 거의 문제가 생기지 않을 정도로 개선된 상태이지만, 아직도 문제가 일부 남아 있다. 이는 태생의 한계라 봐도 될 수준이다.


▲ 최근 발표되는 프로세서들은 '가상화' 기술을 직접 지원하고 있다.

하지만 이런 가상화 기술은 프로세서에서 관련 기술을 직접 지원하면서 큰 변화의 계기를 맞게 되었다. 호스트 OS의 커널을 거치지 않고 직접 프로세서와 연결이 가능하게 되면서 기존의 가상머신이 가지고 있던 속도와 호환성, 호스트 OS에 따른 구성의 제약 등 많은 문제점이 근본적으로 해결되기 시작한 것이다. 현재는 다양한 가상화 관련 기술이 프로세서에 탑재되어 성능이나 호환성 면에서 프로세서의 문제가 발목을 잡지는 않게 되었다.

프로세서가 하드웨어적으로 가상화에 관여한 것을 특별히 ‘하드웨어 기반 가상화(Hardware assisted virtualization)이라 하며, 업체별로 다양한 호칭이 있다. 이는 뿌리로 따지면 1970년대 IBM의 System/370에서 구현되기도 한 기술이다. 하지만 x86 계열에서는 시스템 구조가 가상화를 도입하기에는 다소 제약이 있었으며, 이는 가상화에 필수적인 몇몇 명령어가 존재하지 않았기 때문으로 알려진다.

현재 x86 기반 서버 환경에서 인텔은 VT, AMD는 AMD-V라고 하여 가상화 기술을 위한 배려가 준비되어 있다. 인텔의 프로세서는 넷버스트 아키텍처의 펜티엄 4 일부 모델부터, AMD는 소켓 AM2로 출시된 애슬론 64 x2 모델부터 이 기술들을 지원하여, 이를 지원하는 가상화 솔루션과 같이 사용할 경우 성능 면에서 이득을 볼 수 있다.

일단 프로세서에서 가상화 관련 기술을 지원할 경우, 위에서 설명한 것처럼 번거롭기 그지 없던 가상 시스템의 자원 사용 단계가 절반 가까이로 줄어든다. 가상화 솔루션에서 코드 변환과 호스트 OS의 커널을 거치는 단계를 생략하거나 최소화하고 바로 프로세서로 접근할 수 있기 때문이다.

하나의 연산에 필요한 마이크로 단위 연산수가 줄어드는 만큼, 효율 또한 크게 올라간다. 덕분에 속도도 가상화하지 않은 경우에 거의 근접했고 무엇보다 호스트 OS 커널에 대한 종속성을 벗어버릴 수 있었다. 현재는 이 기능을 사용하면 32비트 OS 위에서 64비트 OS를 가상 시스템 형태로 사용할 수 있다.

프로세서뿐만이 아니다. 인텔은 이미 I/O 가상화를 위한 VT-d, 네트워크를 위한 VT-c등을 자사의 칩셋 제품군에도 적용시켰다. 이 기술들은 적절한 프로세서와 메인보드, 소프트웨어 환경이 갖추어졌을 때 사용할 수 있으며, 이를 모두 사용할 경우 가상 시스템의 성능은 가상화되지 않은 경우의 95% 이상까지 효율을 낼 수 있다.

가상화의 영역은 점점 넓어진다

가상화의 영역은 서버와 플랫폼 뿐만이 아니다. 가상화가 꽤 긴 역사를 가지는 기술인 만큼 많은 분야에 적용되어 있으며, 그 범위는 점점 넓어지고 있다. 또한 컴퓨터의 성능이 올라가고, 가상화된 성능과 실제 성능간의 차이도 줄어들고 있어 그 효용성도 올라가고 있다. 점점 강력해지는 인프라의 효율을 위해, 이제 인프라 전반에 가상화 도입의 바람이 불어오고 있다.

플랫폼 이외에도, 스토리지나 네트워크 등의 가상화도 진행되고 있다. 더 크게, 또한 더 효율적인 자원의 활용을 위해 스토리지나 네트워크에도 각종 가상화가 도입되고 있으며 이를 통해 더 큰 디스크 용량이나 네트워크 대역폭, 물리적인 한계를 받지 않는 유연성을 얻어 내고 있으며, 이는 높은 효율로 이어지고 있다.

한편, IT 인프라스트럭처 레벨에서 주목받고 있는 기술로는 '클라우드 컴퓨팅'이 있다. 클라우드 컴퓨팅은 최근 IT의 미래를 이끌어갈 기술로 각광받고 있다. 바로 이 클라우드 컴퓨팅 또한 기본 환경이 가상화를 전제로 이루어지며, 성능과 효율을 함께 잡을 수 있는 기술로 업계의 큰 관심을 받고 있다.

원문보기 댓글보기 ▒ Copyright ⓒ Acrofan All Right Reserved
반응형

댓글