VM
Virtual Machine
가상 머신. 물리 서버 위 가상화. 컨테이너보다 무거움.
Virtual Machine
가상 머신. 물리 서버 위 가상화. 컨테이너보다 무거움.
VM(Virtual Machine, 가상 머신)은 물리적 하드웨어 위에서 하이퍼바이저를 통해 생성되는 완전한 컴퓨터 시스템입니다. 각 VM은 자체 운영체제, 커널, 시스템 라이브러리를 가지며, 물리 서버처럼 독립적으로 동작합니다.
하이퍼바이저는 Type 1(Bare-metal: VMware ESXi, Microsoft Hyper-V, KVM)과 Type 2(Hosted: VirtualBox, VMware Workstation)로 나뉩니다. 클라우드 환경에서는 Type 1이 사용되며, 하드웨어 자원을 직접 관리합니다.
VM은 완전한 하드웨어 격리를 제공하여 멀티테넌트 환경에서 강력한 보안을 보장합니다. 하지만 각 VM마다 OS를 실행하므로 컨테이너 대비 리소스 오버헤드가 크고(수 GB vs 수십 MB), 부팅 시간도 깁니다(수 분 vs 수 초).
클라우드 서비스에서는 EC2(AWS), Compute Engine(GCP), Azure VM 등으로 제공됩니다. 레거시 애플리케이션, 라이선스 제약, 완전한 OS 제어가 필요한 경우에 적합합니다.
# Terraform: AWS EC2 인스턴스 생성
resource "aws_instance" "web_server" {
ami = "ami-0c55b159cbfafe1f0" # Amazon Linux 2
instance_type = "t3.medium"
vpc_security_group_ids = [aws_security_group.web.id]
subnet_id = aws_subnet.public.id
root_block_device {
volume_size = 50
volume_type = "gp3"
encrypted = true
}
user_data = <<-EOF
#!/bin/bash
yum update -y
yum install -y docker
systemctl start docker
systemctl enable docker
EOF
tags = {
Name = "web-server"
Environment = "production"
}
}
# Auto Scaling Group
resource "aws_autoscaling_group" "web" {
name = "web-asg"
vpc_zone_identifier = aws_subnet.private[*].id
target_group_arns = [aws_lb_target_group.web.arn]
min_size = 2
max_size = 10
desired_capacity = 3
launch_template {
id = aws_launch_template.web.id
version = "$Latest"
}
health_check_type = "ELB"
health_check_grace_period = 300
}
---
# GCP: gcloud CLI로 VM 생성
gcloud compute instances create my-vm \
--machine-type=e2-medium \
--zone=asia-northeast3-a \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--boot-disk-size=50GB \
--boot-disk-type=pd-ssd \
--tags=http-server,https-server
인프라: "레거시 애플리케이션은 VM으로 유지하고, 새 마이크로서비스는 컨테이너로 가겠습니다."
개발: "VM이랑 컨테이너 같이 쓰면 관리가 복잡하지 않나요?"
인프라: "Kubernetes 노드도 결국 VM 위에서 돌아요. 레거시는 점진적으로 컨테이너화하면 됩니다."
면접관: "VM과 컨테이너의 차이를 설명해주세요."
지원자: "VM은 하이퍼바이저 위에서 각각 독립된 OS를 실행하여 완전한 격리를 제공합니다. 컨테이너는 호스트 OS 커널을 공유하고 프로세스 수준 격리를 제공합니다. VM은 보안이 중요한 멀티테넌트에, 컨테이너는 빠른 배포와 효율이 중요한 마이크로서비스에 적합합니다."
이 주제로 모의면접 보기 → WIA SOOM AI 면접 · 무료로 시작
리뷰어: "EC2 인스턴스 타입을 t3.micro로 설정했는데, 프로덕션에서는 부족할 수 있어요."
작성자: "일단 t3.medium으로 올리고, CPU 크레딧 무제한 모드도 활성화하겠습니다."
원인: S3 운영 중 실수로 의도보다 많은 서버가 제거됨, EC2 인스턴스 API 영향
영향: Slack, Trello, Quora 등 수천 개 서비스 4시간 다운, EC2 콘솔 접근 불가
해결: S3 서브시스템 전체 재시작, 순차적 복구
교훈: 단일 AZ/리전 의존 금지, Multi-AZ 또는 Multi-Region 아키텍처 필수
원인: EC2 인스턴스 종료 시 "Delete on Termination" 활성화, 중요 데이터가 담긴 EBS도 함께 삭제
영향: 3개월 치 업로드된 사용자 파일 영구 손실
해결: 백업에서 일부 복구, 나머지는 손실 인정
교훈: EBS 볼륨 종료 보호 설정, 정기적 스냅샷 자동화, S3 별도 백업
Q1. VM과 컨테이너의 핵심 차이점은?
Q2. Type 1 하이퍼바이저의 특징은?
Q3. Spot/Preemptible 인스턴스 사용 시 주의점은?
이 페이지에 오류가 있거나 추가하고 싶은 내용이 있다면 알려주세요!