2026-04-12

Vagrant — Multi VM 환경 구성하기

왜 Multi VM이 필요한가?

실제 서비스는 웹 서버, DB 서버 등 여러 서버로 구성된다. 하나의 Vagrantfile에서 여러 VM을 정의하면 이런 멀티 서버 환경을 로컬에서 재현할 수 있다.

Vagrantfile을 여러 개 만들어도 되지만, 하나의 파일로 관리하면 VM 간 같은 네트워크 대역을 쉽게 공유할 수 있고 vagrant up 한 번으로 전체 환경을 올릴 수 있다.

참고: Vagrant 공식 Multi-Machine 문서


Vagrantfile 설정

config.vm.define으로 각 VM을 정의한다.

Vagrant.configure("2") do |config| config.vm.define "web01" do |web01| web01.vm.box = "bento/ubuntu-22.04" web01.vm.hostname = "web01" web01.vm.network "private_network", ip: "192.168.31.10" end config.vm.define "web02" do |web02| web02.vm.box = "bento/ubuntu-22.04" web02.vm.hostname = "web02" web02.vm.network "private_network", ip: "192.168.31.11" end config.vm.define "db01" do |db01| db01.vm.box = "bandit145/centos_stream9_arm" db01.vm.hostname = "db01" db01.vm.network "private_network", ip: "192.168.31.12" db01.vm.provision "shell", inline: <<-SHELL yum install -y wget unzip mariadb-server -y systemctl start mariadb systemctl enable mariadb SHELL end end

각 VM마다 다른 box를 사용할 수 있고, 개별적으로 provisioning을 설정할 수 있다.


VM 개별 제어

VM 이름을 함께 입력하면 특정 VM만 제어할 수 있다.

vagrant up web01 # web01만 생성/실행 vagrant ssh web01 # web01에 접속 vagrant halt web01 # web01만 중지 vagrant destroy web01 # web01만 삭제

이름 없이 실행하면 전체 VM에 적용된다.