가상머신과 하이퍼바이저: 격리된 실행 환경을 만드는 방식
가상머신의 하드웨어 추상화 방식과 Type 1·Type 2 하이퍼바이저, CPU·메모리·스토리지·네트워크 가상화 구조를 정리한다.
2026-08-14 · 최초 발행 2026-01-02
물리 자원을 나눠 쓰는 독립 실행 환경
가상머신(Virtual Machine, VM)은 물리 하드웨어를 소프트웨어로 에뮬레이션해, 하나의 시스템에서 여러 운영체제와 애플리케이션을 동시에 실행하도록 만든다. 각 VM은 CPU, 메모리, 디스크, 네트워크를 자신의 자원처럼 인식하며, 다른 VM과 분리된 상태로 동작한다.
이 구조의 중심에는 하이퍼바이저(Hypervisor)가 있다. 하이퍼바이저는 VM을 만들고 관리하면서 물리 자원을 분배한다. Linux, Windows, BSD처럼 서로 다른 OS를 한 서버에서 함께 실행할 수 있고, 한 VM에서 발생한 장애가 다른 VM으로 곧바로 번지지 않도록 격리할 수 있다.
컨테이너도 격리된 실행 환경을 제공하지만, VM과는 경계의 위치가 다르다. VM은 전체 OS를 포함하고 하이퍼바이저를 통해 하드웨어를 가상화하므로 강한 격리를 제공한다. 대신 GB 단위 메모리와 긴 부팅 시간이 필요한 오버헤드가 있다.
컨테이너는 OS 커널을 공유하면서 프로세스 수준에서 분리한다. MB 단위 메모리로 동작하고 시작이 빠르지만, 같은 OS 커널을 사용해야 하며 VM보다 격리 수준은 낮다.
하이퍼바이저가 놓이는 위치
Type 1 베어메탈 하이퍼바이저는 물리 하드웨어 위에서 직접 실행된다. 호스트 OS가 필요하지 않고 VMM(Virtual Machine Monitor)이 커널 역할을 맡는다. 중간 OS 계층이 없으므로 오버헤드가 낮고 하드웨어를 직접 제어할 수 있어 엔터프라이즈급 환경에 사용된다.
대표 제품으로 VMware ESXi, Microsoft Hyper-V의 독립 실행 모드, Xen, KVM(Kernel-based Virtual Machine)이 있다.
Type 2 호스트 기반 하이퍼바이저는 기존 호스트 OS 위에서 응용 프로그램처럼 실행된다. 하드웨어 관리는 호스트 OS가 담당한다. 설치와 사용이 간편해 데스크톱 환경, 개발, 테스트에 적합하지만 호스트 OS를 거치므로 성능 오버헤드가 존재한다.
VMware Workstation, Oracle VirtualBox, Parallels Desktop(macOS), QEMU가 이 유형에 속한다.
게스트 OS와 하이퍼바이저의 협력 방식
전가상화(Full Virtualization)는 게스트 OS를 수정하지 않고 실행하는 방식이다. 하이퍼바이저가 하드웨어를 완전히 에뮬레이션하며, 바이너리 번역(Binary Translation) 또는 하드웨어 지원을 사용한다. Intel VT-x(Virtualization Technology)와 AMD-V(AMD Virtualization)는 CPU가 가상화 명령어를 지원해 성능을 높인다.
게스트 OS 변경 없이 다양한 OS를 지원하고 완전한 격리를 제공하는 반면, 에뮬레이션 비용에 따른 오버헤드와 하드웨어 지원이 필요하다. VMware ESXi, Workstation, KVM, VirtualBox가 사례다.
반가상화(Paravirtualization)는 게스트 OS 커널을 수정해 하이퍼바이저와 직접 통신하도록 구성한다. 하이퍼콜(Hypercall)을 사용하며, 게스트 OS도 자신이 가상화 환경에서 동작한다는 사실을 인식한다. 에뮬레이션을 최소화해 전가상화보다 빠르고 자원을 효율적으로 사용할 수 있지만, 수정 가능한 OS만 지원할 수 있다. Xen의 반가상화 모드와 초기 VMware ESX가 사례다.
컨테이너 기반 가상화는 OS 수준에서 커널을 공유하고 프로세스를 격리한다. Namespace는 프로세스, 네트워크, 파일 시스템을 분리하고, Cgroups는 자원 제한과 격리를 담당한다. Union File System은 계층화된 파일 시스템을 제공한다.
전체 OS가 필요하지 않아 MB 단위 크기로 구성할 수 있고 수 초 안에 시작할 수 있다. 수백~수천 컨테이너를 높은 밀도로 실행하고 이미지를 공유·재사용할 수 있지만, 같은 OS 커널이 필요하며 VM보다 격리 수준은 낮다. Docker, LXC/LXD, Podman이 여기에 해당한다.
vCPU와 메모리 주소가 처리되는 방식
각 VM에 할당되는 논리 CPU를 vCPU라고 한다. 하이퍼바이저는 물리 CPU 코어를 시간 분할해 vCPU를 실행한다. Fair Share로 시간을 공정하게 나누거나, 우선순위에 따라 중요한 VM에 더 많은 시간을 배분할 수 있다. CPU Pinning은 특정 vCPU를 물리 코어에 고정하는 방식이다.
물리 코어보다 많은 vCPU를 할당하는 오버커밋도 가능하다. 예를 들어 4 코어 서버에 10개 vCPU를 할당할 수 있으며, CPU 사용률이 낮을 때 효율적이다. Intel VT-x와 AMD-V는 게스트 OS의 특권 명령어 실행을 지원하고 VMX(Virtual Machine Extensions) 모드를 제공한다. VMCS(Virtual Machine Control Structure)는 VM 상태 정보를 저장해 컨텍스트 스위칭을 최적화한다.
메모리는 게스트 가상 주소(GVA), 게스트 물리 주소(GPA), 호스트 물리 주소(HPA)의 3단계 주소 변환을 거친다. Shadow Page Table은 GVA에서 HPA로 직접 연결하는 매핑 테이블을 하이퍼바이저가 유지하는 방식이며 오버헤드가 존재한다. EPT/NPT(Extended Page Tables/Nested Page Tables)는 하드웨어가 지원하는 2차원 페이지 테이블로, Intel EPT와 AMD NPT가 성능을 높인다.
메모리 오버커밋에는 Ballooning, Memory Deduplication, Memory Compression이 활용된다. Ballooning은 게스트 OS 내부 드라이버가 메모리를 회수해 하이퍼바이저로 반환하고 다른 VM에 재할당하게 한다. Memory Deduplication은 중복 메모리 페이지를 통합하며 KSM(Kernel Same-page Merging)은 같은 데이터를 한 번만 저장한다. Memory Compression은 사용 빈도가 낮은 메모리를 스왑 아웃 전에 압축한다.
디스크와 네트워크를 가상 자원으로 제공하기
가상 디스크는 VMDK(VMware Virtual Machine Disk), VHD/VHDX(Microsoft Virtual Hard Disk), QCOW2(QEMU Copy-On-Write), Raw Image 형식으로 만들 수 있다. Thin Provisioning은 필요한 만큼만 공간을 할당하고 디스크 이미지 크기를 동적으로 늘려 공간을 절약한다. Thick Provisioning은 전체 공간을 미리 할당해 성능 일관성을 제공한다.
호스트 메모리를 디스크 캐시로 사용하면 읽기와 쓰기 성능을 높일 수 있다. 직접 I/O(Direct I/O)는 호스트 파일 시스템을 우회해 Raw 디스크에 직접 접근하며 낮은 지연 시간을 목표로 한다.
각 VM에는 가상 NIC(vNIC)가 제공된다. vNIC는 MAC 주소를 할당받고 물리 NIC와 연결된다. 가상 스위치는 VM 사이의 통신을 처리하며 VLAN 지원과 트래픽 필터링을 제공한다.
네트워크 모드의 선택은 VM이 외부와 연결되는 방식을 결정한다.
- NAT(Network Address Translation)는 VM이 호스트 IP를 공유한다. 외부 접근이 제한되며 설정이 간단하다.
- Bridged Networking은 VM을 물리 네트워크에 직접 연결한다. VM은 독립적인 IP 주소를 사용하고 외부에서도 접근할 수 있다.
- Host-Only Networking은 VM과 호스트만 통신하도록 하며 외부 네트워크에서 격리된 테스트 환경에 맞는다.
실행 중인 VM을 옮기는 라이브 마이그레이션
라이브 마이그레이션은 실행 중인 VM을 다른 물리 서버로 이동하는 기능이다. 서비스 중단을 없애거나 다운타임을 최소화하면서 메모리 상태, CPU 상태, 네트워크 연결을 유지한다. 로드 밸런싱과 하드웨어 유지보수에 활용할 수 있다.
Pre-Copy 방식은 메모리 페이지를 반복 복사한 뒤 변경된 페이지만 다시 전송한다. 마지막 순간에 VM을 일시 중지하고 남은 내용을 전송한다. Post-Copy 방식은 CPU 상태만 먼저 보내고 즉시 재개하며, 필요한 메모리 페이지는 on-demand로 전송한다.
이동 대상에는 공유 스토리지(SAN, NAS), 고속 네트워크, 동일한 CPU 아키텍처, 하이퍼바이저 호환이 요구된다.
VM이 쓰이는 운영 환경
서버 통합에서는 여러 물리 서버를 하나로 모아 자원 활용률을 높인다. 자원 활용률은 10-15%에서 60-80%로 높일 수 있으며, 전력 및 냉각 비용과 데이터센터 공간을 절약할 수 있다. 예를 들어 10대 물리 서버를 1대 물리 서버와 10개 VM으로 통합할 수 있다.
개발과 테스트에서는 서로 다른 OS와 환경을 신속하게 구성하고, 스냅샷으로 상태를 저장하거나 복원할 수 있다. 격리된 테스트 환경을 만들고 개발 환경과 운영 환경을 일치시키는 데도 사용된다.
클라우드 컴퓨팅의 IaaS(Infrastructure as a Service)는 AWS EC2, Azure Virtual Machines, Google Compute Engine처럼 VM을 서비스 형태로 제공하고 온디맨드 자원 할당을 지원한다. 멀티테넌시(Multi-Tenancy) 환경에서는 여러 고객이 같은 물리 서버를 공유하되 VM으로 서로를 격리한다.
레거시 애플리케이션을 유지할 때도 VM이 유용하다. 오래된 OS 환경을 보존하고 새 하드웨어에서 구형 OS를 실행하며, 마이그레이션 비용을 줄일 수 있다.