개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

Container vs VM — 가상화 방식의 차이

2025년 6월 16일
DockerContainerVM가상화Hypervisor

서버 한 대에서 여러 애플리케이션을 안전하게 격리해 실행하고 싶을 때 VM과 Container 중 무엇을 선택할지 고민하게 된다. 두 기술 모두 "격리된 실행 환경"을 제공하지만, 그 방식이 근본적으로 다르기 때문에 성능과 운영 특성도 크게 갈린다. 차이를 정확히 이해하면 상황에 맞는 선택을 할 수 있다.

Hypervisor 기반 VM

VM(Virtual Machine)은 Hypervisor가 물리 하드웨어 위에서 가상 하드웨어를 에뮬레이션한다. 각 VM은 독립적인 OS 커널을 포함하므로, 호스트와 완전히 다른 운영체제를 실행할 수 있다.

┌────────────────────────────────────┐
│          Physical Hardware         │
├────────────────────────────────────┤
│             Hypervisor             │
│     (Type-1: KVM, VMware ESXi)     │
├──────────────┬─────────────────────┤
│     VM 1     │        VM 2         │
│  ┌────────┐  │  ┌────────────────┐ │
│  │  OS    │  │  │      OS        │ │
│  ├────────┤  │  ├────────────────┤ │
│  │  App   │  │  │      App       │ │
│  └────────┘  │  └────────────────┘ │
└──────────────┴─────────────────────┘

Hypervisor — 물리 하드웨어를 추상화해 여러 가상 머신이 공유할 수 있게 해주는 소프트웨어 계층. Type-1(Bare-metal)은 하드웨어 위에 직접 설치되고, Type-2(Hosted)는 범용 OS 위에서 동작한다.

각 VM이 전체 OS를 포함하기 때문에 이미지 크기가 수 GB에 달하고, 부팅에 수십 초에서 수 분이 걸린다. 그러나 커널 수준의 완전한 격리를 제공하므로 보안 요구가 엄격하거나 서로 다른 OS가 필요한 환경에 적합하다.

Container 기반 격리

Container는 호스트 OS의 커널을 공유하면서 Namespace와 cgroup을 이용해 프로세스를 격리한다. OS 전체를 포함하지 않아 이미지가 수십 MB 수준이고 시작 시간이 밀리초 단위다.

┌────────────────────────────────────┐
│          Physical Hardware         │
├────────────────────────────────────┤
│             Host OS Kernel         │
├──────────────┬─────────────────────┤
│ Container 1  │    Container 2      │
│  ┌────────┐  │  ┌────────────────┐ │
│  │  Libs  │  │  │     Libs       │ │
│  ├────────┤  │  ├────────────────┤ │
│  │  App   │  │  │      App       │ │
│  └────────┘  │  └────────────────┘ │
└──────────────┴─────────────────────┘

Namespace — Linux 커널이 제공하는 격리 메커니즘으로 PID, 네트워크, 파일시스템 등을 프로세스별로 분리한다. cgroup — CPU, 메모리 등 자원 사용량을 프로세스 그룹 단위로 제한하는 커널 기능.

Docker가 대표적인 Container 런타임이며, Dockerfile로 이미지를 정의한다.

# 컨테이너 실행 예시
docker run -d -p 8080:80 --name my-app nginx:alpine
docker stats my-app   # CPU/메모리 실시간 확인

핵심 차이 비교

항목VMContainer
격리 수준커널 완전 분리커널 공유, 프로세스 격리
시작 시간수십 초 ~ 수 분밀리초 ~ 수 초
이미지 크기수 GB수십 MB
자원 오버헤드높음 (OS 포함)낮음
OS 다양성호스트와 무관호스트 커널 의존
보안 격리강함상대적으로 약함

언제 VM vs Container를 선택할까

VM이 유리한 경우:

  • 호스트와 다른 OS가 필요할 때 (예: Linux 서버에서 Windows 앱 실행)
  • 커널 취약점까지 격리해야 하는 멀티테넌트 환경
  • 레거시 애플리케이션이 특정 OS 버전에 강하게 결합된 경우

Container가 유리한 경우:

  • 마이크로서비스처럼 인스턴스를 빠르게 스케일 아웃해야 할 때
  • CI/CD 파이프라인에서 빌드·테스트 환경을 일관되게 유지할 때
  • 자원 효율이 중요한 고밀도 배포 환경

두 기술은 경쟁 관계가 아니다. 실제 운영 환경에서는 VM 위에 Container 오케스트레이터(Kubernetes)를 올리는 방식으로 격리 수준과 배포 유연성을 동시에 확보하는 경우가 많다.

← 이전 글Docker란? — 컨테이너로 애플리케이션을 격리하는 기술
다음 글 →Docker Image — 컨테이너를 만드는 읽기 전용 템플릿