macOS 개발 환경 설정 가이드 | 필수 도구와 최적화
이 글의 핵심
macOS에서 개발 환경을 구축하는 방법. Homebrew, iTerm2, Zsh, 개발 도구 설치부터 생산성 향상 팁까지. 실전 예제와 코드로 개념부터 활용까지 정리합니다. macOS·Homebrew·iTerm2 중심으로 설명합니다.
새 맥을 샀거나 개발 환경을 처음 세팅한다면 어디서부터 시작해야 할까? 이 글에서는 macOS에서 개발 환경을 구축하는 전체 과정을 다룬다.
사전 지식
macOS는 Unix 기반 운영체제로, 터미널에서 Linux와 유사한 명령어를 사용할 수 있다. 개발자에게 macOS가 인기 있는 이유는 다음과 같다.
Unix 기반 시스템
macOS는 BSD Unix를 기반으로 하기 때문에 Linux 서버 환경과 명령어가 거의 동일하다. 로컬에서 개발한 스크립트를 서버에서 그대로 실행할 수 있다.
패키지 관리자
Linux의 apt, yum처럼 macOS에는 Homebrew라는 패키지 관리자가 있다. 명령어 하나로 개발 도구를 설치하고 업데이트할 수 있다.
터미널
macOS의 터미널은 기본적으로 Bash나 Zsh 셸을 제공한다. iTerm2 같은 대체 터미널 앱을 사용하면 더 강력한 기능을 쓸 수 있다.
1단계: 시스템 기본 설정
macOS defaults 명령어 내부 원리
defaults 명령어가 동작하는 방식:
macOS는 애플리케이션 설정을 Property List (plist) 파일에 저장합니다.
Property List 저장 위치:
~/Library/Preferences/
├── com.apple.finder.plist # Finder 설정
├── com.apple.dock.plist # Dock 설정
├── .GlobalPreferences.plist # 시스템 전역 설정
└── ...
defaults write 동작:
1. defaults write com.apple.finder AppleShowAllFiles -bool true
내부 처리:
→ ~/Library/Preferences/com.apple.finder.plist 파일 열기
→ <key>AppleShowAllFiles</key>
<true/>
추가 또는 수정
→ 파일 저장 (Binary plist 형식)
2. 변경사항 적용:
killall Finder
→ Finder 프로세스 종료
→ launchd가 자동으로 Finder 재시작
→ 새 Finder 프로세스가 plist 파일 읽기
→ AppleShowAllFiles=true 설정 적용
plist 파일 포맷:
- XML 또는 Binary 형식
- Key-Value 쌍
- 타입: string, bool, int, float, data, date, array, dict
defaults 명령어 유형:
- defaults write: 설정 쓰기
- defaults read: 설정 읽기
- defaults delete: 설정 삭제
- defaults domains: 도메인 목록
plist 파일 직접 확인:
# Binary plist를 XML로 변환해서 확인
plutil -convert xml1 ~/Library/Preferences/com.apple.finder.plist -o - | grep -A 2 AppleShowAllFiles
# 출력:
# <key>AppleShowAllFiles</key>
# <true/>
# 모든 Finder 설정 확인
defaults read com.apple.finder
# 특정 키만 확인
defaults read com.apple.finder AppleShowAllFiles
# 출력: 1 (true)
시스템 환경설정 조정
개발자 친화적으로 macOS 설정을 변경한다.
Finder 설정
# 숨김 파일 표시
defaults write com.apple.finder AppleShowAllFiles -bool true
# 내부 동작:
# - com.apple.finder.plist 수정
# - AppleShowAllFiles 키를 true로 설정
# - Finder는 .으로 시작하는 파일도 표시
# 모든 파일 확장자 표시
defaults write NSGlobalDomain AppleShowAllExtensions -bool true
# 내부 동작:
# - NSGlobalDomain = .GlobalPreferences.plist
# - 시스템 전역 설정 (모든 앱에 영향)
# - 확장자 숨김 기능 비활성화
# 경로 막대 표시
defaults write com.apple.finder ShowPathbar -bool true
# Finder 하단에 현재 경로 표시줄 추가
# 상태 막대 표시
defaults write com.apple.finder ShowStatusBar -bool true
# Finder 하단에 항목 개수, 여유 공간 표시
# Finder 재시작
killall Finder
# SIGTERM 시그널을 Finder에 전송
# Finder 프로세스 종료 → launchd가 자동 재시작
# 새 Finder가 수정된 plist 읽기 → 설정 적용
스크린샷 저장 위치 변경
# 스크린샷을 Downloads 폴더에 저장
mkdir -p ~/Downloads/Screenshots
defaults write com.apple.screencapture location ~/Downloads/Screenshots
# 변경사항 적용
killall SystemUIServer
키 반복 속도 최적화
# 키 반복 지연 시간 최소화
defaults write NSGlobalDomain KeyRepeat -int 1
# 키 반복 시작 지연 최소화
defaults write NSGlobalDomain InitialKeyRepeat -int 10
Dock 설정
# Dock 자동 숨김
defaults write com.apple.dock autohide -bool true
# Dock 애니메이션 속도 빠르게
defaults write com.apple.dock autohide-time-modifier -float 0.5
# Dock 재시작
killall Dock
개발자 도구 활성화
macOS에는 기본적으로 개발 도구가 숨겨져 있다.
# 우클릭 메뉴에 "경로 복사" 추가
defaults write com.apple.finder ShowPathbar -bool true
# 텍스트 선택 시 QuickTime Player에서 복사 가능
defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen -bool false
2단계: Xcode Command Line Tools 설치
모든 개발 도구의 기반이 되는 필수 패키지다.
설치
xcode-select --install
팝업 창이 뜨면 “설치” 버튼을 클릭한다. 약 5-10분 소요된다.
설치 확인
xcode-select -p
# 출력: /Library/Developer/CommandLineTools
gcc --version
# 출력: Apple clang version ...
포함된 도구:
- GCC, Clang 컴파일러
- Git
- Make
- Python (시스템 기본)
- 각종 Unix 유틸리티
3단계: Homebrew 설치
Homebrew는 macOS의 사실상 표준 패키지 관리자다.
Homebrew가 동작하는 원리:
Homebrew 패키지 설치 내부 동작:
brew install wget 명령 실행 시:
1. Formula 검색:
/opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/w/wget.rb
Formula는 Ruby DSL로 작성된 패키지 정의 파일:
- url: 소스코드 다운로드 주소
- sha256: 무결성 검증 해시
- dependencies: 의존 패키지 목록
- install: 설치 스크립트
2. 의존성 해결:
wget → openssl@3, libidn2, libunistring
→ 아직 설치 안 됨 → 먼저 설치
3. 소스 다운로드:
→ /Users/<user>/Library/Caches/Homebrew/downloads/
4. 컴파일 (from source):
./configure --prefix=/opt/homebrew/Cellar/wget/1.21.4
make
make install
Binary bottle 사용 가능 시:
- 미리 컴파일된 바이너리 다운로드
- 압축 해제만 (훨씬 빠름)
5. Cellar에 설치:
/opt/homebrew/Cellar/wget/1.21.4/
├── bin/wget
├── share/man/man1/wget.1
└── ...
6. Symlink 생성:
/opt/homebrew/bin/wget → ../Cellar/wget/1.21.4/bin/wget
PATH에 /opt/homebrew/bin이 포함되어 있으므로
터미널에서 wget 명령 사용 가능
Homebrew 디렉토리 구조:
Intel Mac:
/usr/local/
├── Cellar/ # 실제 패키지 설치 위치 (버전별)
│ ├── wget/1.21.4/
│ ├── git/2.42.0/
│ └── node/20.10.0/
├── bin/ # 실행 파일 symlink
├── lib/ # 라이브러리 symlink
├── include/ # 헤더 파일 symlink
└── share/ # 문서, man 페이지
Apple Silicon (M1/M2/M3):
/opt/homebrew/ # ARM 아키텍처 전용 위치
├── Cellar/ # 동일한 구조
├── bin/
├── lib/
└── ...
왜 위치가 다른가?
- Intel: /usr/local (전통적 Unix 위치)
- Apple Silicon: /opt/homebrew (Apple 설계)
* /usr/local은 Rosetta 2 바이너리용 예약
* ARM 네이티브 바이너리 분리
brew shellenv가 하는 일:
eval "$(/opt/homebrew/bin/brew shellenv)"
# 실행 결과 (실제로 export하는 환경 변수):
export HOMEBREW_PREFIX="/opt/homebrew"
export HOMEBREW_CELLAR="/opt/homebrew/Cellar"
export HOMEBREW_REPOSITORY="/opt/homebrew"
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:$PATH"
export MANPATH="/opt/homebrew/share/man:$MANPATH"
export INFOPATH="/opt/homebrew/share/info:$INFOPATH"
역할:
- PATH 앞에 /opt/homebrew/bin 추가
→ 시스템 기본 명령어보다 Homebrew 패키지 우선
- MANPATH 추가
→ man wget 시 Homebrew 설치 man 페이지 검색
설치
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 설치 스크립트가 하는 일:
# 1. Xcode Command Line Tools 확인
# 2. /opt/homebrew (또는 /usr/local) 디렉토리 생성
# 3. Git으로 Homebrew 저장소 clone
# 4. 초기 설정 및 권한 조정
# 5. brew shellenv 안내 메시지 출력
Apple Silicon (M1/M2/M3) 추가 설정
Apple Silicon 맥에서는 Homebrew가 /opt/homebrew에 설치된다.
# ~/.zshrc 또는 ~/.bash_profile에 추가
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc
source ~/.zshrc
설치 확인
brew --version
# 출력: Homebrew 4.x.x
기본 사용법
# 패키지 검색
brew search 패키지명
# 패키지 설치
brew install 패키지명
# 패키지 업데이트
brew update # Homebrew 자체 업데이트
brew upgrade # 모든 패키지 업데이트
brew upgrade 패키지명 # 특정 패키지 업데이트
# 패키지 삭제
brew uninstall 패키지명
# 설치된 패키지 목록
brew list
# 패키지 정보 확인
brew info 패키지명
# 오래된 버전 정리
brew cleanup
Cask (GUI 앱 설치):
# GUI 애플리케이션 설치
brew install --cask visual-studio-code
brew install --cask google-chrome
brew install --cask docker
4단계: iTerm2 설치
기본 터미널보다 훨씬 강력한 기능을 제공한다.
설치
brew install --cask iterm2
추천 설정
1. 색상 테마 설정
Preferences → Profiles → Colors → Color Presets에서 테마 선택.
추천 테마:
- Solarized Dark
- Dracula
- One Dark
- Nord 2. 폰트 설정 개발자용 폰트 설치:
# 실행 예제
brew tap homebrew/cask-fonts
brew install --cask font-fira-code
brew install --cask font-jetbrains-mono
brew install --cask font-hack-nerd-font
Preferences → Profiles → Text → Font에서 설치한 폰트 선택.
3. 단축키 설정
Preferences → Keys → Hotkey에서 전역 단축키 설정 (예: ⌥Space).
4. Split Panes (화면 분할)
- 수평 분할:
⌘D - 수직 분할:
⌘⇧D - 패널 이동:
⌘⌥ 방향키5. Natural Text EditingPreferences → Profiles → Keys → Key Mappings → Presets → Natural Text Editing선택. 이제⌥←,⌥→로 단어 단위 이동이 가능하다.
5단계: Zsh 및 Oh My Zsh 설정
macOS Catalina(10.15)부터 Zsh가 기본 셸이다.
Oh My Zsh 설치
Zsh를 더 편리하게 사용할 수 있는 프레임워크다.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
추천 플러그인
~/.zshrc 파일을 열어 플러그인을 추가한다.
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
docker
kubectl
npm
node
python
vscode
)
플러그인 설치:
# zsh-autosuggestions (명령어 자동 완성)
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# zsh-syntax-highlighting (명령어 구문 강조)
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
Powerlevel10k 테마 (선택)
더 예쁘고 정보가 많은 프롬프트를 원한다면:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
~/.zshrc에서 테마 변경:
ZSH_THEME="powerlevel10k/powerlevel10k"
터미널 재시작 후 설정 마법사가 실행된다.
유용한 Alias 추가
~/.zshrc 파일에 추가:
# 자주 쓰는 명령어 단축
alias ll='ls -lah'
alias la='ls -A'
alias l='ls -CF'
# Git 단축
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline --graph --all'
# 디렉토리 이동
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
# 개발 서버
alias dev='npm run dev'
alias build='npm run build'
# Docker
alias dps='docker ps'
alias dimg='docker images'
alias dstop='docker stop $(docker ps -q)'
# 네트워크
alias myip='curl ifconfig.me'
alias ports='lsof -i -P -n | grep LISTEN'
# 파일 검색
alias f='find . -name'
# 프로세스
alias psg='ps aux | grep'
변경사항 적용:
source ~/.zshrc
6단계: 개발 언어 및 런타임 설치
Node.js (nvm 사용 권장)
여러 Node.js 버전을 관리할 수 있다.
# nvm 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# ~/.zshrc에 자동으로 추가됨
source ~/.zshrc
# 최신 LTS 버전 설치
nvm install --lts
# 설치 확인
node --version
npm --version
# 특정 버전 설치
nvm install 18
nvm install 20
# 버전 전환
nvm use 20
# 기본 버전 설정
nvm alias default 20
전역 패키지 설치:
npm install -g yarn pnpm typescript ts-node
npm install -g eslint prettier
npm install -g nodemon pm2
Python (pyenv 사용 권장)
# pyenv 설치
brew install pyenv
# ~/.zshrc에 추가
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init --path)"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
# Python 설치
pyenv install 3.12.0
pyenv global 3.12.0
# 설치 확인
python --version
pip --version
필수 패키지:
pip install --upgrade pip
pip install virtualenv pipenv poetry
pip install black flake8 mypy
pip install requests numpy pandas
Ruby (rbenv 사용 권장)
brew install rbenv
# ~/.zshrc에 추가
echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc
source ~/.zshrc
# Ruby 설치
rbenv install 3.3.0
rbenv global 3.3.0
ruby --version
Go
brew install go
# ~/.zshrc에 추가
echo 'export GOPATH=$HOME/go' >> ~/.zshrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.zshrc
source ~/.zshrc
go version
Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# ~/.zshrc에 자동으로 추가됨
source ~/.zshrc
rustc --version
cargo --version
Java (SDKMAN 사용 권장)
# SDKMAN 설치
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# Java 설치
sdk install java
# 특정 버전 설치
sdk install java 17.0.9-tem
sdk install java 21.0.1-tem
# 버전 전환
sdk use java 21.0.1-tem
java --version
7단계: Git 설정
Git 사용자 정보 설정
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
기본 브랜치명 변경
git config --global init.defaultBranch main
에디터 설정
# VS Code를 기본 에디터로
git config --global core.editor "code --wait"
# Vim을 기본 에디터로
git config --global core.editor "vim"
유용한 Git 설정
# 색상 활성화
git config --global color.ui auto
# 자동 줄바꿈 처리
git config --global core.autocrlf input
# 대소문자 구분
git config --global core.ignorecase false
# Pull 전략 (rebase)
git config --global pull.rebase true
# 기본 push 동작
git config --global push.default current
# Diff 도구
git config --global diff.tool vscode
git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'
# Merge 도구
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd 'code --wait $MERGED'
SSH 키 생성 (GitHub/GitLab용)
# SSH 키 생성
ssh-keygen -t ed25519 -C "[email protected]"
# SSH 에이전트 시작
eval "$(ssh-agent -s)"
# SSH 키 추가
ssh-add ~/.ssh/id_ed25519
# 공개 키 복사 (GitHub에 등록)
pbcopy < ~/.ssh/id_ed25519.pub
GitHub → Settings → SSH and GPG keys → New SSH key에 붙여넣는다. 연결 테스트:
ssh -T [email protected]
# 출력: Hi username! You've successfully authenticated...
GPG 서명 설정 (선택)
커밋에 서명을 추가하면 “Verified” 배지가 표시된다.
# GPG 설치
brew install gnupg
# GPG 키 생성
gpg --full-generate-key
# 키 ID 확인
gpg --list-secret-keys --keyid-format=long
# Git에 GPG 키 등록
git config --global user.signingkey YOUR_KEY_ID
# 모든 커밋에 서명
git config --global commit.gpgsign true
# GPG 공개 키 내보내기
gpg --armor --export YOUR_KEY_ID | pbcopy
GitHub → Settings → SSH and GPG keys → New GPG key에 붙여넣는다.
8단계: 필수 개발 도구 설치
에디터 & IDE
# Visual Studio Code
brew install --cask visual-studio-code
# JetBrains Toolbox (IntelliJ, PyCharm 등)
brew install --cask jetbrains-toolbox
# Sublime Text
brew install --cask sublime-text
# Vim (최신 버전)
brew install vim
# Neovim
brew install neovim
VS Code 필수 확장:
# 터미널에서 VS Code 실행 가능하게
code --install-extension ms-vscode.vscode-typescript-next
code --install-extension dbaeumer.vscode-eslint
code --install-extension esbenp.prettier-vscode
code --install-extension eamodio.gitlens
데이터베이스 도구
# PostgreSQL
brew install postgresql@16
brew services start postgresql@16
# MySQL
brew install mysql
brew services start mysql
# Redis
brew install redis
brew services start redis
# MongoDB
brew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-community
# GUI 도구
brew install --cask tableplus
brew install --cask dbeaver-community
Docker
# 실행 예제
brew install --cask docker
# Docker 실행 후 터미널에서 확인
docker --version
docker-compose --version
Docker 자동 시작 설정: Docker Desktop → Preferences → General → “Start Docker Desktop when you log in” 체크.
API 테스트 도구
# Postman
brew install --cask postman
# Insomnia
brew install --cask insomnia
# HTTPie (CLI)
brew install httpie
버전 관리 GUI
# GitKraken
brew install --cask gitkraken
# Sourcetree
brew install --cask sourcetree
# GitHub Desktop
brew install --cask github
9단계: 터미널 유틸리티
필수 CLI 도구
# 현대적인 Unix 도구
brew install bat # cat 대체 (구문 강조)
brew install exa # ls 대체 (색상, 아이콘)
brew install ripgrep # grep 대체 (빠른 검색)
brew install fd # find 대체
brew install fzf # 퍼지 파인더
brew install tldr # man 대체 (간단한 예제)
brew install tree # 디렉토리 구조 표시
brew install htop # top 대체 (시스템 모니터)
brew install ncdu # du 대체 (디스크 사용량)
brew install jq # JSON 파싱
brew install yq # YAML 파싱
Alias 추가 (~/.zshrc):
alias cat='bat'
alias ls='exa --icons'
alias ll='exa -lah --icons'
alias grep='rg'
alias find='fd'
Git 관련 도구
# Git 확장 도구
brew install git-delta # 더 예쁜 diff
brew install gh # GitHub CLI
brew install glab # GitLab CLI
brew install tig # Git TUI
# Git 설정에 delta 추가
git config --global core.pager delta
git config --global interactive.diffFilter 'delta --color-only'
git config --global delta.navigate true
git config --global delta.side-by-side true
GitHub CLI 사용:
# GitHub 로그인
gh auth login
# PR 생성
gh pr create
# Issue 생성
gh issue create
# Repo 클론
gh repo clone username/repo
클라우드 CLI
# AWS CLI
brew install awscli
# Google Cloud SDK
brew install --cask google-cloud-sdk
# Azure CLI
brew install azure-cli
# Terraform
brew install terraform
# kubectl (Kubernetes)
brew install kubectl
10단계: 생산성 도구
윈도우 관리
# Rectangle (무료, 오픈소스)
brew install --cask rectangle
# Magnet (유료, App Store)
# 단축키로 창 크기/위치 조정
Rectangle 추천 단축키:
- 왼쪽 절반:
⌃⌥← - 오른쪽 절반:
⌃⌥→ - 최대화:
⌃⌥↵ - 중앙 정렬:
⌃⌥C
클립보드 관리
# Maccy (무료, 오픈소스)
brew install --cask maccy
# Alfred (유료, 강력한 기능)
brew install --cask alfred
스크린샷 & 화면 녹화
# CleanShot X (유료, 추천)
# Kap (무료, GIF 녹화)
brew install --cask kap
메뉴바 정리
# Hidden Bar (무료)
brew install --cask hiddenbar
# Bartender (유료)
brew install --cask bartender
시스템 모니터링
# iStat Menus (유료, 추천)
# Stats (무료, 오픈소스)
brew install --cask stats
11단계: 개발 환경별 추가 설정
웹 개발
# 브라우저
brew install --cask google-chrome
brew install --cask firefox
brew install --cask brave-browser
# 로컬 개발 서버
brew install nginx
# 데이터베이스 GUI
brew install --cask sequel-ace # MySQL
모바일 개발
iOS:
# Xcode (App Store에서 설치)
# CocoaPods
sudo gem install cocoapods
Android:
# Android Studio
brew install --cask android-studio
# Android SDK 도구
brew install --cask android-platform-tools
React Native:
npm install -g react-native-cli
brew install watchman
데이터 과학
# Jupyter
pip install jupyter notebook jupyterlab
# Anaconda
brew install --cask anaconda
DevOps
# Kubernetes 도구
brew install kubectl kubectx k9s helm
# Terraform
brew install terraform
# Ansible
pip install ansible
# Monitoring
brew install --cask datadog-agent
12단계: 성능 최적화
Spotlight 인덱싱 제외
개발 폴더를 Spotlight 검색에서 제외하면 CPU 사용량이 줄어든다.
System Preferences → Siri & Spotlight → Spotlight Privacy에서 추가:
~/node_modules~/venv~/.pyenv~/.nvm
불필요한 애니메이션 비활성화
# Dock 애니메이션 끄기
defaults write com.apple.dock launchanim -bool false
# 창 열기/닫기 애니메이션 끄기
defaults write NSGlobalDomain NSAutomaticWindowAnimationsEnabled -bool false
# Mission Control 애니메이션 빠르게
defaults write com.apple.dock expose-animation-duration -float 0.1
killall Dock
메모리 관리
# 메모리 정리 (주기적으로 실행)
sudo purge
# 스왑 사용량 확인
sysctl vm.swapusage
Rosetta 2 (Apple Silicon 전용)
일부 x86 앱을 실행하려면 Rosetta 2가 필요하다.
softwareupdate --install-rosetta --agree-to-license
13단계: 보안 설정
방화벽 활성화
System Preferences → Security & Privacy → Firewall → Turn On Firewall
FileVault 암호화
System Preferences → Security & Privacy → FileVault → Turn On FileVault
디스크 전체를 암호화하여 분실 시 데이터 보호.
SSH 보안
~/.ssh/config 파일 생성:
# 실행 예제
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
권한 설정:
chmod 600 ~/.ssh/config
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
환경 변수 관리
민감한 정보는 환경 변수로 관리한다.
~/.zshrc에 추가:
# API 키 (예시)
export OPENAI_API_KEY="your-key-here"
export AWS_ACCESS_KEY_ID="your-key-here"
export AWS_SECRET_ACCESS_KEY="your-secret-here"
# 또는 별도 파일로 분리
if [ -f ~/.env ]; then
source ~/.env
fi
.env 파일은 .gitignore에 추가한다.
14단계: 백업 설정
Time Machine
외장 하드나 NAS를 연결하여 자동 백업 설정.
System Preferences → Time Machine → Select Backup Disk
클라우드 백업
# Mackup (설정 파일 백업)
brew install mackup
# ~/.mackup.cfg 생성
cat > ~/.mackup.cfg << 'EOF'
[storage]
engine = icloud
[applications_to_sync]
vscode
iterm2
git
ssh
EOF
# 백업
mackup backup
# 복원 (새 맥에서)
mackup restore
Dotfiles 관리
설정 파일을 Git으로 관리한다.
mkdir ~/dotfiles
cd ~/dotfiles
# 설정 파일 이동
mv ~/.zshrc ~/dotfiles/zshrc
mv ~/.gitconfig ~/dotfiles/gitconfig
mv ~/.vimrc ~/dotfiles/vimrc
# 심볼릭 링크 생성
ln -s ~/dotfiles/zshrc ~/.zshrc
ln -s ~/dotfiles/gitconfig ~/.gitconfig
ln -s ~/dotfiles/vimrc ~/.vimrc
# Git 저장소 초기화
git init
git add .
git commit -m "Initial dotfiles"
git remote add origin [email protected]:username/dotfiles.git
git push -u origin main
새 맥에서 복원:
git clone [email protected]:username/dotfiles.git ~/dotfiles
cd ~/dotfiles
./install.sh # 심볼릭 링크 생성 스크립트
15단계: 추천 앱
개발 도구
| 앱 | 용도 | 가격 |
|---|---|---|
| VS Code | 코드 에디터 | 무료 |
| iTerm2 | 터미널 | 무료 |
| Docker Desktop | 컨테이너 | 무료 |
| Postman | API 테스트 | 무료 |
| TablePlus | 데이터베이스 GUI | 유료 |
| Fork | Git GUI | 유료 |
생산성
| 앱 | 용도 | 가격 |
|---|---|---|
| Rectangle | 윈도우 관리 | 무료 |
| Maccy | 클립보드 관리 | 무료 |
| Alfred | 런처 | 유료 |
| Notion | 노트 | 무료 |
| Obsidian | 마크다운 노트 | 무료 |
유틸리티
| 앱 | 용도 | 가격 |
|---|---|---|
| Stats | 시스템 모니터 | 무료 |
| Kap | 화면 녹화 | 무료 |
| The Unarchiver | 압축 해제 | 무료 |
| Transmission | 토렌트 | 무료 |
16단계: 자동화 스크립트
전체 설치 스크립트
setup.sh 파일 생성:
#!/bin/bash
echo "🚀 macOS 개발 환경 설정 시작..."
# Xcode Command Line Tools
if ! xcode-select -p &> /dev/null; then
echo "📦 Xcode Command Line Tools 설치 중..."
xcode-select --install
read -p "설치 완료 후 Enter를 누르세요..."
fi
# 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
# 기본 도구
echo "🔧 기본 도구 설치 중..."
brew install git curl wget
brew install bat exa ripgrep fd fzf tree htop
brew install jq yq
# 개발 언어
echo "💻 개발 언어 설치 중..."
brew install nvm pyenv rbenv go rust
# 앱
echo "📱 애플리케이션 설치 중..."
brew install --cask visual-studio-code
brew install --cask iterm2
brew install --cask docker
brew install --cask rectangle
brew install --cask maccy
# Oh My Zsh
if [ ! -d "$HOME/.oh-my-zsh" ]; then
echo "🎨 Oh My Zsh 설치 중..."
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
fi
# 플러그인
echo "🔌 Zsh 플러그인 설치 중..."
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions 2>/dev/null
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting 2>/dev/null
echo "✅ 설치 완료!"
echo "📝 ~/.zshrc를 편집하여 플러그인을 활성화하세요."
echo "🔄 터미널을 재시작하세요."
실행:
chmod +x setup.sh
./setup.sh
Brewfile로 관리
설치된 패키지를 파일로 저장하여 다른 맥에서 재현할 수 있다.
# 현재 설치된 패키지 목록 저장
brew bundle dump --file=~/Brewfile
# 다른 맥에서 복원
brew bundle --file=~/Brewfile
Brewfile 예시:
# Brewfile
tap "homebrew/cask-fonts"
# CLI 도구
brew "git"
brew "node"
brew "python"
brew "go"
brew "rust"
brew "bat"
brew "exa"
brew "ripgrep"
brew "fzf"
# GUI 앱
cask "visual-studio-code"
cask "iterm2"
cask "docker"
cask "rectangle"
cask "google-chrome"
# 폰트
cask "font-fira-code"
cask "font-jetbrains-mono"
17단계: 문제 해결
Homebrew 권한 오류
# Homebrew 디렉토리 소유권 변경
sudo chown -R $(whoami) /usr/local/Cellar /usr/local/Homebrew
# Apple Silicon
sudo chown -R $(whoami) /opt/homebrew
Python 버전 충돌
# 시스템 Python 사용 안 함
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)"; fi' >> ~/.zshrc
Node.js 권한 오류
# npm 전역 패키지 권한 문제 해결
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
포트 충돌
# 특정 포트를 사용하는 프로세스 찾기
lsof -i :3000
# 프로세스 종료
kill -9 PID
Xcode Command Line Tools 재설치
sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install
체크리스트
기본 설정:
- Xcode Command Line Tools 설치
- Homebrew 설치
- iTerm2 설치 및 설정
- Oh My Zsh 설치
- Git 사용자 정보 설정
- SSH 키 생성 및 GitHub 등록 개발 도구:
- 주 언어 런타임 설치 (Node.js, Python 등)
- 에디터/IDE 설치 (VS Code, IntelliJ 등)
- Docker 설치
- 데이터베이스 설치
- API 테스트 도구 설치 생산성:
- 윈도우 관리 도구 (Rectangle)
- 클립보드 관리 도구 (Maccy)
- 시스템 모니터 (Stats)
- 유용한 CLI 도구 (bat, exa, ripgrep 등) 백업:
- Time Machine 설정
- Dotfiles Git 저장소 생성
- Brewfile 생성
자주 묻는 질문
Q. Homebrew 설치 위치가 다른 이유는?
Intel 맥은 /usr/local, Apple Silicon 맥은 /opt/homebrew에 설치된다. 아키텍처 차이 때문이다.
Q. Oh My Zsh 없이 Zsh만 써도 되나?
가능하다. 하지만 Oh My Zsh는 플러그인, 테마, 설정을 쉽게 관리할 수 있어서 초보자에게 추천한다.
Q. nvm, pyenv를 꼭 써야 하나?
프로젝트마다 다른 버전이 필요한 경우가 많다. 버전 관리자를 쓰면 쉽게 전환할 수 있다.
Q. Rosetta 2는 언제 필요한가?
Apple Silicon 맥에서 Intel 전용 앱을 실행할 때 필요하다. Docker, 일부 Node 네이티브 모듈 등.
Q. 맥북 성능이 느려졌다면?
Spotlight 인덱싱, Chrome 탭, Docker 컨테이너, Node 프로세스를 확인한다. Activity Monitor에서 CPU/메모리 사용량을 체크한다.
Q. 새 맥으로 환경을 옮기려면?
Brewfile, Dotfiles, Mackup을 사용하면 대부분 자동화할 수 있다. Time Machine으로 전체 복원도 가능하다.
다음 단계
- Shell 스크립팅 실전 가이드
- Docker & Kubernetes 입문 가이드
- Git 완벽 가이드
참고 자료
- Homebrew 공식 문서
- Oh My Zsh GitHub
- iTerm2 공식 사이트
- macOS Setup Guide
- Awesome Mac macOS 개발 환경 설정은 한 번만 제대로 해두면 생산성이 크게 향상된다. 위 가이드를 따라하면 30분 안에 완성도 높은 개발 환경을 구축할 수 있다.
심화 부록: 구현·운영 관점
이 부록은 앞선 본문에서 다룬 주제(「macOS 개발 환경 설정 가이드 | 필수 도구와 최적화」)를 구현·런타임·운영 관점에서 다시 압축합니다. 도메인별 세부 구현은 글마다 다르지만, 입력 검증 → 핵심 연산 → 부작용(I/O·네트워크·동시성) → 관측의 흐름으로 장애를 나누면 원인 추적이 빨라집니다.
내부 동작과 핵심 메커니즘
flowchart TD A[입력·요청·이벤트] --> B[파싱·검증·디코딩] B --> C[핵심 연산·상태 전이] C --> D[부작용: I/O·네트워크·동시성] D --> E[결과·관측·저장]
sequenceDiagram participant C as 클라이언트/호출자 participant B as 경계(런타임·게이트웨이·프로세스) participant D as 의존성(API·DB·큐·파일) C->>B: 요청/이벤트 B->>D: 조회·쓰기·RPC D-->>B: 지연·부분 실패·재시도 가능 B-->>C: 응답 또는 오류(코드·상관 ID)
- 불변 조건(Invariant): 버퍼 경계, 프로토콜 상태, 트랜잭션 격리, FD 상한 등 단계별로 문장으로 적어 두면 디버깅 비용이 줄어듭니다.
- 결정성: 순수 층과 시간·네트워크·스케줄에 의존하는 층을 분리해야 테스트와 장애 분석이 쉬워집니다.
- 경계 비용: 직렬화, 인코딩, syscall 횟수, 락 경합, 할당·GC, 캐시 미스를 의심 목록에 둡니다.
- 백프레셔: 생산자가 소비자보다 빠를 때 버퍼·큐·스트림에서 속도를 줄이는 신호를 어디에 둘지 정의합니다.
프로덕션 운영 패턴
| 영역 | 운영 관점 질문 |
|---|---|
| 관측성 | 요청 단위 상관 ID, 에러율·지연 p95/p99, 의존성 타임아웃·재시도가 대시보드에 보이는가 |
| 안전성 | 입력 검증·권한·비밀·감사 로그가 코드 경로마다 일관적인가 |
| 신뢰성 | 재시도는 멱등 연산에만 적용되는가, 서킷 브레이커·백오프·DLQ가 있는가 |
| 성능 | 캐시·배치 크기·커넥션 풀·인덱스·백프레셔가 데이터 규모에 맞는가 |
| 배포 | 롤백 룬북, 카나리/블루그린, 마이그레이션·피처 플래그가 문서화되어 있는가 |
| 용량 | 피크 트래픽·디스크·FD·스레드 풀 상한을 주기적으로 검증하는가 |
스테이징은 데이터 양·네트워크 RTT·동시성을 프로덕션에 가깝게 맞출수록 재현율이 올라갑니다.
확장 예시: 엔드투엔드 미니 시나리오
앞선 본문 주제(「macOS 개발 환경 설정 가이드 | 필수 도구와 최적화」)를 배포·운영 흐름에 맞춰 옮긴 체크리스트입니다. 도메인에 맞게 단계 이름만 바꿔 적용할 수 있습니다.
- 입력 계약 고정: 스키마·버전·최대 페이로드·타임아웃·에러 코드를 경계에 둔다.
- 핵심 경로 계측: 요청 ID, 단계별 지연, 외부 호출 결과 코드를 로그·메트릭·트레이스에서 한 흐름으로 본다.
- 실패 주입: 의존성 타임아웃·5xx·부분 데이터·락 대기를 스테이징에서 재현한다.
- 호환·롤백: 설정/마이그레이션/클라이언트 버전을 되돌릴 수 있는지 확인한다.
- 부하 후 검증: 피크 대비 p95/p99, 에러율, 리소스 상한, 알림 임계값을 점검한다.
handle(request):
ctx = newCorrelationId()
validated = validateSchema(request)
authorize(validated, ctx)
result = domainCore(validated)
persistOrEmit(result, idempotentKey)
recordMetrics(ctx, latency, outcome)
return result
문제 해결(Troubleshooting)
| 증상 | 가능 원인 | 조치 |
|---|---|---|
| 간헐적 실패 | 레이스, 타임아웃, 외부 의존성, DNS | 최소 재현 스크립트, 분산 트레이스·로그 상관관계, 재시도·서킷 설정 점검 |
| 성능 저하 | N+1, 동기 I/O, 락 경합, 과도한 직렬화, 캐시 미스 | 프로파일러·APM으로 핫스팟 확인 후 한 가지씩 제거 |
| 메모리 증가 | 캐시 무제한, 구독/리스너 누수, 대용량 버퍼, 커넥션 미반납 | 상한·TTL·힙/FD 스냅샷 비교 |
| 빌드·배포만 실패 | 환경 변수, 권한, 플랫폼 차이, lockfile | CI 로그와 로컬 diff, 런타임·이미지 버전 핀 |
| 설정 불일치 | 프로필·시크릿·기본값, 리전 | 스키마 검증된 설정 단일 소스와 배포 매트릭스 표준화 |
| 데이터 불일치 | 비멱등 재시도, 부분 쓰기, 캐시 무효화 누락 | 멱등 키·아웃박스·트랜잭션 경계 재검토 |
권장 순서: (1) 최소 재현 (2) 최근 변경 범위 축소 (3) 환경·의존성 차이 (4) 관측으로 가설 검증 (5) 수정 후 회귀·부하 테스트.
배포 전에는 git add → git commit → git push 후 npm run deploy 순서를 권장합니다.
같이 보면 좋은 글 (내부 링크)
이 주제와 연결되는 다른 글입니다.
- [C++ this Pointer: Chaining, const Methods, Lambdas, and CRTP](/en/blog/cpp-this-pointer/
- Shell 스크립팅 실전 가이드 | Bash, Zsh, PowerShell 비교
- [Hash Table | O(1) Search Data Structure Complete Guide](/en/blog/algorithm-series-03-hash-table/
- [TCP: Complete Guide | Handshake· Flow & Congestion Control](/en/blog/network-protocol-tcp-practical-guide/
- [C++ Junior Developer Interview](/en/blog/cpp-interview-03-junior-developer/
이 글에서 다루는 키워드 (관련 검색어)
macOS, Homebrew, iTerm2, Zsh, Terminal, 개발환경, 맥, 개발자도구 등으로 검색하시면 이 글이 도움이 됩니다.