가상 머신(Virtual Machine) 정리
1. 가상 머신(Virtual Machine)이란?
가상 머신(VM) 은 물리적 컴퓨터(하드웨어) 위에 소프트웨어로 구현된 논리적 컴퓨터를 의미한다. 쉽게 말해, “컴퓨터 안에 있는 또 다른 컴퓨터”이다.
사용자 입장에서는 실제 물리 컴퓨터ㄹ와 똑같이 작동하며, 독자적인 CPU, 메모리, 스토리지, 네트워크 인터페이스를 가진 것처럼 보인다.
핵심 개념
- 분할(Partitioning): 하나의 물리적 서버에서 여러 운영체제(OS)를 동시에 실행.
- 격리(Isolation): 한 VM의 장애나 보안 문제가 다른 VM이나 물리 서버에 영향을 주지 않음.
- 캡슐화(Encapsulation): 전체 시스템(OS, 앱, 데이터)을 파일 형태로 저장하고 이동 가능.
2. 핵심 기술: 하이퍼바이저(Hypervisor)
VM을 이해하기 위해 가장 중요한 개념은 하이퍼바이저(Hypervisor) 이다. 또는 VMM(Virtual Machine Monitor) 이라고도 부른다.
하이퍼바이저는 물리적 하드웨어와 가상 머신 사이의 중간 계층으로, 하드웨어 자원을 가상 머신에 분배하고 관리하는 역할을 한다. 하이퍼바이저는 설치 위치와 방식에 따라 크게 두 가지 유형으로 나뉜다.
Type 1: 베어메탈(Bare-Metal) / 네이티브(Native)
호스트 OS 없이 물리적 하드웨어 위에 직접 설치되는 방식이다.
- 특징: 하드웨어를 직접 제어하므로 오버헤드가 적고 성능이 뛰어나다. 주로 엔터프라이즈 데이터 센터나 클라우드 환경에서 사용된다.
- 예시: VMware ESXi, Microsoft Hyper-V, Xen, KVM(Kernel-based Virtual Machine - 리눅스 커널에 포함되므로 Type 1에 가깝게 동작)
Type 2: 호스티드(Hosted)
우리가 흔히 사용하는 방식이다. 호스트 OS(Windows, macOS 등) 위에 애플리케이션처럼 설치된다.
- 특징: 설치와 사용이 간편하지만, 호스트 OS를 거쳐야 하므로 Type 1에 비해 성능 오버헤드가 크다.
- 예시: Oracle VirtualBox, VMware Workstation, Parallels Desktop.
3. 하드웨어 가상화 지원 (Intel VT-x / AMD-V)
과거의 가상화는 소프트웨어적으로 하드웨어를 흉내 내는 방식이라 매우 느렸습니다. 하지만 최신 CPU는 하드웨어 지원 가상화(Hardware-Assisted Virtualization) 기술을 제공한다.
- Intel: VT-x (Virtualization Technology)
- AMD: AMD-V
이 기술들은 CPU가 가상화 명령어를 직접 처리할 수 있게 하여, 하이퍼바이저의 부하를 줄이고 VM의 성능을 비약적으로 향상시킨다. (BIOS/UEFI에서 이 옵션을 켜야 VM이 제대로 동작한다.)
4. VM vs. 컨테이너 (Docker)
| 구분 | 가상 머신 (Virtual Machine) | 컨테이너 (Container) |
|---|---|---|
| 가상화 수준 | 하드웨어 레벨 가상화 | OS 레벨 가상화 |
| 격리 수준 | 강력한 격리 (완전한 OS 포함) | 프로세스 수준 격리 (커널 공유) |
| Guest OS | 포함 (무거움) | 미포함 (가벼움) |
| 부팅 속도 | 느림 (OS 부팅 필요, 수 분) | 매우 빠름 (프로세스 실행, 수 초) |
| 용량 | 큼 (수 GB ~ 수십 GB) | 작음 (수 MB ~ 수백 MB) |
| 주요 도구 | VMware, VirtualBox, AWS EC2 | Docker, Kubernetes, Podman |
왜 컨테이너가 떴을까?
VM은 Guest OS를 각각 포함해야 하므로 중복되는 자원 낭비가 심하다. 반면 컨테이너는 호스트 OS의 커널(Kernel)을 공유하고, 애플리케이션 실행에 필요한 라이브러리와 바이너리(Bin/Libs)만 패키징한다. 따라서 MSA(Microservices Architecture) 환경에서 배포와 확장에 훨씬 유리하다.
하지만 보안이 중요하거나(완벽한 격리), 커널이 다른 OS(예: 윈도우 위에서 리눅스 커널 모듈 개발)를 사용해야 한다면 여전히 VM이 필요하다.