맥북을 바꿔도 10분 만에 내 환경 그대로 — dotfiles 완전 정복
Tools

맥북을 바꿔도 10분 만에 내 환경 그대로 — dotfiles 완전 정복

· 8분 읽기

새 맥북을 받거나 OS를 포맷하고 나서 환경 세팅에 반나절을 쓴 적이 있다면, 이 글이 도움이 될 겁니다.

핵심 아이디어는 간단합니다. 홈 디렉터리에 흩어진 설정 파일들을 Git 리포지터리 하나로 관리하고, 새 맥에서는 그걸 클론해서 자동으로 연결하는 것입니다. 한 번만 제대로 세팅해두면 이후엔 맥북이 몇 대든, 포맷을 몇 번 하든 같은 환경을 10분 안에 복원할 수 있습니다.


이 글에서 다루는 내용

  • dotfiles가 무엇이고 왜 관리해야 하는지
  • GNU Stow로 symlink를 깔끔하게 관리하는 방법
  • Homebrew Brewfile로 앱과 툴을 통째로 백업/복원하는 방법
  • 새 맥북에서 한 번에 환경을 구축하는 bootstrap.sh 작성
  • 민감한 정보를 안전하게 분리하는 방법

dotfiles란?

macOS(그리고 Linux)에서 .zshrc, .gitconfig, .vimrc처럼 이름이 .으로 시작하는 파일들을 dotfiles라고 부릅니다. 이 파일들에는 여러분의 터미널 테마, 단축키, Git 별칭, 에디터 설정 등 수년간 쌓인 개인 설정이 담겨 있습니다.

문제는 이 파일들이 ~ (홈 디렉터리) 여기저기에 흩어져 있어서, 새 맥을 세팅할 때마다 기억에 의존해 하나씩 다시 만들어야 한다는 겁니다.


전체 흐름

flowchart TD
    A[현재 맥북] -->|git push| B[(GitHub dotfiles repo)]
    B -->|git pull| C[다른 맥북]
    B -->|git clone + bootstrap.sh| D[새 맥북 / 포맷 후]

    subgraph repo ["~/.dotfiles (로컬)"]
        E[설정 파일들]
        F[Brewfile]
        G[bootstrap.sh]
    end

    A --- repo
    C --- repo

Step 1. ~/.dotfiles 디렉터리 만들기

먼저 모든 설정을 모아둘 디렉터리를 만들고, Git 리포지터리로 초기화합니다.

mkdir -p ~/.dotfiles
cd ~/.dotfiles
git init
git remote add origin https://github.com/yourusername/dotfiles.git

GitHub에서 dotfiles라는 이름으로 비공개(private) 리포지터리를 먼저 만들어두세요. 설정 파일에는 개인 정보가 담길 수 있으므로 공개 리포는 신중하게 결정하세요.


Step 2. 설정 파일을 dotfiles로 이동하기

홈 디렉터리에 있는 설정 파일들을 ~/.dotfiles 안으로 옮깁니다. 디렉터리 구조는 홈 디렉터리를 기준으로 맞춥니다.

# 예시: zsh 설정
mkdir -p ~/.dotfiles/zsh
mv ~/.zshrc ~/.dotfiles/zsh/.zshrc

# git 설정
mkdir -p ~/.dotfiles/git
mv ~/.gitconfig ~/.dotfiles/git/.gitconfig

결과적으로 이런 구조가 됩니다.

~/.dotfiles/
├── zsh/
│   ├── .zshrc
│   └── .zprofile
├── git/
│   ├── .gitconfig
│   └── .gitignore_global
├── vim/
│   └── .vimrc
├── ssh/
│   └── .ssh/
│       └── config          ← 키 파일은 절대 여기 넣지 말 것
├── Brewfile
└── bootstrap.sh

Step 3. GNU Stow로 symlink 자동 관리

파일을 옮겼으니, 원래 위치(~/)에 심볼릭 링크를 만들어줘야 각 프로그램이 설정을 인식할 수 있습니다. GNU Stow가 이 작업을 패키지 단위로 자동화해줍니다.

brew install stow

~/.dotfiles 안에서 패키지 이름(디렉터리명)을 지정해 실행하면, 해당 디렉터리 안의 파일들을 홈 디렉터리에 symlink로 연결합니다.

cd ~/.dotfiles
stow zsh   # ~/.zshrc → ~/.dotfiles/zsh/.zshrc
stow git   # ~/.gitconfig → ~/.dotfiles/git/.gitconfig
stow vim   # ~/.vimrc → ~/.dotfiles/vim/.vimrc

여러 패키지를 한 번에 연결할 수도 있습니다.

stow zsh git vim

이제부터 ~/.zshrc를 수정하는 것은 ~/.dotfiles/zsh/.zshrc를 수정하는 것과 같습니다. 수정 후 git push만 하면 됩니다.


Step 4. Brewfile로 앱·툴 목록 관리

Homebrew의 bundle 기능을 사용하면 현재 설치된 모든 CLI 툴, GUI 앱(Cask), Mac App Store 앱을 Brewfile이라는 파일 하나에 담을 수 있습니다.

현재 환경 스냅샷 만들기

brew bundle dump --file=~/.dotfiles/Brewfile --force

Brewfile은 이런 모습입니다.

tap "homebrew/bundle"

brew "git"
brew "zsh"
brew "stow"
brew "fzf"
brew "ripgrep"
brew "starship"

cask "iterm2"
cask "visual-studio-code"
cask "docker"
cask "raycast"

mas "Xcode", id: 497799835

다른 맥에서 복원하기

brew bundle install --file=~/.dotfiles/Brewfile

이 한 줄이 Brewfile에 적힌 모든 것을 설치합니다.


Step 5. bootstrap.sh — 새 맥북 원클릭 세팅

지금까지 만든 것들을 하나의 스크립트로 묶습니다. 새 맥북이나 포맷 후에는 이 스크립트 하나만 실행하면 됩니다.

#!/bin/bash
set -e

echo "🚀 개발 환경 세팅 시작..."

# 1. Homebrew 설치 (이미 설치된 경우 스킵)
if ! command -v brew &>/dev/null; then
  echo "📦 Homebrew 설치 중..."
  /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi

# Apple Silicon: Homebrew PATH 설정
eval "$(/opt/homebrew/bin/brew shellenv)"

# 2. dotfiles 클론
echo "📂 dotfiles 클론 중..."
if [ ! -d "$HOME/.dotfiles" ]; then
  git clone https://github.com/yourusername/dotfiles.git ~/.dotfiles
fi

cd ~/.dotfiles

# 3. Brewfile로 앱·툴 설치
echo "🍺 Homebrew 패키지 설치 중..."
brew bundle install

# 4. GNU Stow 설치 확인 후 심링크 연결
echo "🔗 설정 파일 심링크 연결 중..."
brew install stow
stow zsh git vim ssh

echo "✅ 완료! 터미널을 재시작해주세요."

실행 방법

새 맥에서는 터미널을 열고 아래 명령 하나만 입력하면 됩니다.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/yourusername/dotfiles/main/bootstrap.sh)"

Step 6. Apple Silicon 환경에서 알아둘 것

M1, M2, M3, M4 등 Apple Silicon 맥은 모두 Homebrew 경로가 동일합니다.

# ~/.zshrc 또는 ~/.zprofile
# Apple Silicon (M1/M2/M3/M4 공통)
eval "$(/opt/homebrew/bin/brew shellenv)"

Intel Mac(/usr/local/bin/brew)과 함께 쓸 일이 있다면 uname -m으로 분기할 수 있지만, Apple Silicon만 쓴다면 위의 한 줄이 가장 깔끔합니다.


Step 7. 민감한 정보 분리하기

API 키, SSH 비밀 키, 회사 계정 정보 같은 민감한 데이터는 절대 dotfiles 리포지터리에 넣으면 안 됩니다.

권장 패턴: .zshrc.local 분리

# ~/.dotfiles/zsh/.zshrc 맨 아래에 추가
# 민감한 설정은 별도 파일에서 불러옴 (Git에 포함되지 않음)
[ -f ~/.zshrc.local ] && source ~/.zshrc.local

~/.zshrc.local은 각 맥에서 직접 만들고, .gitignore에 추가합니다.

# ~/.dotfiles/.gitignore
.zshrc.local
.env
*.pem
*.key

SSH 키 관리

SSH 키 파일 자체는 Git에 넣지 말고, ~/.ssh/config만 관리하세요.

# ~/.dotfiles/ssh/.ssh/config
Host github.com
  IdentityFile ~/.ssh/id_ed25519
  AddKeysToAgent yes
  UseKeychain yes

실제 키 파일은 Time Machine 백업이나 1Password 같은 별도 수단으로 관리합니다.


일상적인 워크플로우

dotfiles를 세팅한 후의 일상은 이렇게 됩니다.

flowchart LR
    A[설정 파일 수정] --> B[git add & commit]
    B --> C[git push]
    C --> D[다른 맥에서 git pull]
    D --> E[즉시 반영 완료]

두 맥 사이의 설정 동기화는 git pull 한 번으로 끝납니다. 새 툴을 설치했다면:

# 새 툴 설치 후 Brewfile 업데이트
brew bundle dump --file=~/.dotfiles/Brewfile --force
cd ~/.dotfiles && git add Brewfile && git commit -m "add: [툴 이름]" && git push

추천 추가 도구

도구 용도 비고
starship 빠르고 예쁜 쉘 프롬프트 Rust 기반, 설정도 dotfiles로 관리
mackup VS Code, iTerm2 등 앱 설정 백업 iCloud/Dropbox 활용
chezmoi Stow 대안, 암호화 및 템플릿 지원 더 복잡한 멀티 환경에 유리
1Password CLI 비밀 키·토큰을 쉘에서 안전하게 주입 op run 명령으로 환경변수 주입

마치며

처음 세팅하는 데 한 시간 정도 걸리지만, 그 이후로는 새 맥북이나 포맷이 더 이상 두렵지 않습니다. 무엇보다 수년간 쌓은 나만의 설정이 Git 히스토리로 남아 언제든 되돌리거나 비교할 수 있다는 것이 큰 장점입니다.

지금 당장 ~/.zshrc~/.dotfiles로 옮기는 것부터 시작해보세요.

야근반장

야근반장

프로그래밍과 데이터 분석을 좋아하는 개발자입니다. 낮에도 밤에도 코딩하는 주경야근 라이프를 살고 있습니다.

GitHub