Hyper-V 가상화 가이드 — VM 생성, 네트워크, 스냅샷

Hyper-V란?

Hyper-V는 Windows에 내장된 Type 1 하이퍼바이저입니다. VirtualBox나 VMware와 달리 하드웨어 위에서 직접 실행되므로 성능이 우수합니다. Windows 10/11 Pro, Enterprise, Education 에디션에서 사용할 수 있으며, WSL2와 Docker Desktop도 내부적으로 Hyper-V 기술을 사용합니다.

이 글에서는 Hyper-V 활성화, VM 생성, 가상 네트워크 구성, 체크포인트(스냅샷) 관리를 다룹니다.

Hyper-V 활성화

Hyper-V를 사용하려면 CPU 가상화(Intel VT-x 또는 AMD-V)가 BIOS에서 활성화되어 있어야 합니다.

# 가상화 지원 확인
systeminfo | Select-String "Hyper-V"
# 출력 예시:
# Hyper-V 요구 사항: VM 모니터 모드 확장: 예
#                    펌웨어에 가상화 사용: 예
#                    두 번째 수준 주소 변환: 예

# Hyper-V 활성화 (관리자 권한 필요, 재부팅 필요)
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

# 또는 DISM으로 활성화
dism /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V

# 활성화 확인
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
# 출력 예시:
# FeatureName : Microsoft-Hyper-V
# State       : Enabled

VM 생성 (PowerShell)

Hyper-V 관리자 GUI 대신 PowerShell로 VM을 생성하면 자동화가 가능합니다.

# VM 저장 경로 설정
$vmPath = "D:\HyperV\VMs"
$vhdPath = "D:\HyperV\VHDs"
New-Item -ItemType Directory -Force -Path $vmPath, $vhdPath

# VM 생성 (Ubuntu Server 예시)
$vmName = "Ubuntu-Server"

New-VM -Name $vmName `
    -MemoryStartupBytes 4GB `
    -Generation 2 `
    -NewVHDPath "$vhdPath\$vmName.vhdx" `
    -NewVHDSizeBytes 50GB `
    -Path $vmPath `
    -SwitchName "Default Switch"

# VM 설정 변경
Set-VM -Name $vmName `
    -ProcessorCount 4 `
    -DynamicMemory `
    -MemoryMinimumBytes 2GB `
    -MemoryMaximumBytes 8GB `
    -AutomaticStartAction Nothing `
    -AutomaticStopAction ShutDown

# 보안 부팅 설정 (Linux용 템플릿 사용)
Set-VMFirmware -VMName $vmName `
    -SecureBootTemplate "MicrosoftUEFICertificateAuthority"

# ISO 이미지 연결 (설치용)
Add-VMDvdDrive -VMName $vmName `
    -Path "D:\ISOs\ubuntu-24.04-live-server-amd64.iso"

# 부팅 순서 변경 (DVD 우선)
$dvd = Get-VMDvdDrive -VMName $vmName
Set-VMFirmware -VMName $vmName -FirstBootDevice $dvd

# VM 시작
Start-VM -Name $vmName

# VM 상태 확인
Get-VM -Name $vmName | Format-Table Name, State, CPUUsage, MemoryAssigned
# 출력 예시:
# Name           State   CPUUsage MemoryAssigned
# Ubuntu-Server  Running 12       4294967296

VM 기본 관리

생성된 VM의 시작, 중지, 삭제 등 기본 관리 명령입니다.

# 모든 VM 목록 확인
Get-VM | Format-Table Name, State, CPUUsage, MemoryAssigned, Uptime

# VM 시작/종료/강제 종료
Start-VM -Name "Ubuntu-Server"
Stop-VM -Name "Ubuntu-Server"           # 정상 종료 (게스트 OS에 종료 신호)
Stop-VM -Name "Ubuntu-Server" -Force    # 강제 종료 (전원 끄기)

# VM 일시 중지/재개
Suspend-VM -Name "Ubuntu-Server"
Resume-VM -Name "Ubuntu-Server"

# VM에 콘솔 연결
vmconnect.exe localhost "Ubuntu-Server"

# VM 삭제 (VHD 파일은 수동 삭제 필요)
Stop-VM -Name "Ubuntu-Server" -Force
Remove-VM -Name "Ubuntu-Server" -Force
Remove-Item "D:\HyperV\VHDs\Ubuntu-Server.vhdx"

가상 네트워크 구성

Hyper-V의 가상 스위치는 세 가지 유형이 있습니다.

유형설명인터넷 접근호스트 접근
External물리 NIC에 연결가능가능
Internal호스트-VM 간 통신불가가능
PrivateVM 간 통신만불가불가
# 기존 가상 스위치 확인
Get-VMSwitch | Format-Table Name, SwitchType, NetAdapterInterfaceDescription

# External 스위치 생성 (인터넷 + 호스트 접근)
New-VMSwitch -Name "ExternalSwitch" `
    -NetAdapterName "Ethernet" `
    -AllowManagementOS $true
# -AllowManagementOS $true: 호스트도 같은 네트워크 사용

# Internal 스위치 생성 (호스트-VM 전용 네트워크)
New-VMSwitch -Name "DevNetwork" -SwitchType Internal

# Internal 스위치에 IP 할당 (호스트 측)
$adapter = Get-NetAdapter | Where-Object { $_.Name -like "*DevNetwork*" }
New-NetIPAddress -InterfaceIndex $adapter.ifIndex `
    -IPAddress 192.168.10.1 `
    -PrefixLength 24

# NAT 설정 (Internal 스위치에서 인터넷 접근 가능하게)
New-NetNat -Name "DevNAT" `
    -InternalIPInterfaceAddressPrefix 192.168.10.0/24

# VM에 네트워크 어댑터 연결
Connect-VMNetworkAdapter -VMName "Ubuntu-Server" -SwitchName "ExternalSwitch"

# 가상 스위치 삭제
Remove-VMSwitch -Name "DevNetwork" -Force

체크포인트(스냅샷) 관리

체크포인트는 VM의 특정 시점 상태를 저장하는 기능입니다. 설정 변경 전이나 테스트 전에 체크포인트를 만들면 언제든 되돌릴 수 있습니다.

# 체크포인트 생성
Checkpoint-VM -Name "Ubuntu-Server" -SnapshotName "설치 완료 상태"

# 체크포인트 목록 확인
Get-VMCheckpoint -VMName "Ubuntu-Server" | Format-Table Name, CreationTime, ParentCheckpointName
# 출력 예시:
# Name            CreationTime          ParentCheckpointName
# 설치 완료 상태  2026-03-09 10:30:00

# 추가 체크포인트 생성
Checkpoint-VM -Name "Ubuntu-Server" -SnapshotName "Docker 설치 후"

# 체크포인트로 복원
Restore-VMCheckpoint -VMName "Ubuntu-Server" -Name "설치 완료 상태" -Confirm:$false
# VM이 해당 시점으로 되돌아감

# 체크포인트 삭제 (디스크 공간 회수)
Remove-VMCheckpoint -VMName "Ubuntu-Server" -Name "Docker 설치 후"

# 모든 체크포인트 삭제
Get-VMCheckpoint -VMName "Ubuntu-Server" | Remove-VMCheckpoint

체크포인트 유형 설정

Hyper-V는 두 가지 체크포인트 유형을 지원합니다.

# Standard 체크포인트: VM 상태 + 메모리 포함 (빠르지만 용량 큼)
Set-VM -Name "Ubuntu-Server" -CheckpointType Standard

# Production 체크포인트: 게스트 OS의 백업 기술 사용 (안정적, 운영 환경 권장)
Set-VM -Name "Ubuntu-Server" -CheckpointType Production

# 자동 체크포인트 비활성화 (VM 시작 시 자동 생성 방지)
Set-VM -Name "Ubuntu-Server" -AutomaticCheckpointsEnabled $false

VM 복제 및 내보내기

VM을 다른 호스트로 이동하거나 백업할 때 사용합니다.

# VM 내보내기 (전체 백업)
Export-VM -Name "Ubuntu-Server" -Path "D:\Backup\HyperV"
# VM 설정, VHD, 체크포인트가 모두 포함됨

# VM 가져오기
$importPath = "D:\Backup\HyperV\Ubuntu-Server"
$report = Compare-VM -Path "$importPath\Virtual Machines\*.vmcx"
Import-VM -CompatibilityReport $report

# VHD 복사로 빠른 VM 복제
Copy-Item "D:\HyperV\VHDs\Ubuntu-Server.vhdx" `
    -Destination "D:\HyperV\VHDs\Ubuntu-Server-Clone.vhdx"

New-VM -Name "Ubuntu-Clone" `
    -MemoryStartupBytes 4GB `
    -Generation 2 `
    -VHDPath "D:\HyperV\VHDs\Ubuntu-Server-Clone.vhdx" `
    -SwitchName "Default Switch"

실전 팁

  • Generation 2 사용: Linux/Windows 최신 버전은 Generation 2 VM을 사용해야 UEFI 부팅, 보안 부팅, VHDX 지원이 가능
  • 동적 메모리: 여러 VM을 동시에 실행할 때 동적 메모리를 사용하면 리소스를 효율적으로 분배
  • 체크포인트 정리: 체크포인트는 디스크 공간을 많이 차지하므로 불필요한 것은 정기적으로 삭제
  • Default Switch: 가장 간단한 네트워크 설정. NAT를 통해 인터넷 접근이 가능하고 별도 설정이 불필요
  • Enhanced Session: Linux VM에서 클립보드 공유, 해상도 조정을 위해 Enhanced Session 모드를 활성화
  • 자동 시작: 서버용 VM은 Set-VM -AutomaticStartAction Start로 Windows 부팅 시 자동 시작 설정
  • WSL2와 공존: Hyper-V가 활성화되면 VirtualBox 등 다른 하이퍼바이저와 충돌할 수 있으므로 주의

이 글이 도움이 되었나요?