가상화(Virtualization)
란, 가상화를 관리하는 소프트웨어(주로 하이퍼바이저)를 사용하여 하나의 물리적 머신에 가상 머신(Virtual Machine, VM)
을 만드는 프로세스를 말한다.
이때 가상 머신은 물리적 하드웨어 시스템에 구축되어 자체 CPU, 메모리, 네트워크 인터터페이스및 스토리지를 갖추고 가상 컴퓨터 시스템으로 작동하는 가상 환경을 말한다.
어떤 서비스를 운영하기 위해서는 어플리케이션이 OS단에 올라가야 하고, 그 OS는 하드웨어상에 올라가는 환경으로 구성된다. 따라서 가상화 이전에는 하나의 컴퓨터에서 어플리케이션을 하나씩만 운영할 수 있었다. 그러나 가상화를 이용하면 어플리케이션이 OS가 아닌 가상 머신 위에 올라가게 되고, 따라서 하나의 컴퓨터에서 여러 가지 환경을 가진 어플리케이션을 운영할 수 있게 된다.
가상 머신은 격리된 환경을 제공하기 때문에, 가상 머신 내에서 어떤 프로그램이 실행되든 다른 시스템을 방해하지 않는다. 또 각 가상 머신이 독립적인 OS를 실행시키므로 단일 시스템상에서 Windows, Mac, Linux 등 다양한 OS를 사용할 수도 있다. 또 새로운 개발 환경을 테스트하거나 바이러스에 취약한 데이터에 접근하는 등의 작업을 할 때에도 전체 시스템에 장애가 발생하는 것을 방지할 수 있다.
반면 가상 머신이 많이 실행될수록 전체 시스템의 성능이 저하된다. 또 각 OS가 사용하는 리소스가 크기 때문에 컴퓨터 자원에도 상당한 부담으로 작용하게 된다.
가상 머신을 만들기 위해서는 먼저 가상 머신을 만들어 달라는 요청을 하이퍼바이저(Hypervisor)
라는 소프트웨어에 전달해야 한다. 요청을 받은 하이퍼바이저는 새로운 가상 서버를 생성하고 물리 서버가 가진 컴퓨팅 리소스(CPU, 메모리, 스토리지 등)를 각 가상 서버에 할당한 뒤 OS를 설치함으로써 가상 머신을 만들어 준다.
여기서 '하이퍼바이저'는 정확히 어떤 소프트웨어일까?
하이퍼바이저는 가상화 계층(Virtualization layer)
을 구현해 주는 소프트웨어이다. 가상화 구조에서 가상 머신들은 실제 하드웨어와 직접 연결되는 것이 아니다. 따라서 가상 머신들에 필요한 자원을 할당하고, 또 가상 머신의 요청을 처리해주는 등 가상화를 도와줄 '매니저'가 필요한데, 이러한 역할을 하는 것이 바로 하이퍼바이저이다. 그 역할 때문에 가상 머신 매니저(Virtual Machine Manager/Monitor, VMM)
라고 불리기도 한다.
하이퍼바이저는 크게 제1형(Native)
과 제2형(Hosted)
으로 구분할 수 있다.
제1형 하이퍼바이저는 Native hypervisor 혹은 Bare-Metal hypervisor라고 불린다. Bare-Metal(하드웨어상에 어떠한 소프트웨어도 설치되지 않은 상태)
이라는 말에서 드러나듯, 제1형 하이퍼바이저는 하드웨어 위에 직접 구동되어 게스트 OS들(즉 가상 머신들)을 관리한다.
제1형의 경우 호스트 OS가 별도로 존재하지 않고 게스트 OS들이 하드웨어 위에서 2번째 수준으로 실행되므로 오버헤드가 적다는 장점이 있다. 또한 각 게스트 OS에 발생한 문제들이 다른 게스트 OS에 영향을 주지 않는다는 것도 제1혀의 장점에 해당한다.
다만 가상 머신들에 대한 자체적인 관리 기능이 없으므로 이를 위한 컴퓨터 혹은 콘솔이 별도로 필요하다는 단점이 있다.
VMware의 ESXi, Citrix의 Xen, Microsoft의 Hyper-V 등이 대표적인 제1형 하이퍼바이저이며, 일반적으로 기업용 데이터 센터에서 활용된다.
제1형 하이퍼바이저는 가상화 구현 방식에 따라 다시 크게 두 가지로 구분할 수 있다.
전가상화(Full-Virtualization)
전가상화는 각 가상 머신들이 하이퍼바이저를 통하여 하드웨어와 통신하도록 하는 방식으로, Hardware Virtual Machine이라고도 한다. 가상 머신의 OS들은 자신이 가상 머신에 설치되었다는 것을 인지하지 못하며, 따라서 하이퍼바이저가 마치 하드웨어인 것처럼 동작하여 가상 머신의 OS가 보낸 요청을 하이퍼바이저가 하드웨어에 전달하게 된다.
이 방식은 하드웨어를 완전히 가상화하므로 가상 머신의 게스트 OS에 별다른 수정이 필요하지 않다. 그러나 하이퍼바이저가 모든 요청을 중재하기 때문에 성능이 다소 저하된다는 단점이 있다.
반가상화(Para-Virtualization)
반가상화는 하드웨어를 완전히 가상화하지 않는 방식으로, 게스트 OS는 자신이 가상 머신 위에 설치되었음을 인지하고 명령에 하이퍼바이저 명령(Hyper call)을 추가하여 하드웨어와 통신하게 된다. 즉, 이를 통해 가상 머신에 설치된 게스트 OS가 하드웨어에 직접적으로 요청을 보내는 방식이다. 따라서 하이퍼바이저는 게스트 OS와 하드웨어 사이의 명령을 중재하지 않고, 단지 게스트 OS에 자원을 분배하는 관리적 문제만 다루게 된다.
이 방식은 전가상화의 성능 저하 문제를 보완할 수 있다는 장점이 있지만, 게스트 OS의 커널을 수정해야 한다는 단점이 있다.
제2형 하이퍼바이저는 Hosted hypervisor라고도 불리며, 이름으로 알 수 있듯이 Host OS를 갖는 하이퍼바이저이다. 즉, 하드웨어에 Host OS가 설치되고 하이퍼바이저는 그 위에서 소프트웨어로서 동작한다.
제2형 하이퍼바이저는 기존의 시스템 위에서 사용할 수 있다는 점이 가장 큰 장점이다. 다만 게스트 OS가 하드웨어 위에서 3번째 수준으로 실행되므로 오버헤드가 크고, 호스트 OS에 문제가 발생할 경우 전체 게스트 OS에 영향을 미칠 수 있다는 단점이 있다.
VMware의 Workstation, Oracle의 VirtualBox 등의 소프트웨어가 제2형 하이퍼바이저에 해당하며, 이 방식은 주로 개인 컴퓨터에서 가상 머신을 사용하고자 할 때 사용된다.
컨테이너란 운영체제 수준의 가상화 기술로서, 커널을 공유하면서 각 프로세스를 격리된 환경에서 실행하는 기술을 말한다. 즉, 컨테이너를 이용한 가상화란 OS 위에 컨테이너 관리 소프트웨어를 설치하고, 이를 이용해 별도의 논리적인 구획(컨테이너)를 만들어 그 구획마다 애플리케이션의 작동을 위한 라이브러리 및 바이너리 파일 등을 모아 둠으로써 각 컨테이너들이 별도의 서버인 것처럼 동작하도록 하는 것이다.
컨테이너는 별도의 하드웨어 에뮬레이션 없이 리눅스 커널을 공유하여 컨테이너를 실행하므로 게스트 OS가 필요하지 않으며, 실행 속도도 매우 빠르다. 또한 오버헤드가 크지 않으며, 하나의 컴퓨터에서 여러 프로세스를 다량으로 실행할 수 있다는 장점이 있다.
또한 컨테이너는 독자적인 실행 환경을 가지고 있어 개발시 개발 및 테스트 운영 환경의 표준화에도 적합하며, OS를 가리지 않아 프로그램의 개발 및 배포에도 용이하다는 장점이 있다.
다만 호스트 OS의 커널을 공유하므로 보안 취약점이 컨테이너에 공통 적용될 수 있으며, 호스트 OS에 문제가 발생할 경우 해당 OS에서 실행되는 모든 컨테이너에 영향을 미칠 수도 있다. 또한 다른 가상화 기술 대비 설정 및 관리가 복잡할 수 있으며, 여러 컨테이너 실행 시 컨테이너 간 네트워크 구성도 복잡해질 수 있다는 단점이 있다.