윈도우나 리눅스에서 맥으로 넘어온 개발자가 첫날 무엇을 깔아야 하는지, 왜 그것이어야 하는지 정리했습니다. iTerm2와 Nerd Font, Homebrew, Starship 프롬프트, mise·uv·direnv로 언어와 환경변수 관리, Colima로 도커, tmux와 SSH 원격 작업, Brewfile·chezmoi 백업까지 — 설정 파일을 그대로 복사해 쓸 수 있게 .zshrc 전문을 포함했습니다. GUI 앱은 필수·권장·취향으로 나눠 추천합니다.
맥을 처음 받은 개발자가 가장 많이 하는 실수는 "일단 되는 대로 깔기"입니다. Node는 공식 설치 프로그램으로, Python은 Anaconda로, 도커는 Docker Desktop으로, 터미널은 기본 그대로. 한 달쯤 지나면 PATH가 엉키고 어떤 Python이 실행되는지 모르게 됩니다.
이 글은 그 반대로 갑니다. 모든 도구를 Homebrew 한 곳에서 관리하고, 언어 버전·환경변수·도커까지 각각 하나의 도구만 정해 쓰고, 마지막에 전체 구성을 파일 하나로 백업해 다음 맥에서 10분 만에 복원하는 구성입니다. 2026년 8월 기준 현역 도구들로 골랐고, 설정 파일은 그대로 복사해 쓸 수 있게 전문을 실었습니다.
한눈에 보는 구성
영역
선택
대안 (안 쓴 이유)
터미널
iTerm2
Ghostty, Warp — 훌륭하지만 iTerm2가 자료가 가장 많음
셸
기본 zsh
fish — 문법이 달라 스크립트 호환 문제
셸 프레임워크
없이 시작
Oh My Zsh — 편하지만 느리고 무엇이 어디서 오는지 모르게 됨
프롬프트
Starship
Powerlevel10k — zsh 전용, 유지보수 모드
폰트
JetBrainsMono Nerd Font
D2Coding — 한글 코딩엔 좋지만 아이콘 글리프 없음
셸 기능
autosuggestions + syntax-highlighting + fzf
—
언어 버전
mise
nvm/pyenv/rbenv — 언어마다 따로 관리하게 됨
Python 패키지
uv
pip + venv, Poetry — uv가 10~100배 빠르고 둘을 대체
환경변수
direnv
.zshrc에 export — 프로젝트 바꿀 때마다 충돌
도커
Colima
Docker Desktop — 기업 유료, 무거움. OrbStack은 유료지만 훌륭한 대안
원격 작업
Headscale/Tailscale + SSH + tmux
VPN 직접 구축 — 관리 부담
환경 백업
Brewfile + chezmoi
수동 메모 — 반드시 빠뜨림
명령 기록
fzf, 필요 시 Atuin
—
설치 순서는 의존 관계를 따릅니다. Xcode 도구 → Homebrew → 폰트와 iTerm2 → CLI 도구 → .zshrc → 언어·도커 → GUI 앱 → 백업 순입니다.
1. 기반: Xcode 명령줄 도구와 Homebrew
Homebrew가 Xcode 명령줄 도구(Git, 컴파일러)에 의존하므로 이것부터입니다.
hljs language-bash
xcode-select --install
hljs language-bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"# Apple Silicon — 설치 마지막에 나오는 "Next steps" 두 줄echo'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval"$(/opt/homebrew/bin/brew shellenv)"
brew doctor # "Your system is ready to brew." 확인
Intel 맥은 경로가 /usr/local/bin/brew입니다. 이 PATH 등록을 빼먹으면 새 터미널에서 brew를 못 찾습니다. 기본 설치 과정을 더 자세히 보려면 맥에서 Claude Code 시작하기 글의 1~3단계를 참고하세요.
2. 터미널: iTerm2와 Nerd Font
기본 터미널 앱도 쓸 만하지만 iTerm2는 분할 창, 검색, 핫키 창(어디서든 단축키로 터미널 띄우기), 트리거, 셸 통합 등에서 여전히 앞섭니다. 폰트는 Nerd Font 계열이어야 합니다. Starship·eza가 표시하는 Git 브랜치 아이콘, 폴더 아이콘 같은 글리프가 들어 있기 때문입니다.
Profiles → Text → Font에서 JetBrainsMono Nerd Font 선택, 크기 13~14. "Use ligatures"는 취향(=>, !=가 합자로 표시). 한글이 섞인 출력이 어긋나면 같은 화면의 "Non-ASCII Font"에 D2Coding이나 Apple SD Gothic Neo를 지정
색상
Profiles → Colors → Color Presets에서 Solarized Dark나 Tango Dark. 더 원하면 iterm2colorschemes.com에서 Catppuccin·Tokyo Night 등을 가져오기(Import)
키
Profiles → Keys → General에서 Left Option key: Esc+. 이걸 안 하면 ⌥+←로 단어 단위 이동이 안 됨
핫키
Keys → Hotkey → Create a Dedicated Hotkey Window에 ⌥+Space 같은 키를 지정. 어느 앱에서든 그 키로 터미널이 내려옴
Shell Integration은 iTerm2 메뉴 → Install Shell Integration으로 설치하면 명령 단위 점프(⌘+⇧+↑), 명령 실행 시간 표시, 마지막 출력만 선택 같은 기능이 켜집니다. 선택 사항입니다.
starship preset 명령으로 미리 만들어진 테마(nerd-font-symbols, pastel-powerline 등)를 불러올 수도 있습니다.
5. 언어 버전: mise
nvm, pyenv, rbenv, jenv를 각각 깔던 시대는 끝났습니다. mise 하나가 전부 대체하고, .zshrc에서 이미 활성화했으므로 폴더별 버전이 자동으로 바뀝니다.
hljs language-bash
# 전역 기본 버전
mise use --global node@lts
mise use --global python@3.13
mise use --global go@latest # 필요한 언어만# 프로젝트 폴더에서 — .mise.toml 또는 .tool-versions 생성cd ~/work/my-app
mise use node@22
mise ls# 설치된 버전
mise doctor # 문제 진단
mise는 .nvmrc, .python-version, .tool-versions 파일도 그대로 읽으므로 기존 프로젝트와 호환됩니다. 팀원이 nvm을 써도 충돌하지 않습니다.
6. Python: uv
Python만은 mise보다 uv에게 맡기는 것이 낫습니다. uv가 인터프리터 설치부터 가상환경, 의존성 잠금, 도구 실행까지 한 번에 처리하기 때문입니다.
hljs language-bash
# 새 프로젝트
uv init my-api && cd my-api
uv add fastapi uvicorn # pyproject.toml + uv.lock 자동
uv run uvicorn main:app --reload # 가상환경 활성화 없이 실행# 기존 프로젝트 (requirements.txt)
uv venv && uv pip install -r requirements.txt
# 전역 CLI 도구 (pipx 대체)
uv tool install ruff
uv tool install httpie
# 인터프리터
uv python install 3.12
uv python list
uv run을 습관화하면 source .venv/bin/activate를 칠 일이 없어집니다. Jupyter도 uv run --with jupyter jupyter lab으로 프로젝트 환경에서 바로 띄울 수 있습니다.
7. 환경변수: direnv
프로젝트마다 다른 API 키, DB 주소를 .zshrc에 쌓아두면 반드시 사고가 납니다. direnv는 폴더에 들어갈 때만 변수를 올리고, 나오면 내립니다.
hljs language-bash
cd ~/work/my-app
cat > .envrc <<'EOF'export DATABASE_URL=postgres://localhost:5432/myapp
export OPENAI_API_KEY=sk-...
dotenv_if_exists .env
EOF
direnv allow # 처음 한 번, .envrc가 바뀔 때마다 다시echo .envrc >> .gitignore # 비밀값은 절대 커밋하지 않음
dotenv_if_exists .env 줄을 넣어두면 기존 .env 파일도 함께 로드됩니다. uv 프로젝트라면 .envrc에 source .venv/bin/activate를 적어 폴더 진입 시 가상환경까지 자동으로 켤 수 있습니다.
8. 도커: Colima
Docker Desktop은 직원 250명 이상 또는 매출 1천만 달러 이상 기업에서 유료이고, 메뉴바에서 메모리를 꽤 먹습니다. Colima는 같은 도커 엔진을 가벼운 VM에서 돌리는 오픈소스 대안입니다.
hljs language-bash
brew install colima docker docker-compose
colima start --cpu 4 --memory 8 --disk 60 # 처음 한 번 리소스 지정
docker run --rm hello-world
docker compose up -d
colima stop # 안 쓸 때 끄기
colima start # 이후엔 설정 기억함
docker 명령은 그대로 쓰고, VS Code Docker 확장도 그대로 동작합니다. Apple Silicon에서 x86 이미지를 돌려야 한다면 colima start --vm-type vz --vz-rosetta로 시작합니다. 속도와 파일 동기화가 중요하고 유료(개인은 무료)여도 괜찮다면 OrbStack(brew install --cask orbstack)이 가장 쾌적합니다.
9. tmux, Git, GitHub
tmux
SSH로 서버에 붙어 긴 작업을 돌리다 연결이 끊기면 작업도 죽습니다. tmux 안에서 돌리면 세션이 살아 있고 다시 붙으면 됩니다. 로컬에서도 프로젝트별로 창 묶음을 유지하는 데 씁니다.
hljs language-bash
cat > ~/.tmux.conf <<'EOF'set -g prefix C-a # Ctrl+B 대신 Ctrl+A
unbind C-b
bind C-a send-prefix
set -g mouse on # 마우스로 창 크기 조절·스크롤set -g base-index 1 # 창 번호 1부터set -g history-limit 50000
set -g default-terminal "tmux-256color"set -ga terminal-overrides ",xterm-256color:Tc"# 트루컬러bind | split-window -h -c "#{pane_current_path}"bind - split-window -v -c "#{pane_current_path}"bind r source-file ~/.tmux.conf \; display "reloaded"
EOF
명령 / 키
동작
tmux new -s work
work라는 세션 시작
tmux attach -t work (또는 tmux a)
끊긴 세션에 다시 붙기
tmux ls
세션 목록
Ctrl+A → d
세션에서 빠져나오기(작업은 계속 실행)
Ctrl+A → | / -
세로 / 가로 분할
Ctrl+A → c / n / p
새 창 / 다음 / 이전 창
Git 기본 설정
hljs language-bash
git config --global user.name "홍길동"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global pull.rebase false
git config --global core.editor "code --wait"
git config --global push.autoSetupRemote true# 첫 push 때 -u 생략 가능
git config --global rerere.enabled true# 같은 충돌 자동 재해결
git config --global core.excludesfile ~/.gitignore_global
printf".DS_Store\n.envrc\n.env\n.idea/\n" > ~/.gitignore_global
.DS_Store를 전역 ignore에 넣는 것은 맥 사용자의 예의입니다.
GitHub 인증과 SSH 키
hljs language-bash
# HTTPS — 가장 간단. 브라우저 인증 한 번이면 끝
gh auth login # GitHub.com → HTTPS → Login with a web browser
gh auth status
# SSH — 서버·CI와 같은 키를 쓰고 싶을 때
ssh-keygen -t ed25519 -C "you@example.com"
gh ssh-key add ~/.ssh/id_ed25519.pub --title "MacBook 2026"
ssh -T git@github.com # "Hi 아이디! You've successfully authenticated" 확인
10. 원격 작업: Headscale(Tailscale) + SSH + tmux
집이나 회사의 개발 서버, GPU 머신에 어디서든 붙으려면 VPN이 필요합니다. Tailscale은 WireGuard 기반 메시 VPN으로 설정이 거의 없고, 회사가 자체 호스팅을 원하면 오픈소스 컨트롤 서버인 Headscale을 씁니다. 클라이언트는 둘 다 Tailscale 앱입니다.
hljs language-bash
brew install --cask tailscale
# Tailscale 공식 서버를 쓸 때: 앱 실행 후 로그인하면 끝# 회사 Headscale을 쓸 때: 관리자에게 받은 서버 주소로 로그인
tailscale up --login-server https://headscale.example.com
tailscale status # 연결된 머신과 IP 목록
ssh user@dev-server # Tailscale IP 또는 MagicDNS 이름으로 접속
SSH 접속을 ~/.ssh/config에 등록해 두면 이름만으로 붙습니다.
hljs language-text
# ~/.ssh/config
Host dev
HostName dev-server # Tailscale MagicDNS 이름 또는 100.x.y.z
User ubuntu
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 30
ServerAliveCountMax 3
이제 일상의 원격 루틴은 세 줄입니다.
hljs language-bash
ssh dev # 접속
tmux a || tmux new -s main # 있으면 붙고 없으면 새로# ... 작업 → 노트북 덮어도 작업은 계속 ...
VS Code의 Remote - SSH 확장을 쓰면 같은 설정으로 원격 폴더를 로컬처럼 편집할 수 있습니다.
11. GUI 앱 추천
전부 Homebrew cask로 설치합니다. App Store 앱은 mas로 같이 관리할 수 있습니다.
Postgres·MySQL·SQLite·Redis를 한 앱에서. 무료 버전으로 대부분 충분
Bruno
API 클라이언트
Postman 대체. 요청 컬렉션이 파일로 저장돼 Git으로 공유
Obsidian
노트
마크다운 파일 기반 노트. 개발 메모·TIL
Slack
협업
팀이 쓰는 것으로. Discord·Zoom도 cask로 설치 가능
취향 — 필요할 때
앱
cask 이름
언제
Ghostty
ghostty
iTerm2보다 빠르고 단순한 GPU 터미널을 원할 때
OrbStack
orbstack
Colima보다 빠른 도커·리눅스 VM. 개인 무료
Karabiner-Elements
karabiner-elements
키 리매핑 — Caps Lock을 Esc/Ctrl로, 한영 전환 키 변경
AltTab
alt-tab
윈도우식 Alt+Tab 창 전환(앱이 아니라 창 단위)
Ice
jordanbaird-ice
메뉴바 아이콘 숨기기. 노치 맥북에서 메뉴바가 넘칠 때
Fork
fork
Git GUI. 복잡한 리베이스·충돌을 눈으로 볼 때
Proxyman
proxyman
HTTPS 트래픽 디버깅(모바일 앱 포함)
Figma
figma
디자인 시안 확인
Docker Desktop
docker-desktop
회사 정책상 필요하거나 Kubernetes 내장을 원할 때
macOS 시스템 설정 몇 가지
앱은 아니지만 개발자가 첫날 바꾸는 설정입니다.
hljs language-bash
# 키 반복 속도 — 코드 편집 시 커서 이동이 빨라짐
defaults write NSGlobalDomain KeyRepeat -int 2
defaults write NSGlobalDomain InitialKeyRepeat -int 15
# Finder: 숨김 파일·확장자·경로 표시
defaults write com.apple.finder AppleShowAllFiles -bool true
defaults write NSGlobalDomain AppleShowAllExtensions -bool true
defaults write com.apple.finder ShowPathbar -bool true# 스크린샷 저장 위치mkdir -p ~/Screenshots && defaults write com.apple.screencapture location ~/Screenshots
killall Finder
설정 앱에서는 키보드 → 키보드 단축키 → 입력 소스에서 한영 전환을 Caps Lock이 아닌 ⌃+Space로 두거나, Karabiner로 오른쪽 ⌘에 매핑하는 것을 권합니다. Caps Lock 한영 전환은 지연이 있어 타이핑 중 글자가 씹힙니다.
12. 명령 기록: fzf, 그리고 Atuin
.zshrc의 source <(fzf --zsh) 한 줄로 이미 세 가지 키가 살아 있습니다.
키
동작
Ctrl+R
명령 기록을 퍼지 검색. dock up만 쳐도 docker compose up -d가 나옴
Ctrl+T
현재 폴더 아래 파일을 검색해 명령줄에 삽입. code 입력 후 Ctrl+T
Alt+C
하위 폴더를 검색해 이동 (iTerm2에서 Option=Esc+ 설정 필요)
여러 맥·서버의 명령 기록을 동기화하고, "지난주 그 서버에서 친 명령"을 찾고 싶다면 그때 Atuin을 추가합니다. 처음부터 필요하지는 않습니다.
hljs language-bash
brew install atuin
echo'eval "$(atuin init zsh)"' >> ~/.zshrc
atuin import auto # 기존 zsh 기록 가져오기# 동기화가 필요하면: atuin register / atuin login
13. 환경 백업: Brewfile + chezmoi
여기까지 만든 환경을 다음 맥에서 10분 만에 되살리는 방법입니다.
Brewfile — 설치한 것 전부를 파일 하나로
hljs language-bash
brew bundle dump --file=~/Brewfile --force # 현재 설치 목록 → Brewfilecat ~/Brewfile # brew/cask/mas 항목이 한 줄씩
새 맥에서는 Homebrew만 설치한 뒤:
hljs language-bash
brew bundle install --file=~/Brewfile
한 줄로 CLI·GUI 앱·폰트가 전부 설치됩니다. App Store 앱도 brew install mas 후 mas "Xcode", id: 497799835 형식으로 Brewfile에 들어갑니다.
chezmoi — 설정 파일(dotfiles)을 Git으로
.zshrc, .tmux.conf, .gitconfig, starship.toml, .ssh/config 같은 파일을 Git 저장소에 넣고 어느 머신에서든 받아 적용합니다. 단순 심링크 방식보다 나은 점은 머신별 차이(회사/개인 이메일, Intel/Apple Silicon 경로)를 템플릿으로 처리하고, 비밀값은 1Password 등에서 꺼내오게 할 수 있다는 것입니다.
CLI 도구 한 줄 설치 → .zshrc 붙여넣기 → mise use --global node@lts python@3.13 → gh auth login
20~30분
필수 GUI 앱 cask 설치 → 키 반복 속도·한영 전환 설정 → Colima는 첫 도커 프로젝트 때
끝나면
brew bundle dump + chezmoi add로 지금 상태를 저장. 이 다음 맥부터는 두 줄
이 구성의 원칙은 하나입니다. 역할마다 도구는 하나, 설치 경로는 Homebrew 하나, 설정은 Git에. 이것만 지키면 1년 뒤에도 which python의 답이 예측 가능합니다. 이 환경 위에 AI 코딩 도구를 얹는 과정은 맥에서 Claude Code 시작하기에서 이어집니다.