2026-04-07

Vagrant — IP, RAM, CPU 설정과 네트워크 이해

Vagrantfile 기본 구조

Vagrantfile은 Ruby 문법으로 작성된다. 기본 구조는 다음과 같다.

Vagrant.configure("2") do |config| config.vm.box = "bento/ubuntu-22.04" end
  • Vagrant.configure("2") — 설정 API 버전. "2"는 Vagrant 1.1 이상의 현재 표준이다.
  • do |config| — Ruby의 블록 문법으로, Vagrant 설정 객체를 config라는 이름으로 받는다.
  • config.vm.box — 어떤 OS 이미지를 사용할지 지정. Docker의 image 개념과 유사하다.

Box 선택 시 주의

모든 box가 모든 provider를 지원하는 것은 아니다. 예를 들어 ubuntu/jammy64는 VirtualBox 전용이다. VMware Fusion을 사용하는 경우 bento/ubuntu-22.04처럼 VMware를 지원하는 box를 선택해야 한다.


CPU, Memory 설정

provider 블록 안에서 설정한다.

config.vm.provider "vmware_desktop" do |wm| wm.gui = true wm.memory = 1024 wm.cpus = 2 end

free -m 명령으로 확인하면 1024MB보다 약간 적게(~961MB) 표시되는데, OS 커널이 부팅 시 일부 메모리를 예약하기 때문이다. 정상적인 동작이다.

Swap

free -m 출력에 Swap이 함께 표시된다. Swap은 디스크를 임시 메모리처럼 사용하는 공간이다.

  • RAM이 부족해지면 당장 안 쓰는 데이터를 Swap(디스크)으로 이동
  • 디스크 기반이므로 RAM보다 훨씬 느림
  • Swap 사용량이 올라가면 메모리 증설이 필요하다는 신호

네트워크 설정

Vagrant에서 VM 네트워크는 크게 Private NetworkPublic Network로 나뉜다.

Private Network

config.vm.network "private_network", ip: "192.168.31.10"
  • 호스트(내 PC)와 VM 사이, VM과 VM 사이에서만 통신
  • 외부(인터넷)에서 접근 불가
  • 개발/실습 환경에 적합

고정 IP를 지정하거나, type: "dhcp"로 자동 할당할 수 있다.

Public Network

config.vm.network "public_network", bridge: "en0: Ethernet"
  • VM이 실제 네트워크(공유기)에 직접 연결
  • 같은 네트워크의 다른 장비에서 접근 가능
  • bridge — 호스트의 물리 네트워크 인터페이스 중 어떤 것을 통해 나갈지 지정

네트워크 확인: ip addr show

VM 내부에서 ip addr show를 실행하면 각 인터페이스를 확인할 수 있다.

인터페이스역할설정 출처
lo루프백 (127.0.0.1)시스템 기본
eth0VMware NAT — 인터넷, SSH 연결용VMware 자동 생성
eth1Private NetworkVagrantfile 설정
eth2Public Network (bridge)Vagrantfile 설정

유용한 명령어

vagrant global-status

시스템 전체에서 Vagrant가 관리하는 모든 VM의 상태를 보여준다. vagrant status는 현재 디렉토리의 VM만 보여주는 것과 다르다.

vagrant global-status

--prune 옵션을 붙이면 실제로 존재하지 않는 VM의 잔여 캐시를 정리해준다.

Vagrantfile 수정 후

Vagrantfile을 수정했으면 vagrant reload로 반영해야 한다. 이미 running 상태인 VM은 vagrant up만으로는 변경사항이 적용되지 않는다.