
개발 환경 자동화: dotfiles, 셸 설정, 도구 세팅
맥을 새로 사면 개발 환경 세팅에 이틀이 걸렸다. dotfiles과 자동화 스크립트를 만들고 나니 30분이면 끝난다.

맥을 새로 사면 개발 환경 세팅에 이틀이 걸렸다. dotfiles과 자동화 스크립트를 만들고 나니 30분이면 끝난다.
ChatGPT는 질문에 답하지만, AI Agent는 스스로 계획하고 도구를 사용해 작업을 완료한다. 이 차이가 왜 중요한지 정리했다.

ESLint와 Prettier 설정 충돌로 삽질한 경험, 누구나 있을 것이다. Biome는 이 둘을 하나로 합치고 속도까지 잡았다.

세 가지 AI 코딩 도구를 실제로 써보고 비교했다. 자동완성, 코드 생성, 리팩토링 각각 어디가 강한지 솔직한 후기.

쉘은 운영체제의 핵심이 아닙니다. 단지 사용자의 명령을 커널에 전달하는 '메신저'일 뿐입니다. zsh, bash가 하는 진짜 역할.

작년에 맥북을 새로 샀다. 신나서 상자를 뜯고 전원을 켰는데, 그때부터 지옥이 시작됐다. Homebrew 설치하고, Git 설정하고, VS Code 익스텐션 하나씩 찾아서 깔고, 터미널 테마 설정하고, Node.js 버전 매니저 설치하고... 정신 차리니 이틀이 지나 있었다. 그것도 뭘 깔았는지 전부 기억해낸 건 아니었다. 예전 맥북 켜서 이것저것 비교하면서 "아, 이것도 있었지" 하며 추가로 설치했다.
그때 생각했다. "이게 맞나? 개발자라는 사람이 개발 환경 세팅에 이틀을 쓰는 게?"
더 웃긴 건, 회사 동료가 똑같은 삽질을 하고 있는 걸 보면서도 "그냥 하는 거지 뭐" 했다는 거다. 그러다 우연히 dotfiles이라는 걸 알게 됐다. 처음엔 "점으로 시작하는 파일? 숨김 파일 모음?" 정도로만 생각했는데, 파고들수록 이건 그냥 설정 파일 모음이 아니라 개발자의 근육 기억을 코드로 옮긴 것이었다.
결국 나만의 dotfiles 저장소를 만들고, 자동화 스크립트까지 짰다. 그 뒤로 맥북을 새로 세팅하는 데 30분이면 충분해졌다. 명령어 하나 입력하고 커피 한 잔 마시면 끝이다.
유닉스 계열 시스템에서 .으로 시작하는 파일은 숨김 파일이다. 홈 디렉토리(~)를 열어보면 .zshrc, .gitconfig, .vimrc 같은 파일들이 숨어있다. 이 파일들이 바로 당신의 개발 환경을 정의한다.
.zshrc: 터미널(zsh) 설정. 별칭(alias), 환경 변수, 프롬프트 테마 등.gitconfig: Git 설정. 사용자 정보, 별칭, 기본 브랜치, 커밋 서명 등.vimrc 또는 .config/nvim/init.vim: Vim/Neovim 에디터 설정문제는 이 파일들이 로컬에만 있다는 거다. 맥북을 바꾸거나 회사 컴퓨터에서 작업하면 처음부터 다시 세팅해야 한다. dotfiles 관리의 핵심은 이 설정 파일들을 Git으로 버전 관리하고, GitHub에 올려두는 것이다.
dotfiles을 만드는 건 자신만의 요리 레시피를 정리하는 것과 비슷하다. 맛있는 음식을 만들 때마다 "어, 이거 어떻게 했더라?" 하지 않고, 레시피 노트에 적어두는 거다. 다음에 같은 음식을 만들 땐 노트만 보면 된다.
dotfiles도 마찬가지다. 한 번 정리해두면:
macOS에서 개발 도구를 설치할 때 Homebrew를 쓴다. 문제는 뭘 깔았는지 잊어버린다는 거다. 그래서 나온 게 Brewfile이다.
Brewfile은 설치할 패키지 목록을 코드로 적어둔 파일이다:
# Brewfile
# CLI 도구들
brew "git"
brew "node"
brew "fnm" # Fast Node Manager
brew "ripgrep"
brew "fzf"
brew "tmux"
brew "starship"
# GUI 앱들
cask "visual-studio-code"
cask "docker"
cask "iterm2"
cask "notion"
# 앱스토어 앱들 (mas 필요)
mas "Xcode", id: 497799835
설치는 간단하다:
# Brewfile이 있는 디렉토리에서
brew bundle install
# 현재 설치된 패키지를 Brewfile로 저장
brew bundle dump
이제 맥북을 새로 사도 brew bundle install 한 줄이면 끝이다. 마치 package.json에 의존성을 적어두고 npm install 하는 것처럼.
macOS는 기본적으로 zsh를 쓴다. Oh My Zsh는 zsh 설정을 쉽게 만들어주는 프레임워크다:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
설치 후 .zshrc 파일을 열면 플러그인과 테마를 추가할 수 있다:
# ~/.zshrc
ZSH_THEME="robbyrussell" # 또는 다른 테마
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
docker
node
)
# 유용한 별칭들
alias gs="git status"
alias gp="git push"
alias dc="docker compose"
alias ll="ls -lah"
alias ..="cd .."
alias ...="cd ../.."
# 환경 변수
export EDITOR="code"
export PATH="$HOME/.local/bin:$PATH"
Starship은 빠르고 커스터마이징 가능한 프롬프트다. Git 브랜치, Node 버전, 실행 시간 등을 자동으로 보여준다:
brew install starship
# ~/.zshrc 끝에 추가
eval "$(starship init zsh)"
설정은 ~/.config/starship.toml에:
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[✗](bold red)"
[git_branch]
symbol = "🌱 "
[nodejs]
symbol = "⬢ "
.gitconfig 파일에 Git 전역 설정을 담는다:
[user]
name = Your Name
email = your.email@example.com
[core]
editor = code --wait
autocrlf = input
[init]
defaultBranch = main
[alias]
co = checkout
br = branch
ci = commit
st = status
unstage = reset HEAD --
last = log -1 HEAD
visual = log --graph --oneline --all
[pull]
rebase = true
[push]
default = current
[commit]
gpgsign = true # 커밋 서명 (GPG 키 필요)
프로젝트마다 Node 버전이 다르다. fnm(Fast Node Manager)을 쓰면 프로젝트별로 자동으로 버전을 전환한다:
brew install fnm
# ~/.zshrc에 추가
eval "$(fnm env --use-on-cd)"
# 사용법
fnm install 18
fnm install 20
fnm use 18
# 프로젝트에 .node-version 또는 .nvmrc 파일 만들기
echo "18.20.0" > .node-version
# 이 디렉토리로 cd하면 자동으로 Node 18 사용
다른 대안으로는 nvm(더 유명하지만 느림)이나 volta(Rust 기반, 빠름)가 있다.
VS Code는 자체 Settings Sync 기능이 있다. GitHub 계정으로 로그인하면 설정, 익스텐션, 키바인딩이 자동으로 동기화된다.
하지만 더 세밀한 관리를 원한다면 settings.json을 dotfiles에 포함시킨다:
# dotfiles 저장소에 복사
cp ~/Library/Application\ Support/Code/User/settings.json ~/dotfiles/vscode/
# 심볼릭 링크로 연결 (bootstrap 스크립트에서 실행)
ln -sf ~/dotfiles/vscode/settings.json ~/Library/Application\ Support/Code/User/
GitHub에 SSH로 접속하려면 키를 생성하고 등록해야 한다:
# ED25519 알고리즘 (RSA보다 안전하고 빠름)
ssh-keygen -t ed25519 -C "your.email@example.com"
# SSH 에이전트에 키 추가
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# 공개 키를 클립보드에 복사
pbcopy < ~/.ssh/id_ed25519.pub
# GitHub Settings → SSH and GPG keys → New SSH key에 붙여넣기
# 테스트
ssh -T git@github.com
.ssh/config 파일로 여러 계정 관리:
# ~/.ssh/config
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
dotfiles/
├── README.md
├── bootstrap.sh # 메인 설치 스크립트
├── Brewfile # Homebrew 패키지 목록
├── .zshrc
├── .gitconfig
├── .config/
│ ├── starship.toml
│ └── tmux/
│ └── tmux.conf
├── vscode/
│ ├── settings.json
│ └── extensions.txt
└── scripts/
├── symlink.sh # 심볼릭 링크 생성
└── macos.sh # macOS 시스템 설정
이 스크립트 하나로 모든 세팅을 자동화한다:
#!/bin/bash
set -e # 에러 발생 시 중단
echo "🚀 Starting dotfiles setup..."
# Homebrew 설치
if ! command -v brew &> /dev/null; then
echo "📦 Installing Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
# Brewfile로 패키지 설치
echo "📦 Installing packages from Brewfile..."
brew bundle install
# Oh My Zsh 설치
if [ ! -d "$HOME/.oh-my-zsh" ]; then
echo "🐚 Installing Oh My Zsh..."
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
fi
# zsh 플러그인 설치
echo "🔌 Installing zsh plugins..."
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# 심볼릭 링크 생성
echo "🔗 Creating symlinks..."
./scripts/symlink.sh
# macOS 시스템 설정
echo "⚙️ Configuring macOS settings..."
./scripts/macos.sh
echo "✅ Setup complete! Please restart your terminal."
dotfiles 저장소의 파일들을 홈 디렉토리에 심볼릭 링크로 연결:
#!/bin/bash
DOTFILES_DIR="$HOME/dotfiles"
# 링크 생성 함수
link_file() {
local src=$1
local dst=$2
# 기존 파일이 있으면 백업
if [ -f "$dst" ] && [ ! -L "$dst" ]; then
mv "$dst" "$dst.backup"
fi
ln -sf "$src" "$dst"
echo "Linked: $src → $dst"
}
# 설정 파일들 링크
link_file "$DOTFILES_DIR/.zshrc" "$HOME/.zshrc"
link_file "$DOTFILES_DIR/.gitconfig" "$HOME/.gitconfig"
link_file "$DOTFILES_DIR/.config/starship.toml" "$HOME/.config/starship.toml"
# VS Code 설정
link_file "$DOTFILES_DIR/vscode/settings.json" "$HOME/Library/Application Support/Code/User/settings.json"
# 새 맥북에서
git clone https://github.com/yourusername/dotfiles.git ~/dotfiles
cd ~/dotfiles
chmod +x bootstrap.sh
./bootstrap.sh
30분 뒤면 완벽한 개발 환경이 완성된다.
수동으로 심볼릭 링크를 만드는 게 번거롭다면 chezmoi를 쓴다. 여러 머신에서 dotfiles을 동기화하고, 머신별 설정 차이도 관리한다:
brew install chezmoi
# 기존 dotfiles 저장소 가져오기
chezmoi init https://github.com/yourusername/dotfiles.git
# 변경사항 확인
chezmoi diff
# 적용
chezmoi apply
# 파일 추가
chezmoi add ~/.zshrc
# Git에 커밋
chezmoi cd
git add .
git commit -m "Update zshrc"
git push
여러 터미널 창을 하나로 관리하고, SSH 연결이 끊겨도 세션이 유지된다:
brew install tmux
# ~/.config/tmux/tmux.conf
# 프리픽스 키 변경 (Ctrl+b → Ctrl+a)
set -g prefix C-a
unbind C-b
# 마우스 지원
set -g mouse on
# 윈도우 번호 1부터 시작
set -g base-index 1
# 키 바인딩
bind | split-window -h # 수직 분할
bind - split-window -v # 수평 분할
사용법:
tmux: 새 세션 시작Ctrl+a c: 새 윈도우Ctrl+a |: 수직 분할Ctrl+a -: 수평 분할Ctrl+a d: 세션 나가기 (detach)tmux attach: 세션 다시 들어가기Brewfile에 추가하면 좋은 도구들:
# 검색 및 탐색
brew "fzf" # 퍼지 파인더 (Ctrl+R로 히스토리 검색)
brew "ripgrep" # 빠른 grep (rg 명령어)
brew "fd" # 빠른 find
brew "bat" # cat의 개선판 (문법 하이라이팅)
brew "exa" # ls의 개선판
# Git 도구
brew "git-delta" # diff를 예쁘게
brew "lazygit" # Git TUI
# 유틸리티
brew "tldr" # 간단한 man 페이지
brew "htop" # 시스템 모니터
brew "jq" # JSON 파서
brew "httpie" # curl의 개선판
# 개발 도구
brew "gh" # GitHub CLI
brew "docker"
brew "kubectl"
.zshrc에 fzf 통합:
# fzf 설정
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
# Ctrl+T로 파일 검색, Alt+C로 디렉토리 이동
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
dotfiles과 자동화 스크립트를 만드는 데 처음엔 시간이 걸렸다. 주말 하루를 꼬박 썼다. 하지만 그 뒤로:
git checkout .하면 원상복구마치 이사할 때 짐을 정리해두면 다음 이사가 편한 것처럼, dotfiles도 한 번 정리해두면 평생 써먹는다. 설정 파일을 손으로 하나씩 복사하던 시절로는 돌아갈 수 없다.
개발 환경 세팅에 이틀 쓰는 건 이제 옛날 이야기다. 코드로 자동화하면 30분이면 끝난다. 그리고 그 30분도 대부분 설치 기다리는 시간이다.
시작은 간단하다:
dotfiles 저장소 만들기.zshrc, .gitconfig 복사해서 커밋Brewfile 만들기 (brew bundle dump)bootstrap.sh 스크립트 작성당장 오늘 만들어두면, 다음 맥북 샀을 때 당신은 과거의 자신에게 감사할 것이다.