macOS는 Unix 기반 운영체제로 강력한 터미널 환경을 제공한다. Homebrew 패키지 관리자와 함께 개발자를 위한 시스템 관���, 자동화, 보안 설정 방법을 정리한다.

1. Homebrew 고급 활용

Homebrew는 macOS의 사실상 표준 패키지 관리자다.

# Homebrew 설치 (미설치 시)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 패키지 관리 기본
brew install node python git       # 패키지 설치
brew install --cask visual-studio-code  # GUI 앱 설치
brew upgrade                       # 모든 패키지 업데이트
brew cleanup                       # 이전 버전 정리

# 유용한 명령어
brew list                          # 설치된 패키지 목록
brew info node                     # 패키지 정보
brew deps --tree node              # 의존성 트리
brew leaves                        # 최상위 패키지만 (의존성 제외)

# Brewfile로 환경 일괄 관리
brew bundle dump --file=~/Brewfile  # 현재 ��경 내보내기
brew bundle --file=~/Brewfile       # 환경 복원

# Brewfile 예시
# tap "homebrew/cask-fonts"
# brew "git"
# brew "node"
# brew "python@3.12"
# brew "jq"
# brew "ripgrep"
# cask "iterm2"
# cask "visual-studio-code"
# cask "docker"

2. 개발자 필수 CLI 도구

# 모던 CLI 도구 설치
brew install ripgrep    # grep 대체 (rg) - 10배 빠름
brew install fd         # find 대체 - 직관적 문법
brew install bat        # cat 대체 - 구문 강조
brew install eza        # ls 대체 - 아이콘, Git 상태
brew install fzf        # 퍼지 파인더
brew install jq         # JSON 처리
brew install httpie     # curl 대체 - 직관적 HTTP
brew install tldr       # man 대체 - 실용적 예제
brew install zoxide     # cd 대체 - 스마트 디렉토리 이동

# ripgrep 활용
rg "TODO" --type py              # Python 파일에서 TODO 검색
rg "function" -l                 # 매칭 파일명만 출력
rg "import.*react" -g "*.tsx"    # glob 패턴으로 파일 필터

# fd 활용
fd "*.json" --max-depth 3        # JSON 파일 찾기
fd -e py --exec wc -l            # Python 파일별 라인 수
fd -H ".env"                     # 숨김 파일 포함 검색

# bat 활용
bat src/main.py                  # 구문 강조 출력
bat -d src/main.py               # diff 모드
bat --style=numbers,grid file.js # 스타일 지정

# jq 활용
cat data.json | jq '.users[] | .name'  # 사용자 이름 추출
curl -s https://api.example.com | jq '.data | length'  # API 응답 처리
echo '{"a":1}' | jq '. + {"b":2}'   # JSON 수정

3. 쉘 설정 최적화 (Zsh)

# .zshrc 설정

# Oh My Zsh 설치
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# 유용한 alias 설정
alias ll='eza -la --git --icons'
alias cat='bat --paging=never'
alias find='fd'
alias grep='rg'
alias top='htop'

# Git alias
alias gs='git status'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline --graph -20'
alias gd='git diff'

# Docker alias
alias dc='docker compose'
alias dps='docker ps --format "table {{.Names}}	{{.Status}}	{{.Ports}}"'

# 디렉토리 이동
alias ..='cd ..'
alias ...='cd ../..'
alias proj='cd ~/projects'

# PATH 설정
export PATH="/opt/homebrew/bin:/Users/daeilsun/.local/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/daeilsun/.claude/plugins/cache/claude-plugins-official/telegram/0.0.4/bin"
export PATH="/Users/daeilsun/.local/bin:/Users/daeilsun/.local/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/daeilsun/.claude/plugins/cache/claude-plugins-official/telegram/0.0.4/bin"

# fzf 설정
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow'
export FZF_CTRL_T_COMMAND=""

# zoxide 초기화
eval "$(zoxide init zsh)"
# z projects  # ~/projects로 바로 이동 (학습 기반)

4. LaunchAgent/LaunchDaemon (자동화)

macOS에서 스케줄 작업을 설정하는 방법이다. crontab보다 LaunchAgent를 권장한다.

# ~/Library/LaunchAgents/com.myapp.backup.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.myapp.backup</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>/Users/me/scripts/backup.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>3</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
    <key>StandardOutPath</key>
    <string>/tmp/backup.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/backup.error.log</string>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>

# LaunchAgent 관리 명령어
launchctl load ~/Library/LaunchAgents/com.myapp.backup.plist
launchctl unload ~/Library/LaunchAgents/com.myapp.backup.plist
launchctl list | grep myapp
launchctl start com.myapp.backup  # 수동 실행

5. 시스템 관리 명령어

# 디스크 관리
diskutil list                      # 디스크 목록
diskutil info /dev/disk0s1         # 디스크 정보
diskutil eraseDisk APFS MyDisk /dev/disk2  # 디스크 포맷

# 네트워크 관리
networksetup -listallhardwareports  # 네트워크 인터페이스 목록
networksetup -getinfo Wi-Fi         # Wi-Fi 정보
scutil --dns                        # DNS 설정 확인
sudo dscacheutil -flushcache        # DNS 캐시 초기화

# 프로세스 관리
lsof -i :8080                      # 포트 사용 프로세스 확인
kill -9 478        # 포트 점유 프로세스 종료
caffeinate -t 3600                  # 1시간 동안 잠자기 방지

# 시���템 정보
system_profiler SPHardwareDataType   # 하드웨어 정보
sw_vers                              # macOS 버전
sysctl -n machdep.cpu.brand_string   # CPU 정보
sysctl -n hw.memsize | awk '{print /bin/zsh/1073741824"GB"}'  # 메모리

# Spotlight 관리
mdutil -s /                          # 인덱싱 상태
sudo mdutil -i off /Volumes/Data     # 특정 볼륨 인덱싱 끄기

# 보안 관련
sudo spctl --master-enable           # Gatekeeper 활성화
xattr -d com.apple.quarantine app.zip  # 격리 속성 제거
codesign -dv --verbose=4 /path/to/app  # 코드 서명 확인

6. SSH 설정 관리

# ~/.ssh/config
Host prod-server
    HostName 10.0.1.100
    User deploy
    Port 2222
    IdentityFile ~/.ssh/prod_key
    ServerAliveInterval 60

Host dev-*
    User developer
    IdentityFile ~/.ssh/dev_key
    ProxyJump bastion

Host bastion
    HostName bastion.example.com
    User admin
    IdentityFile ~/.ssh/bastion_key

# SSH 키 생성
ssh-keygen -t ed25519 -C "dev@example.com" -f ~/.ssh/dev_key

# SSH 에이전트에 키 추가 (Keychain 연동)
ssh-add --apple-use-keychain ~/.ssh/dev_key

# 접속
ssh prod-server     # 별칭으로 바로 접속
ssh dev-web01       # dev-* 패턴 매칭

macOS는 개발자에게 Unix의 강력함과 GUI의 편의성을 동시에 제공한다. Homebrew로 도구를 관리하고, ��던 CLI 도구로 생산성을 높이며, LaunchAgent로 자동화를 구축하면 효율적인 개발 환경을 만들 수 있다.