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 간 통신 | 불가 | 가능 |
| Private | VM 간 통신만 | 불가 | 불가 |
# 기존 가상 스위치 확인
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 등 다른 하이퍼바이저와 충돌할 수 있으므로 주의