워크로드 격리하는 두 가지 방식
VM 이랑 container 는 같은 문제를 풀어: 한 머신에서 여러 워크로드를 서로 안 부딪히게 돌리기. 접근법이 근본적으로 달라.
Virtual Machine — 인스턴스마다 OS 통째로
Hypervisor (VMware ESXi, KVM, VirtualBox, Hyper-V) 가 하드웨어랑 guest VM 사이에 앉아. 각 VM 은 OS 통째로 — 자체 kernel, init, userland. 격리는 하드웨어 수준. VM 끼리 메모리/syscall 못 봐.
Container — kernel 공유, namespace 로 격리
Container 는 호스트 kernel 을 공유해. 격리는 Linux namespace (PID, network, mount, hostname, IPC, user ID 따로 보기) + cgroup (CPU/메모리/IO 한도) 로 만들어. Guest OS 없어. Hypervisor 없어. 그냥 process 묶음이 혼자 머신에 있다고 착각하는 거야.
트레이드오프 표
| 측면 | VM | Container |
|---|---|---|
| 부팅 | 분 단위 | 밀리초 |
| 이미지 크기 | GB (OS 통째) | MB (앱 + 라이브러리만) |
| 밀도 | 호스트당 ~10 | 호스트당 100s |
| 격리 | 강함 (kernel 따로) | process 수준 (kernel 공유) |
| 오버헤드 | 무거움 | 거의 없음 |
| OS 자유도 | 아무 OS | Linux 호스트엔 Linux |
웹 서비스, DB, 배치 작업 같은 대부분의 앱 워크로드는 container 격리로 충분해. 다른 kernel 필요하거나, 멀티 테넌트 강격리가 필요하거나, Linux 호스트에 Windows guest 가 필요할 때 VM 써.