Vagrant란 무엇인가?
2010년 3월에 Hashicorp의 Mitchell Hashimoto와 그의 동료 John Bender에 의해 처음 출시된 Vagrant 는 가상 머신(VM) 수명주기 관리를 위한 오픈 소스 명령 줄 도구입니다. 이 유틸리티는 이 과정을 훨씬 더 간단하게 만들어 개발 생산성을 높이려고 합니다. Vagrant은 원래 Oracle VirtualBox와 연결되어 있었지만 버전 1.1부터 VMware, KVM 등을 지원하기도 했습니다. 그러나 웹 개발에서 가상화가 도움이 되긴 하지만 Vagrant을 사용하는 것이 항상 확실한 옵션은 아닙니다.
Vagrant을 사용하는 이유는 무엇인가? 그것은 가치가 있나요?
우선, Vagrant은 유연성을 제공하는 하이퍼바이저 기반 불변의 환경을 제공합니다. 이를 통해 개발자는 다른 시스템에서만 사용 가능한 기능이 필요한 환경을 구축할 수 있습니다.
예를 들어, 다양한 OS와 커널을 지원하는 애플리케이션을 구축해야 한다면, Vagrant을 사용하여 테스트를 실행할 수 있는 여러 가상 머신을 쉽게 생성할 수 있습니다. 또한 클라이언트의 환경(OS, 리소스 등)을 복제하려는 경우 VM과 Vagrant을 결합하는 것도 특히 도움이 될 수 있습니다.
작업 스테이션에 Vagrant 설치하기
Vagrant 시작하기 위해 공식 Vagrant 다운로드 페이지에서 설치 관리자나 적합한 패키지를 다운로드하세요. 아래 지침은 2022년 12월 현재 최신 버전인 Vagrant v2.3.3에 대한 것입니다.
Windows에서 Vagrant 설치하기
설치하기 위해서 Vagrant Windows에서 MSI 패키지를 먼저 다운로드해야 합니다. 다음으로, 파일을 실행하고 일반적인 설치 과정을 진행하면 됩니다.
참고: 설치 관리자는 ‘vagrant’를 시스템 경로에 자동으로 추가하므로 터미널에서도 사용할 수 있습니다. 그러나 Vagrant가 찾아지지 않는 경우, 시스템에서 로그아웃한 후 다시 로그인하는 것을 시도하세요. 이는 Windows에서 흔한 현상입니다.
MacOS Catalina에서 Vagrant 설치하기
이미 ‘brew’ 패키지 관리자가 설치되어 있다고 가정하고, Mac에서 Vagrant를 빠르게 설정하려면 다음 한 줄 명령어로 설치를 실행할 수 있습니다:
```bash
$> brew install vagrant
```
또는, 바이너리로 Vagrant 설치할 수 있습니다.
Linux에서 Vagrant 설치하기
Linux 시스템의 경우, Ubuntu에서 Vagrant 설치 과정을 20.04 버전을 예로 보여드리겠습니다:
키 설치:
```bash
$> wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```
저장소 추가:
```bash
$> echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
```
업데이트를 가져와 설치를 실행:
```bash
$> sudo apt update && sudo apt install vagrant
```
이것으로 모든 것입니다! 이제 해야 할 일은 터미널을 열고 “vagrant”를 입력하는 것입니다. 그러나 또한 지적할 가치가 있는 것은, Vagrant를 혼자서 실행하면 사용 가능한 서브명령 목록이 표시된다는 점입니다.
Vagrant 설치시 발생할 수 있는 주요 문제
비록 Vagrant 설치 오류가 매우 드물긴 하지만, 여러 하이퍼바이저가 시스템에 설치되어 있을 경우 이러한 오류가 발생할 가능성이 상당히 증가합니다. 결국, 하이퍼바이저는 둘 이상이 이미 사용 중일 때 가상 머신을 생성하지 않으려고 합니다.
다음은 Vagrant의 공식 문서에서 발췌한 몇 가지 빠른 해결책으로, 다른 하이퍼바이저가 있을 때 Vagrant와 VirtualBox를 사용하는 데 도움이 될 수 있습니다:
리눅스에서
다른 하이퍼바이저를 사용할 때 다음과 같은 오류를 만날 수 있습니다:
```bash
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below.
Command: ["startvm", <ID of the VM>, "--type", "headless"]
Stderr: VBoxManage: error: VT-x is being used by another hypervisor (VERR_VMX_IN_VMX_ROOT_MODE).
VBoxManage: error: VirtualBox can't operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot
(VERR_VMX_IN_VMX_ROOT_MODE)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
```
VirtualBox가 제대로 작동하려면 추가적인 하이퍼바이저를 시스템의 블랙리스트에 추가해야 합니다.
이렇게 하려면 먼저 하이퍼바이저의 이름을 찾습니다:
```bash
$> lsmod | grep kvm
kvm_intel 204800 6
kvm 593920 1 kvm_intel
irqbypass 16384 1 kvm
```
다음으로, “blacklist” 명령을 사용하여 하이퍼바이저를 블랙리스트에 추가하십시오.
```bash
echo 'blacklist kvm-intel' >> /etc/modprobe.d/blacklist.conf
```
마지막으로, 시스템을 다시 시작한 후 다시 “vagrant” 명령을 사용하십시오.
윈도우에서
Windows에서 VirtualBox VM을 시작하려고 할 때, 놀라운 파란 화면에 직면할 수 있습니다.
VirtualBox를 정상적으로 사용하려면 Hyper-V를 비활성화해야 합니다. Windows 10에서 기능을 끄는 간단한 명령어는 다음과 같습니다:
```PowerShell
$> Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
```
Windows 11에서도 상승된 Powershell을 사용할 수 있습니다:
```PowerShell
$> bcdedit /set hypervisorlaunchtype off
```
또는 Windows 시스템 설정에서 Hyper-V를 비활성화할 수 있습니다.
- Windows 버튼을 우클릭하고 “앱 및 기능”을 선택합니다.
- Windows 기능 켜기 또는 끄기를 엽니다.
- Hyper-V 체크를 해제하고 마지막으로 OK를 클릭합니다.
이 변경 사항을 적용하려면 컴퓨터를 다시 부팅하세요.
MacOS
VBoxManage를 실행하려고 할 때 다음 오류 메시지가 표시되면:
failed to open /dev/vboxnetctl: No such file or directory
VirtualBox를 완전히 재설치하거나 아래 명령어를 사용하세요:
sudo /Library/StartupItems/VirtualBox/VirtualBox restart
또는
sudo /Library/StartupItems/VirtualBox/VirtualBox start
최신 버전에서는 /Library/StartupItems/VirtualBox/VirtualBox
파일이 존재하지 않으므로 다음 명령어를 사용해야 합니다.
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.pl
MacOS Catalina: 그러나 내 기기에서는 작동합니다.
Mac에서 발생할 수 있는 또 다른 문제는 응용 프로그램이 “내 기기에서는 잘 작동한다”는 고전적인 문제일 수 있으며, 아무리 간청이나 울부짖어도 다른 곳에서 같은 작업을 수행하게 할 수 없습니다. SPG에서 저희 팀도 이 문제에 직면했었습니다.
당신은 현재 Vagrant + VirtualBox를 사용하여 로컬 환경을 배포 및 테스트하고 있습니다. 팀의 한 소프트웨어 엔지니어는 지금까지 잘 작동하고 있는 맞춤형 VagrantBox를 사용하고 있습니다. 이들은 Developer 1라고 불리며, 이들 작업 환경에서는 VirtualBox v6.1.34, Vagrant 2.2, Ubuntu가 모두 문제없이 작동하고 있습니다.
반면에 Developer 2는 로컬 환경을 업그레이드해야 함이 분명합니다. 현재 이들은 자신의 작업 환경에서 MacOS, VirtualBox v6.1.24, Vagrant 2.1.x를 혼용하고 있습니다.
따라서 첫 눈에 보기에는 Developer 2의 전략이 간단해 보입니다:
- Step 1: VirtualBox와 Vagrant 버전을 업데이트하는 것(통일된 버전을 사용하는 것이 중요함)
- Step 2: 모든 추가 프로젝트 구성 요소 설치
두 작업은 모두 성공적으로 완료되었지만, 결과는 확실히 예상치 못했습니다. VirtualBox에 설치된 웹사이트가 이제 완전히 도달할 수 없게 되었습니다. 도대체 무슨 일이야!?
이러한 수수께끼에 직면했을 때, 해결책을 모색하고 아래와 같은 합리적인 조치를 취하는 것이 중요합니다:
- 로그 파일 검토
- PHP, Nginx, MySQL과 같은 모든 VirtualBox 서비스가 정상 작동하는지 확인
- curl을 사용하여 페이지에 접근
그러나 이 경우에는 모든 것이 정상적으로 작동하고 있으며, VirtualBox 인스턴스 내부에서 명백한 문제는 없어 보입니다.
팀은 이후 전략을 바꾸어 외부에서 VirtualBox 호스트에 도달할 수 있는지 확인하기로 결정합니다. 간단한 ping 명령어를 사용한 결과, 패킷이 100% 손실되는 것을 알게 되어 당황스러워합니다. 이 소식은 약간 불안하지만 이것이 모든 문제의 원인일 수도 있다.
이 단서를 따라가면서 결국 호스트 전용 어댑터가 이제 다른 범위의 IP 주소를 받아야 한다는 사실을 알게 됩니다. 이는 모든 것 중에서 VirtualBox v6.1.30 업데이트(패치 업데이트)부터 시작되었습니다:
192.168.55.х prior to the update
192.168.56.х. after the update.
최근에 수정된 VirtualBox 사용자 매뉴얼에 명백히 나타나 있습니다:
“리눅스, Mac OS X 및 솔라리스에서 Oracle VM VirtualBox는 호스트 전용 어댑터에만 192.168.56.0/21 범위의 IP 주소를 할당할 수 있습니다.”
팀 전원이 함께 안도의 한숨을 내쉽니다. 새로운 호스트 전용 어댑터를 생성하고 VirtualBox 인스턴스의 어댑터를 변경한 후 문제가 갑자기 사라집니다. 해결책의 핵심 웹 구성 요소가 마침내 접근 가능하고, 개발자 2도 마침내 기뻐합니다.
Vagrant Or…? 무엇과 대안이 있나요? 어떻게 더 나은가요?
많은 설렘 속에서 Vagrant 대안을 찾는 것은 용서할 만 합니다. 그러나 이렇게 하면 단순히 Docker와 비교하는 사이트를 많이 접하게 될 것입니다. 이것이 실제로 유효한 비교인가요? 사실, 두 기술의 차이를 아는 이상 유효한 비교라고 할 수 있습니다.
Docker가 하이퍼바이저에 비해 가지는 많은 장점은 때로 단점으로 볼 수도 있습니다. 단지 요구하는 목적에 따라 다릅니다. 큰 차이점 중 하나는 로드 시간입니다. 컨테이너는 기본적으로 프로세스 집합일 뿐이므로 빠르게 시작할 수 있지만, 이는 호스트 커널을 사용한다는 것을 의미합니다. 따라서 가상화된 하드웨어에 의존하는 대신, 컨테이너는 호스트의 하드웨어를 직접 사용합니다.
하이퍼바이저는 메모리, CPU 시간, 드라이브 공간 등과 같은 전용 리소스를 가질 수 있습니다. 반면 컨테이너는 호스트 컴퓨터의 다른 프로세스와 리소스를 공유합니다. 마찬가지로, Vagrant는 더 많은 시간과 리소스를 요구하는 전체 가상 머신을 생성할 수 있지만, Docker의 컨테이너화된 접근 방식은 적은 리소스로 더 빠르게 배포할 수 있습니다.
이러한 점을 염두에 두고, 이것이 경쟁이 아니라 단순히 회사의 요구에 맞추는 것이라는 사실을 기억하세요.
결론
Vagrant는 확실히 강력한 도구이지만, 문제에 면역이 되지 않습니다. 회사가 전문 지식이나 경험이 부족하다면, 소프트웨어 개발자로 구성된 전문 팀이 도움이 될 수 있습니다. 결국 “내 기계에서만 작동한다”고 해도, 모든 문제에는 해결책이 있습니다.
Source:
https://dzone.com/articles/vagrantvirtualbox-on-macos-catalina-but-it-works-o