본문으로 건너뛰기
Previous
Next
macOS 개발 환경 설정 가이드 | 필수 도구와 최적화

macOS 개발 환경 설정 가이드 | 필수 도구와 최적화

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 Editing Preferences → 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컨테이너무료
PostmanAPI 테스트무료
TablePlus데이터베이스 GUI유료
ForkGit 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으로 전체 복원도 가능하다.

다음 단계

참고 자료

심화 부록: 구현·운영 관점

이 부록은 앞선 본문에서 다룬 주제(「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 개발 환경 설정 가이드 | 필수 도구와 최적화」)를 배포·운영 흐름에 맞춰 옮긴 체크리스트입니다. 도메인에 맞게 단계 이름만 바꿔 적용할 수 있습니다.

  1. 입력 계약 고정: 스키마·버전·최대 페이로드·타임아웃·에러 코드를 경계에 둔다.
  2. 핵심 경로 계측: 요청 ID, 단계별 지연, 외부 호출 결과 코드를 로그·메트릭·트레이스에서 한 흐름으로 본다.
  3. 실패 주입: 의존성 타임아웃·5xx·부분 데이터·락 대기를 스테이징에서 재현한다.
  4. 호환·롤백: 설정/마이그레이션/클라이언트 버전을 되돌릴 수 있는지 확인한다.
  5. 부하 후 검증: 피크 대비 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 스냅샷 비교
빌드·배포만 실패환경 변수, 권한, 플랫폼 차이, lockfileCI 로그와 로컬 diff, 런타임·이미지 버전 핀
설정 불일치프로필·시크릿·기본값, 리전스키마 검증된 설정 단일 소스와 배포 매트릭스 표준화
데이터 불일치비멱등 재시도, 부분 쓰기, 캐시 무효화 누락멱등 키·아웃박스·트랜잭션 경계 재검토

권장 순서: (1) 최소 재현 (2) 최근 변경 범위 축소 (3) 환경·의존성 차이 (4) 관측으로 가설 검증 (5) 수정 후 회귀·부하 테스트.

배포 전에는 git addgit commitgit pushnpm 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, 개발환경, , 개발자도구 등으로 검색하시면 이 글이 도움이 됩니다.