학습 목표
하이퍼바이저 Type 1·Type 2 차이와 VM(가상 머신) 구조를 설명할 수 있다.
하드웨어 가상화와 OS 수준 가상화(컨테이너) 의 격리 방식을 비교할 수 있다.
namespace·cgroup이 Linux 컨테이너 격리에 어떻게 쓰이는지 설명할 수 있다.
VM과 컨테이너 선택 기준을 설명할 수 있다.
문제 상황
- 개발 PC는 macOS인데 프로덕션은 Linux — 환경 맞추기
- 서버 한 대에 테스트용 Windows도 필요하다
- 물리 서버를 나누기엔 비용·유휴
docker run은 초 단위인데 VM 부팅은 분 단위- 격리 수준은 같은가?
- 클라우드 EC2는 “인스턴스” — 내부는 VM인가 컨테이너인가
보호·보안에서 격리를 봤다. 이번엔 OS가 한 물리 자원을 여러 논리 환경으로 나누는 가상화다.
1. 가상화란
가상화(virtualization) — 물리 CPU·메모리·디스크·네트워크를 추상화해 여러 독립된 실행 환경을 만든다.
| 목적 | 설명 |
|---|---|
| 격리 | 한 워크로드 장애·침해가 다른 환경에 전파되지 않게 |
| 멀티플렉싱 | 한 서버에 여러 OS·앱 — utilization 향상 |
| 이식성 | VM 이미지·컨테이너 이미지로 환경 복제 |
| 유연성 | 스냅샷, 마이그레이션, 오토스케일 |
- VMM(Virtual Machine Monitor) = 하이퍼바이저 — 게스트에게 가상 하드웨어 제공
- 게스트 OS는 자신이 물리 머신인 줄 알고 부팅·드라이버 로드
- 컨테이너는 게스트 OS 없이 호스트 커널 위에서 프로세스 격리
2. 하이퍼바이저

| 유형 | 위치 | 예 | 특징 |
|---|---|---|---|
| Type 1 (bare-metal) | 하드웨어 바로 위 | KVM+Xen, VMware ESXi, Hyper-V | 데이터센터·클라우드 |
| Type 2 (hosted) | 호스트 OS 위 | VirtualBox, VMware Workstation | 데스크톱·개발 |
동작 요약
- CPU: 하드웨어 보조(Intel VT-x, AMD-V)로 특권 명령 트랩·에뮬레이션
- 메모리: shadow page table 또는 하드웨어 중첩 페이징(EPT/NPT)
- I/O: 가상 디스크·NIC — 하이퍼바이저·백엔드 드라이버가 실제 장치에 연결
- Linux KVM: 커널 모듈이 Type 1에 가깝게 동작 —
qemu가 디바이스 모델 - Nested virtualization: VM 안에서 또 VM — 클라우드·CI에서 사용
3. 가상 머신(VM)
VM마다 가상 CPU·RAM·디스크 + 게스트 OS + 앱.
물리 서버
└─ Hypervisor
├─ VM1: Guest Linux + app
├─ VM2: Guest Windows + app
└─ VM3: Guest Linux + DB
| 구성 | 역할 |
|---|---|
| 가상 하드웨어 | vCPU, vRAM, vNIC, vDisk |
| 게스트 OS | 자체 커널·스케줄러·드라이버 |
| 하이퍼콜 | 게스트가 하이퍼바이저에 특권 요청 |
- 강한 격리 — 커널까지 분리, 다른 OS 실행 가능
- 오버헤드 — 게스트 OS 메모리·부팅·컨텍스트 스위치
- 클라우드 EC2·Azure VM — 테넌트당 VM, 하이퍼바이저가 자원 분할
4. 컨테이너 (OS 수준 가상화)
컨테이너는 호스트 커널을 공유하고, 프로세스·파일·네트워크 뷰만 격리한다.

| VM | Container | |
|---|---|---|
| 격리 단위 | 가상 하드웨어 + 게스트 OS | 프로세스 + namespace |
| 커널 | 게스트마다 별도 | 호스트 커널 공유 |
| 시작 시간 | 분~초 (부팅) | 초 이하 |
| 밀도 | 상대적으로 낮음 | 높음 |
| 이식성 | OS 종류 자유 | 보통 리눅스 커널 호환 |

Linux 컨테이너 핵심.
| 기술 | 역할 |
|---|---|
| namespace | PID, mount, network, UTS, IPC, user 뷰 분리 |
| cgroup | CPU·메모리·I/O 할당·제한 |
| union filesystem | 이미지 레이어 — OverlayFS |
| 컨테이너 런타임 | runc, containerd — OCI 스펙 |
- Docker·containerd·Kubernetes — 이미지 빌드·배포·오케스트레이션 (Platform 시리즈)
- 보안: 컨테이너는 VM보다 공유 커널 — 커널 취약점·설정 오류 시 탈출 위험, seccomp·AppArmor 보완
- gVisor·Kata: 커널 격리 강화 — VM에 가까운 경계
5. 선택 가이드
| 상황 | 추천 |
|---|---|
| Windows + Linux 혼합, 강한 격리 | VM |
| 마이크로서비스 대량 배포, 빠른 기동 | 컨테이너 |
| 레거시 앱 전체 OS 포함 이전 | VM |
| CI/CD, 동일 Linux 스택 | 컨테이너 |
| 멀티 테넌트 SaaS, 규제 | VM 또는 전용 노드 + 컨테이너 |
- 하이브리드: VM 위에 Kubernetes — 테넌트별 VM, 안에 컨테이너
- 서버리스(Lambda 등): 컨테이너·microVM 기반 — 사용자는 격리 단위를 직접 안 봄
6. 정리
- 하이퍼바이저가 가상 하드웨어를 제공 — Type 1(베어메탈) vs Type 2(호스티드)
- VM = 게스트 OS 포함 하드웨어 수준 격리
- 컨테이너 = namespace·cgroup으로 OS 수준 격리, 커널 공유
- 밀도·기동 속도는 컨테이너, OS 다양성·격리는 VM
- 다음: 다중처리 심화, NUMA·실시간 OS
다음에 다룰 것
- 다중처리 심화
- NUMA, 실시간 OS, 스케줄링
해당 내용은 Operating System Concepts, 10/E (Avraham Silberschatz, Peter Baer Galvin, Greg Gagne) 의 내용을 기반으로 합니다.