Contents
see List개요
macOS에서 개발 환경을 처음부터 구축하거나 여러 Mac을 동일하게 설정하는 것은 번거로운 작업입니다. Homebrew와 Dotfiles를 활용하면 패키지 설치와 설정을 자동화하여 몇 분 안에 개발 환경을 재현할 수 있습니다. 이 글에서는 재사용 가능한 개발 환경 자동화 전략을 다룹니다.
핵심 개념
Homebrew는 macOS의 패키지 관리자로, CLI 도구와 GUI 앱을 쉽게 설치할 수 있습니다. Dotfiles는 쉘 설정(.zshrc, .bashrc), Git 설정(.gitconfig), Vim/Neovim 설정 등을 Git으로 관리하여 여러 머신에서 동일한 환경을 유지하는 방법입니다.
1. Homebrew 설치 및 기본 사용
# Homebrew 설치
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# PATH 설정 (Apple Silicon Mac)
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
# 패키지 검색
brew search git
# 패키지 설치
brew install git node python3 neovim tmux fzf ripgrep
# GUI 앱 설치 (Cask)
brew install --cask visual-studio-code docker iterm2 notion
# 설치된 패키지 목록
brew list
# 업데이트
brew update # Homebrew 자체 업데이트
brew upgrade # 모든 패키지 업그레이드
# 정리 (오래된 버전 제거)
brew cleanup
2. Brewfile로 패키지 일괄 관리
Brewfile은 설치할 패키지를 선언적으로 관리하는 파일입니다.
# ~/Brewfile
tap "homebrew/bundle"
tap "homebrew/cask-fonts"
# CLI 도구
brew "git"
brew "zsh"
brew "node"
brew "[email protected]"
brew "go"
brew "neovim"
brew "tmux"
brew "fzf"
brew "ripgrep"
brew "jq"
brew "gh" # GitHub CLI
brew "awscli"
brew "kubectl"
brew "docker"
brew "terraform"
# GUI 앱
cask "visual-studio-code"
cask "iterm2"
cask "docker"
cask "notion"
cask "slack"
cask "google-chrome"
cask "figma"
# 폰트
cask "font-jetbrains-mono-nerd-font"
cask "font-fira-code"
# Mac App Store 앱 (mas 필요)
brew "mas"
mas "Xcode", id: 497799835
mas "Things", id: 904280696
# Brewfile로 설치
brew bundle install --file=~/Brewfile
# 설치된 패키지를 Brewfile로 내보내기
brew bundle dump --file=~/Brewfile --force
# Brewfile과 다른 패키지 확인
brew bundle check --file=~/Brewfile
# Brewfile에 없는 패키지 제거
brew bundle cleanup --file=~/Brewfile --force
3. Dotfiles 구조 설계
Git 저장소로 설정 파일을 관리합니다.
# Dotfiles 저장소 구조
~/dotfiles/
├── install.sh # 자동 설치 스크립트
├── Brewfile # Homebrew 패키지 목록
├── zsh/
│ ├── .zshrc
│ └── aliases.zsh
├── git/
│ └── .gitconfig
├── nvim/
│ └── init.lua
└── tmux/
└── .tmux.conf
# Git 저장소 생성
cd ~
mkdir dotfiles
cd dotfiles
git init
git remote add origin https://github.com/yourusername/dotfiles.git
4. Zsh 설정 (.zshrc)
# ~/dotfiles/zsh/.zshrc
# Homebrew 경로 (Apple Silicon)
eval "$(/opt/homebrew/bin/brew shellenv)"
# Oh My Zsh 설치 (선택)
# sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# export ZSH="$HOME/.oh-my-zsh"
# ZSH_THEME="robbyrussell"
# plugins=(git docker kubectl fzf)
# source $ZSH/oh-my-zsh.sh
# 히스토리 설정
HISTSIZE=10000
SAVEHIST=10000
HISTFILE=~/.zsh_history
setopt SHARE_HISTORY
setopt HIST_IGNORE_ALL_DUPS
# 자동 완성
autoload -Uz compinit
compinit
# fzf 통합
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
export FZF_DEFAULT_COMMAND='rg --files --hidden --follow --glob "!.git/*"'
# 별칭
alias ls="ls -G"
alias ll="ls -lah"
alias g="git"
alias vim="nvim"
alias k="kubectl"
alias dc="docker-compose"
# 개발 도구 PATH
export PATH="$HOME/.local/bin:$PATH"
export EDITOR="nvim"
# Node.js (nvm)
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
# Python (pyenv)
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
5. Git 설정 (.gitconfig)
# ~/dotfiles/git/.gitconfig
[user]
name = Your Name
email = [email protected]
[core]
editor = nvim
autocrlf = input
excludesfile = ~/.gitignore_global
[alias]
st = status -sb
co = checkout
br = branch
cm = commit -m
lg = log --oneline --graph --all --decorate
last = log -1 HEAD
unstage = reset HEAD --
undo = reset --soft HEAD~1
[pull]
rebase = true
[push]
default = current
autoSetupRemote = true
[init]
defaultBranch = main
[diff]
tool = vimdiff
[merge]
conflictstyle = diff3
실전 예제
자동 설치 스크립트 (install.sh)
#!/bin/bash
# ~/dotfiles/install.sh
set -e
echo "=== macOS Development Environment Setup ==="
echo ""
# 1. Xcode Command Line Tools 설치
if ! xcode-select -p &> /dev/null; then
echo "[1/5] Installing Xcode Command Line Tools..."
xcode-select --install
read -p "Press Enter after Xcode installation completes..."
else
echo "[1/5] Xcode Command Line Tools already installed"
fi
# 2. Homebrew 설치
if ! command -v brew &> /dev/null; then
echo "[2/5] Installing Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
eval "$(/opt/homebrew/bin/brew shellenv)"
else
echo "[2/5] Homebrew already installed"
fi
# 3. Brewfile로 패키지 설치
echo "[3/5] Installing packages from Brewfile..."
brew bundle install --file=~/dotfiles/Brewfile
# 4. 심볼릭 링크 생성
echo "[4/5] Creating symlinks..."
ln -sf ~/dotfiles/zsh/.zshrc ~/.zshrc
ln -sf ~/dotfiles/git/.gitconfig ~/.gitconfig
ln -sf ~/dotfiles/nvim ~/.config/nvim
ln -sf ~/dotfiles/tmux/.tmux.conf ~/.tmux.conf
# 5. 추가 설정
echo "[5/5] Final setup..."
# fzf key bindings
$(brew --prefix)/opt/fzf/install --all
# macOS 시스템 설정
defaults write com.apple.finder AppleShowAllFiles -bool true # 숨김 파일 표시
defaults write NSGlobalDomain AppleShowAllExtensions -bool true # 확장자 표시
defaults write com.apple.dock autohide -bool true # Dock 자동 숨김
killall Finder
killall Dock
echo ""
echo "✅ Setup complete! Please restart your terminal."
# 실행 권한 부여 및 실행
chmod +x ~/dotfiles/install.sh
~/dotfiles/install.sh
새 Mac에서 환경 복원
# 1. 저장소 클론
git clone https://github.com/yourusername/dotfiles.git ~/dotfiles
# 2. 자동 설치 실행
cd ~/dotfiles
./install.sh
# 3. 터미널 재시작
exec zsh
활용 팁
- 민감 정보 분리: .gitconfig에 이메일이나 토큰을 넣지 말고, ~/.gitconfig.local을 별도로 만들어 [include] path로 불러옵니다.
- macOS 버전별 분기: install.sh에서 sw_vers로 macOS 버전을 확인하고 조건부 설치를 구현할 수 있습니다.
- 백업 자동화: cron이나 launchd로 정기적으로 brew bundle dump를 실행하여 Brewfile을 최신 상태로 유지합니다.
- Secrets 관리: 1Password CLI나 pass를 사용해 API 키 같은 민감 정보를 안전하게 관리합니다.
- iTerm2 프로파일: iTerm2 설정도 ~/Library/Preferences/com.googlecode.iterm2.plist를 dotfiles에 포함할 수 있습니다.
- Ansible 통합: 복잡한 설정은 Ansible playbook으로 작성하면 더 체계적으로 관리할 수 있습니다.
마무리
Homebrew와 Dotfiles를 활용하면 개발 환경을 코드로 관리할 수 있습니다. 새 Mac을 구입하거나 재설치할 때 단 한 번의 명령으로 모든 도구와 설정을 복원할 수 있어 생산성이 크게 향상됩니다. Dotfiles 저장소를 만들어 두면 팀원들과 Best Practice를 공유하거나, 여러 머신에서 일관된 환경을 유지하기도 쉽습니다. 처음에는 최소한의 설정만 넣고, 시간이 지나면서 자주 쓰는 설정을 점진적으로 추가하는 것이 좋습니다.
os
| No | 작성일 | Title |
|---|---|---|
| 353 | 2016. 03. 04. | [ linux ] tomcat permission change umask |
| 352 | 2016. 02. 26. | [ centos 7 ] oracle service 등록 systemctl |
| 351 | 2016. 02. 26. | [ centos7 ] oracle 11g install centos7에 오라클 설치 |
| 348 | 2016. 02. 15. | [ linux ] 리눅스 centos 자바 버전 (java version) 변경 |
| 338 | 2016. 01. 18. | [ linux ] 리눅스 svn 권한 설정 |
| 333 | 2015. 12. 01. | [ linux ] 하드디스크 추가, 파티션 및 마운트 (hdd partition , mount) |
| 332 | 2015. 11. 20. | [ linux ] 4 TB , 테라 이상 마운트하기 |
| 323 | 2015. 10. 17. | [ linux ] 리눅스 사용중인 포트 확인 |
| 320 | 2015. 10. 16. | [ linux ] tar 및 tar.gz 압축 , 압축해제 |
| 284 | 2015. 05. 29. | [ linux ] ps -ef 프로세서 상태 확인 |