๐ฃ Hook: ํธ๋ฆฌํจ๊ณผ ์ํ ์ฌ์ด์์
Claude Code๋ ๊ฐ๋ ฅํ์ง๋ง, ํ์ผ์ ์์ ํ๊ฑฐ๋ ๋ช
๋ น์ด๋ฅผ ์คํํ ๋๋ง๋ค ์ผ์ผ์ด "์น์ธ"์ ๋๋ฌ์ค์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด --dangerously-skip-permissions ์ต์
์ ์ผค ์ ์์ง๋ง, "AI๊ฐ ๋ด ํ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ ๋ ค๋ฒ๋ฆฌ๋ฉด ์ด๋กํ์ง?"๋ผ๋ ๋ถ์๊ฐ์ด ํญ์ ์กด์ฌํ์ฃ .
Docker๋ฅผ ์ฐ์๋ docker-in-docker๋ฅผ ์ํด --privileged ๋ชจ๋๋ฅผ ์ผ์ผ ํด์ ๋ณด์์ด ๋ซ๋ฆฌ๊ณ , ํด๋ผ์ฐ๋ VM์ ๋์ด ๋ญ๋๋ค. ์ฌ๊ธฐ์ Vagrant๊ฐ ์๋ฒฝํ ํด๊ฒฐ์ฑ
์ผ๋ก ๋ฑ์ฅํฉ๋๋ค. ๋ฌด๋ฃ์ด๊ณ , ๋ก์ปฌ์์ ๋๊ณ , ์๋ฒฝํ๊ฒ ๊ฒฉ๋ฆฌ๋ฉ๋๋ค.
๐ ๏ธ How-to: ์์ ํ ์๋๋ฐ์ค ๊ตฌ์ถํ๊ธฐ
์ด ๋ ์ํผ๋ ํ๋ก์ ํธ ํด๋์ Vagrantfile ํ๋๋ง ๋๋ฉด ๋๋ฉ๋๋ค.
1๋จ๊ณ: ํ์ ๋๊ตฌ ์ค์น
๋จผ์ Vagrant์ VirtualBox๋ฅผ ์ค์นํ์ธ์. (์ค๋๋ ๋๊ตฌ ๊ฐ์ง๋ง, ์ฌ์ ํ ๊ฒฉ๋ฆฌ์๋ ์ต๊ณ ์ ๋๋ค.)
2๋จ๊ณ: ํ๋ก์ ํธ ๋ฃจํธ์ Vagrantfile ์์ฑ
์๋ ์ฝ๋๋ฅผ ๋ณต์ฌํด์ ํ๋ก์ ํธ ์ต์๋จ์ Vagrantfile์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํ์ธ์.
vm_name = File.basename(Dir.getwd)
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-24.04"
# ํธ์คํธ์ ๊ฒ์คํธ ๊ฐ ํ์ผ ๊ณต์ (ํ์ฌ ํด๋๋ฅผ VM์ /agent-workspace๋ก ๋ง์ดํธ)
config.vm.synced_folder ".", "/agent-workspace", type: "virtualbox"
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
vb.cpus = 2
vb.gui = false
vb.name = vm_name
# ์ค๋์ค/USB ๊บผ์ ๋ฆฌ์์ค ์ ์ฝ
vb.customize ["modifyvm", :id, "--audio", "none"]
vb.customize ["modifyvm", :id, "--usb", "off"]
end
# ์ด๊ธฐ ์ธํ
์คํฌ๋ฆฝํธ: Docker, Node.js, Claude Code ์ค์น
config.vm.provision "shell", inline: <<-SHELL
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y docker.io nodejs npm git unzip
npm install -g @anthropic-ai/claude-code --no-audit
usermod -aG docker vagrant
chown -R vagrant:vagrant /agent-workspace
SHELL
end
3๋จ๊ณ: ์คํ ๋ฐ ์ ์
ํฐ๋ฏธ๋์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ์์ ํ ์๋๋ฐ์ค๊ฐ ์ด๋ฆฝ๋๋ค.
vagrant up # VM ์คํ (์ฒ์์ ๋ช ๋ถ ๊ฑธ๋ฆผ)
vagrant ssh # VM ์ ์
์ด์ VM ๋ด๋ถ์์ Claude Code๋ฅผ ๋ง์๊ป ํ์ด๋์ธ์.
cd /agent-workspace
claude --dangerously-skip-permissions
๐ง The Strategy: ์ Vagrant์ธ๊ฐ?
1. ์ง์ ํ ๊ฒฉ๋ฆฌ (Isolation)
Docker ์ปจํ
์ด๋๋ ํธ์คํธ์ ์ปค๋์ ๊ณต์ ํฉ๋๋ค. ๋ฐ๋ฉด Vagrant(VirtualBox)๋ ์์ ํ ๋ถ๋ฆฌ๋ OS(Guest OS)๋ฅผ ๋์๋๋ค. Claude๊ฐ VM ๋ด๋ถ์์ rm -rf /๋ฅผ ์คํํด๋, ๋น์ ์ ๋งฅ๋ถ์ ์์ ํฉ๋๋ค.
2. ํ์ผ ๋๊ธฐํ (Sync)
config.vm.synced_folder ์ค์ ๋๋ถ์ ๋ก์ปฌ์ VS Code๋ก ์ฝ๋๋ฅผ ์ง๋ฉด VM์๋ ์ฆ์ ๋ฐ์๋ฉ๋๋ค. ๊น(Git) ์์
์ ๋ก์ปฌ์์ ํ์์ฒ๋ผ ํ๊ณ , ์คํ๊ณผ ํ
์คํธ๋ง VM์ Claude์๊ฒ ๋งก๊ธฐ๋ ํ์ด๋ธ๋ฆฌ๋ ์ํฌํ๋ก์ฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
3. Docker-in-Docker ๋ฌธ์ ํด๊ฒฐ
Claude์๊ฒ Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํด๋ฌ๋ผ๊ณ ํ๋ ค๋ฉด, ์คํ ํ๊ฒฝ ์์ฒด๊ฐ Docker๋ฅผ ์ง์ํด์ผ ํฉ๋๋ค. Docker ์ปจํ
์ด๋ ์์์ Docker๋ฅผ ๋๋ฆฌ๋ ๊ฑด ์ค์ ์ด ๋ณต์กํ๊ณ ๋ณด์์ ์ํํ์ง๋ง, Vagrant VM ์์์๋ ๊ทธ๋ฅ apt install docker.io ํ๋ฉด ๋์
๋๋ค.
MAX5์ ์๊ฐ ๐ฏ
๐จโ๐ป ๋ฐ์ด๋ธ ์ฝ๋ฉ ๋ ์ํผ
"๊ฐ์ ์๋ ์์"์ ์ํ ์๋ฒฝํ ํ๊ฒฝ์ด์ผ. ์ด Vagrant ์ธํ ์ ๋ณต์ฌํด์ ์จ๋ด.
Claude์๊ฒ ์ด๋ ๊ฒ ์ง์ํด์ ํ๊ฒฝ์ ์ก์๋ณด์:
"์ด ํ๋ก์ ํธ๋ฅผ ์ํ ์์ ํ Vagrant ํ๊ฒฝ์ ๊ตฌ์ถํด์ค. Ubuntu 24.04 ๊ธฐ๋ฐ์ผ๋ก Docker์ Node.js๊ฐ ์ค์น๋์ด์ผ ํ๊ณ , ํ์ฌ ํด๋๋ฅผ /agent-workspace๋ก ๋ง์ดํธํด์ค. .gitignore์ .vagrant ํด๋ ์ถ๊ฐํ๋ ๊ฒ๋ ์์ง ๋ง."
๐ธ ์ฌ์ด๋ ํ๋ก์ ํธ ์์ด๋์ด
- "One-Click Agent Sandbox": ๊ฐ๋ฐ์๋ค์ด Claude Code๋ฅผ ์์ ํ๊ฒ ๋๋ฆด ์ ์๋ ๋ฏธ๋ฆฌ ๊ตฌ์ฑ๋ VM ์ด๋ฏธ์ง ํธ์คํ ์๋น์ค.
- "Project Environment Generator": ํ๋ก์ ํธ์
package.json์ด๋requirements.txt๋ฅผ ์ฝ์ด์, ๋ฑ ๋ง๋ ๊ฒฉ๋ฆฌ๋ ๊ฐ๋ฐ ํ๊ฒฝ(Vagrantfile)์ ์์ฑํด์ฃผ๋ ์ ์ฉ ์์ด์ ํธ ๋๊ตฌ.
์นดํ
๊ณ ๋ฆฌ: vibe_coding, ``