가상화

파일:VirtualBox2.png|섬네일|VirtualBox
'''가상화'''(假像化, virtualization)는 컴퓨터에서 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어이다. "물리적인 컴퓨터 리소스의 특징을 다른 시스템, 응용 프로그램, 최종 사용자들이 리소스와 상호 작용하는 방식으로부터 감추는 기술"로 정의할 수 있다. 이것은 다중 논리 리소스로서의 기능을 하는 것처럼 보이는 서버, 운영 체제, 응용 프로그램, 또는 저장 장치와 같은 하나의 단일 물리 리소스를 만들어 낸다. 아니면 단일 논리 리소스처럼 보이는 저장 장치나 서버와 같은 여러 개의 물리적 리소스를 만들어 낼 수 있다.
기업은 서버 가상화를 통해 하나의 컴퓨터에서 동시에 1개 이상의 운영제체를 가동시킬 수 있다. 대부분의 서버는 단지 용량의 10~15%만 사용하는데, 가상화는 이런 서버의 '''효용률(utilization rate)'''을 70% 그 이상으로 올릴 수 있다. 높은 수준의 효용률은 같은 분량의 업무처리에서 요구하는 컴퓨터 수를 줄여준다.
이 용어는 오래되었다: 1960년대 이후로 널리 쓰였으며, 전체 컴퓨터 시스템에서 개별 기능/구성요소에까지 컴퓨터의 다른 많은 면과 영역에 적용되어 왔다. 모든 가상화 기술의 공통 주제는 주변에 막을 씌워 "기술적으로 자세한 부분을 숨기는 것"이다. 가상화는 다른 물리적 위치에서 리소스를 한데로 합치거나 제어 시스템을 단순하게 하여 다중 송수신 접근과 같은 것을 통해 기반이 되는 기능 추가를 보이지 않게 하는 외부 인터페이스를 만들어 낸다. 새로운 가상 플랫폼과 기술의 최근 발전은 이렇게 성숙한 개념에 다시 한 번 집중하게 만들었다.
추상화와 객체 지향 용어들과 같이, 가상화는 다른 많은 환경에서 쓰인다. 이 글은 다음과 같이 두 가지 부분으로 나눠서 용어의 일반적인 용도를 되짚어 본다:
* '''플랫폼 가상화''': 모든 컴퓨터를 시뮬레이트한다.
* '''리소스 가상화''': 결합된 리소스, 단편화된 리소스, 아니면 단순화된 리소스를 시뮬레이트한다.
물론, 가상화는 또한 컴퓨터가 쓰이지 않는 환경에서도 중요한 개념이다. 많은 제어 시스템들은 어떠한 복잡한 장치에 가상화된 인터페이스를 추가한다. 자동차의 가속 페달은 엔진으로 향하는 연료의 흐름을 높이는 것 이상의 일을 한다. 플라이 바이 와이어(전자 장치로 조종하는) 시스템은 단순화된 물리적 기능 추가와 관계가 거의 없는 "가상 비행기"를 표현해 낸다.
가상화와 반대되는 다른 개념으로는 투명성이 있다: 가상 가공품은 눈에 보이고 느낄 수 있지만 실질적으로 존재하지 않는다. 투명한 것은 실질적으로 존재하지만, 사용할 때 보이지 않는다.
대부분의 가상화 형식들은 컴퓨팅 컴퓨터와 제공자와 연결되는 디자인 패턴을 포함한다. 컴퓨터와 제공자는 몇 가지 인터페이스를 사용하여 상호 작용한다. 가상화는 실제 컴퓨터를 위한 인터페이스를 제공하고 실제 제공자의 인터페이스를 소비하면서 인터페이스의 양면에서 활동하는 소비자와 제공자 사이에 중재자를 둔다.
이것은 보통 다양한 소비자들이 한 명의 제공자와 상호 작용하거나, 한 명의 소비자가 다양한 제공자들과 상호 작용하는 것을 허용하거나, 아니면 다양화를 인지하는 중재자가 있다면 이 두 가지 다 허용할 수 있다.
이상적으로, 가상화가 아닌 환경에서 직접 함께 작업하는 소비자들과 제공자들은 가상화된 환경에서는 어떠한 수정도 거치지 않고 작업해야 한다. 한 예로 가상 주소 공간을 들 수 있는데, 가상 주소 공간 안에 있는 중재자(가상 메모리 관리자나 주소 공간 관리자)는 실제 주소 공간과 그것의 소비자 사이에 끼인다. 중재자는 다양한 가상 주소 공간들을 제공하여 여러 명의 소비자들을 지원한다. 소비자들과 제공자(실제 기억 장치)는 일반적으로 이러한 다양성을 알지 못한다.
가상화의 영어 낱말 ''virtualization''이라는 용어의 원래 어원은 1960년대로 거슬러 올라가며, 하드웨어와 소프트웨어를 결합하는 가상 머신이 만들어진 때이다. 우리는 편하게 이것을 '''플랫폼 가상화'''라고 부른다. '''가상 머신'''은 IBM M44/44X 시스템에서 처음 등장했다. 가상 머신이 만들어지고 관리되는데 C-40 시절과 최근 "서버 가상화"라는 용어가 쓰이기 시작할 즈음 이를 "가짜 컴퓨터"(pseudo machine)를 만든다고 일컬었다. "가상화"와 "가상 컴퓨터"라는 용어들은 또한 둘 다 여러 해를 거치면서 추가적인 뜻을 얻게 되었다.
플랫폼 가상화는 주어진 하드웨어 플랫폼 위에서 제어 프로그램, 곧 ''호스트'' 소프트웨어를 통해 실행된다. 호스트 소프트웨어는 호스트 아래의 게스트 소프트웨어에 맞추어 ''가상 머신''이라는 시뮬레이트된 컴퓨터 환경을 만들어 낸다. 게스트 소프트웨어는 완전한 운영 체제라고 일컬으며, 독립된 하드웨어 플랫폼에 설치된 것처럼 실행된다. 일반적으로, 그러한 많은 가상 컴퓨터들은 하나의 단일 물리 컴퓨터 위에서 시뮬레이트된다. 다만 이들의 수는 호스트 하드웨어의 리소스에 제한을 받는다. 또, 일반적으로 게스트 운영체제가 호스트 운영체제와 같을 필요는 없다. 게스트 운영체제는 자주 특정한 주변 기기들이 제대로 기능하도록 하는 접근을 요구하므로 시뮬레이션은 그 장치들로 이어진 게스트의 인터페이스들을 지원해야 한다. 이를테면, 하드 디스크 드라이브 또는 네트워크 인터페이스 카드와 같은 장치들을 말한다.
플랫폼 가상화에는 하드웨어 시뮬레이션이 얼마만큼 완전하게 이식이 되는가에 따라 아래에 몇 가지 접근이 나열되어 있다. (다음의 항목들은 공통적으로 인정되는 것은 아니지만 기본 개념은 여기에 나온 안내에서 모두 찾을 수 있다.)
* 에뮬레이션 또는 시뮬레이션
* 네이티브 가상화, 그리고 완전한 가상화
* 하드웨어 지원 가상화
* 부분 가상화
* 반가상화
* 운영 체제 수준의 가상화
* 응용 프로그램 가상화
위에서 언급한 플랫폼 가상화의 기본 개념은 나중에 저장 볼륨, 이름 공간, 네트워크 리소스와 같은 특정한 시스템 리소스의 가상화로 확장되었다.
* 리소스 집합, 측정, 또는 연결은 각 구성요소를 더 큰 리소스나 리소스 더미로 결합한다. 이를테면:
** 가상 메모리
** RAID와 논리 볼륨 관리
** 저장 장치 가상화
** 채널 결합
** 가상 사설 네트워크 (VPN), 가상 주소 번역 (NAT), 그리고 이와 비슷한 네트워크 기술
* 컴퓨터 클러스터, 그리드 컴퓨팅, 그리고 가상 서버
* 파티션 분할
* 피막 형성
가상화를 응용한 예는 다음과 같다.
* 서버 통합.
* 재해 복구
* 테스트 및 단련
* 휴대 응용
* 휴대 작업 공간
** 응용 프로그램 수준
** 운영 체제 수준
** 컴퓨터 수준
* 하드웨어 가상화 기술
** 인텔l Vanderpool x86 가상화
** AMD Pacifica x86 가상화
** 썬 UltraSPARC T1 하이퍼바이저
** IBM 고급 전력 가상화
* AMD-V
* 응용 프로그램 가상화
* 가상 머신
* 에뮬레이션
* QEMU
* 하이퍼바이저
* IBM M44/44X
* 인텔 VT
* 나노커널
* 운영 체제 수준의 가상화
* 가상화 개발
* 가상 머신 모니터
* X86 가상화 — 하드웨어 보조 가상화
* 데스크톱 가상화
* 저장 장치 가상화
*  가상화 소개 
*
*