2026-04-07

Vagrant — Synced Folder로 호스트와 VM 파일 공유하기

Synced Folder란?

호스트(내 PC)의 디렉토리와 VM 내부의 디렉토리를 양방향으로 동기화하는 기능이다. 한쪽에서 파일을 만들면 다른 쪽에도 즉시 반영된다.


기본 동기화

vagrant up을 하면 Vagrantfile이 있는 디렉토리가 VM의 /vagrant에 자동으로 동기화된다.

호스트: ~/myvms/          ←→  VM: /vagrant/
├── Vagrantfile
└── README.md

별도 설정 없이도 동작하는 기본 동기화다.


커스텀 Synced Folder

Vagrantfile에 config.vm.synced_folder를 추가하면 원하는 경로끼리 연결할 수 있다.

Vagrant.configure("2") do |config| config.vm.box = "bento/ubuntu-22.04" # 호스트의 ./scripts → VM의 /opt/scripts config.vm.synced_folder "./scripts", "/opt/scripts" config.vm.network "private_network", ip: "192.168.31.10" config.vm.network "public_network", bridge: "en0: Ethernet" config.vm.provider "vmware_desktop" do |wm| wm.gui = true wm.memory = 1024 wm.cpus = 2 end end

실습으로 확인

# 1. vagrant up 후 SSH 접속 vagrant ssh # 2. root 계정으로 전환 sudo -i # 3. VM에서 파일 생성 cd /opt/scripts touch file{1..10}.sh # 4. 호스트 PC의 ./scripts/ 디렉토리를 확인하면 파일이 생성되어 있음

호스트에서 파일을 만들어도 VM에 반영되고, VM에서 만들어도 호스트에 반영된다. 양방향 동기화다.


.vagrant 디렉토리

vagrant up을 실행하면 프로젝트 폴더에 .vagrant/ 디렉토리가 자동 생성된다.

my-project/
├── Vagrantfile
├── .vagrant/          ← VM ID, SSH 키 등 내부 관리 정보
│   └── machines/
│       └── default/
└── scripts/           ← synced_folder로 동기화되는 디렉토리

Vagrant가 VM 상태를 추적하기 위해 사용하는 내부 폴더로, 직접 수정할 일은 없다. .gitignore에 추가해야 한다.


활용 패턴

코드 편집은 호스트에서, 실행은 VM에서

가장 흔한 패턴이다. 호스트의 VS Code로 편집하면 VM에 즉시 반영되므로, VM에 에디터를 설치할 필요가 없다.

프로비저닝 스크립트 관리

호스트에서 설정 스크립트를 작성/관리하고, VM에서 바로 실행할 수 있다. Vagrant의 다음 토픽인 Provisioning과 직접 연결되는 패턴이다.


Docker Volume과의 연결

이 개념은 Docker에서 그대로 이어진다.

# Docker Compose volumes: - ./src:/app/src

문법만 다를 뿐 "호스트와 게스트 사이의 파일 공유"라는 개념은 동일하다.