
가상화와 컨테이너화의 주요 차이점은 무엇이며, 각 기술은 어떤 용도로 사용됩니까?
가상화(VM). 가상 머신은 물리적 하드웨어를 추상화한 것으로, 하나의 서버를 여러 서버로 전환합니다. 하이퍼바이저는 호스트와 VM 사이에 위치하여 CPU, 메모리, 스토리지를 풀링합니다. 각 VM에는 게스트 OS의 전체 복사본과 애플리케이션 및 모든 라이브러리가 포함되어 있습니다. 하이퍼바이저(VMM)는 격리를 시행하며 해당 경계는 CPU 가상화 확장(Intel VT-x / AMD-V)의 하드웨어 지원을 받습니다.
하이퍼바이저에는 두 가지 유형이 있습니다.
- 유형 1(베어메탈): 하드웨어에서 직접 실행됩니다. 깨끗한 예로는 VMware ESXi/vSphere, Microsoft Hyper-V 및 Xen이 있습니다. KVM은 하이브리드 사례입니다. 즉, 호스트가 여전히 일반 프로세스를 실행하는 동안 커널을 유형 1 하이퍼바이저로 전환하는 Linux 커널 모듈입니다.
- 유형 2(호스팅): 기존 OS(VirtualBox, VMware Workstation)에서 애플리케이션으로 실행됩니다. 개인용 기계에 적합합니다.
컨테이너화. 컨테이너는 코드와 모든 종속성(런타임, 라이브러리, 설정)을 패키지화하고 하드웨어가 아닌 운영 체제를 가상화합니다. 컨테이너는 호스트 OS 커널을 공유하고 사용자 공간에서 격리된 프로세스로 실행됩니다. Linux에서는 기능, seccomp, MAC(SELinux/AppArmor), 사용자 네임스페이스 및 루트 없는 모드를 통해 더욱 강화된 네임스페이스(격리) 및 cgroups(리소스 계정 및 제한)를 사용합니다. 커널 공유는 OS 제품군 호환성을 의미합니다. Linux 컨테이너에는 Linux 커널이 필요하므로 Windows/macOS의 Docker Desktop은 경량 Linux VM을 조용히 실행합니다. Docker는 컨테이너를 대중화했지만 형식은 OCI에 의해 표준화되었습니다. 다른 런타임도 존재합니다(containerd, CRI-O, Podman).
주요 차이점:
- 크기: 컨테이너 이미지는 일반적으로 몇 MB에서 수백 MB에 이릅니다. VM은 GB(고정된 숫자가 아닌 크기 순서)입니다.
- 시작: 컨테이너는 초/밀리초 내에 시작됩니다. VM은 전체 OS를 부팅해야 합니다.
- 오버헤드: 컨테이너에는 앱당 별도의 OS가 필요하지 않습니다. 밀도가 높고 라이선스 비용이 낮습니다.
- 격리/보안: VM은 더욱 강력한 하드웨어 기반 격리를 제공합니다. 컨테이너는 약한 소프트웨어 기반 격리를 제공합니다(공유 커널의 컨테이너 이스케이프 위험). 중간 지점은 VM 수준 격리에 접근하는 샌드박스 런타임(gVisor, Kata Containers, Firecracker)입니다.
각각의 용도:
- VM: 하나의 서버에서 다양한 OS를 실행하고, 리소스 집약적이거나 모놀리식 워크로드를 실행하며, 강력한 격리(멀티 테넌시, 레거시 앱)를 수행합니다.
- 컨테이너: 클라우드 기반 개발, 마이크로서비스, CI/CD, 이식성 및 빠른 수평 확장(Kubernetes에서 조정).
실제로 두 가지는 상보적입니다. 컨테이너는 민첩한 제공과 강력한 격리를 결합하기 위해 VM 내부에서 실행되는 경우가 많습니다.
