개발자 Macbook 종합 세팅
내가 보기 위해 쓰는, 맥북을 새로 받거나 포맷하는 경우 빠른 세팅을 위한 종합 세팅 모음 (2026년 버전)
- macos
- settings
개요
2026년 버전 개발자 Macbook 종합 세팅, 대부분의 설정은 dotfiles 저장소에 들어있으나 세부적인 것을 정리하기 위해 작성했다.
해당 저장소 README에 나와있듯이 몇 가지 선행 조건을 만족한 뒤 다음 스크립트로 대부분의 설정을 적용할 수 있다.
brew install chezmoi
chezmoi init --apply https://github.com/rhseung/dotfiles.git
brew bundle --file ~/.local/share/chezmoi/Brewfile
자동화 되지 않은 것들은 다음과 같다.
- Mise, uv, Bun은 각자 설치 스크립트로 깐다. Homebrew로 깔면
mise self-update,uv self update,bun upgrade가 막혀서 Brewfile에 안 넣었다. - 직접 받는 것들: Raycast, 교내 배포처의 오피스류, 유료 폰트 MonoLisa, Setapp 안에서 받는 앱들, 한국 서버 League of Legends.
- GUI로만 되는 macOS 설정
시스템 설정
컴퓨터 이름
터미널 프롬프트에서 @ 뒤에 붙는 그 이름이다. 시스템 설정 > 일반 > 정보에서 바꿔도 프롬프트는 그대로인 경우가 많은데, macOS가 이름을 셋으로 나눠 들고 있어서다.
| 이름 | 어디에 쓰이나 | GUI 로 바꾸는 곳 |
|---|---|---|
ComputerName | Finder 공유 목록, 시스템 설정에 보이는 이름 | 일반 > 정보 > 이름 |
LocalHostName | Bonjour 이름. 같은 네트워크에서 .local로 부를 때 | 일반 > 공유 > 로컬 호스트 이름 > 편집 |
HostName | 셸 프롬프트의 @ 뒤 | 없음 |
앞의 둘은 GUI 로 된다 - 각자 다른 화면에 떨어져 있어서 정보만 보면 LocalHostName은 안 바뀐 것처럼 보일 뿐이다.
- 시스템 설정 > 일반 > 정보 > 이름에서
ComputerName을 바꾼다. - 시스템 설정 > 일반 > 공유로 들어가서, 하단
로컬 호스트 이름옆의 편집을 눌러LocalHostName을 바꾼다. 공백도 한글도 못 받으니 영문 소문자와 하이픈으로 짓는다.
HostName은 GUI 자체가 없다. 비워두면 프롬프트에 LocalHostName이 .local을 달고 나오는데, 그게 싫으면 그때만 터미널을 쓴다.
sudo scutil --set HostName "rhseung-macbook"
한/영 키 변경
Launch Agent와 Daemon은 macOS가 스스로 백그라운드 스크립트를 돌리는 방식이다. ~/Library/LaunchAgents(로그인한 나만, GUI 접근 가능)와 /Library/LaunchDaemons(로그인 전부터, 시스템 전체) 둘로 나뉜다.
오른쪽 cmd (HID 0x7000000E7)를 F18 (0x70000006D)로 보낸다.
아래 LaunchAgent부터 등록해서 매핑을 먼저 켜야 한다. 노트북 키보드엔 F18이 물리 키로 없어서, 오른쪽 cmd가 그 신호를 실제로 보내고 있어야만 다음 단계에서 단축키 녹화기가 F18을 잡을 수 있다.
<!-- ~/Library/LaunchAgents/local.hidutil.rcmd-to-f18.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>local.hidutil.rcmd-to-f18</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/hidutil</string>
<string>property</string>
<string>--set</string>
<string>{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000E7,"HIDKeyboardModifierMappingDst":0x70000006D}]}</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
hidutil로 키를 바로 리매핑할 수는 있지만 재부팅하면 풀린다. LaunchAgent에 RunAtLoad로 걸어두면 로그인할 때마다 다시 걸린다.
이후 아래 스크립트를 실행한다.
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/local.hidutil.rcmd-to-f18.plist
# check
hidutil property --get UserKeyMapping
매핑이 걸렸으면 시스템 설정 > 키보드 > 키보드 단축키 > 입력 소스로 들어가서 “이전 입력 소스 선택” 체크박스를 켜고 단축키를 Right cmd로 바꾸면 된다.
개발 환경 준비
macOS 업데이트와 칩 확인
먼저 macOS를 최신 상태로 업데이트한다.
softwareupdate --list
또한 현재 macOS 버전은 다음과 같이 확인할 수 있다.
sw_vers
Mac의 칩 종류는 아래 명령어로 확인한다.
uname -m
결과가 arm64 라면 Apple Silicon 계열이며, x86_64 이면 Intel Mac이다.
개발 폴더
저장소는 홈 아래 ~/Developer에 clone해서 쓴다. macOS가 몇몇 홈 폴더 이름을 예약어로 다뤄서 전용 아이콘을 자동으로 붙여주는데, Developer도 그중 하나다.
mkdir -p ~/Developer
Xcode Command Line Tools
clang 컴파일러와 SDK 헤더, 그리고 Homebrew 설치에 필요하여 먼저 Xcode Command Line Tools를 설치하는 것이 좋다.
xcode-select --install
# check
xcode-select -p
clang --version
Homebrew
가장 유명한 macOS 패키지 매니저이다.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
이후 터미널에 Next steps 항목이 나오는데, 그걸 따라 ~/.zshrc 같은 각 터미널 설정 파일에 넣어주면 된다.
mas
Mac App Store CLI. App Store 앱을 GUI 대신 CLI로 사용할 수 있어, Homebrew에 없는 앱들은 mas로 설치해주면 된다.
brew install mas
# check
mas version
mas search klack
mas install 6446206067
필수 앱
1Password를 먼저 설치한다. 뒤에 나오는 대부분이 로그인을 요구하기 때문이다.
1Password
비밀번호와 패스키, 2단계 인증 코드를 한 금고에 모아 기기 사이로 동기화해주는 관리 앱이다. SSH 키와 API 토큰까지 같은 금고에 넣어 Touch ID로 꺼내 쓸 수 있다.
brew install --cask 1password 1password-cli
1Password CLI까지 같이 깔면 셸 플러그인이 붙는다. gh나 aws처럼 토큰이 필요한 CLI를 Touch ID로 대신 인증해주고, git 커밋 서명은 SSH 에이전트가 금고의 키로 처리한다.
커밋 서명
금고에서 New Item > SSH Key 로 키를 만든다. ssh-keygen 으로 만들어 넣어도 되지만, 금고에서 만들면 개인 키가 금고 밖으로 유출될 일이 없기에 이 방법을 추천한다.
앱 설정의 Developer 탭에 SSH 에이전트를 켜고 git 커밋 서명까지 대신 해주는 버튼이 있다. 눌러 두면 ~/.ssh/config와 ~/.gitconfig를 알아서 써 주니 할 일은 GitHub에 공개키를 Signing Key 타입으로 올리면 된다.

위처럼 macOS 설정에서 네이티브 자동 완성 프로그램을 변경하는 것이 좋다.
AdGuard
로컬 프록시로 트래픽을 거쳐 보내며 브라우저 밖 앱 안의 광고까지 걸러주는 차단기이다.
brew install --cask adguard
AdGuard는 다양한 옵션을 지원하는데, 한국의 웹사이트들에서도 잘 작동하게 하려면 커스텀 필터, 유저스크립트를 추가해야한다.
- filterslists-KO: AdGuard와 애드블록 커뮤니티에서 관리하는 한국어 광고 차단 필터 리스트
- tinyShield: Ad-Shield 방식의 Adblock Blocker를 막는 유저스크립트
- NamuLink: 나무위키의 처리하기 복잡한 파워링크를 차단하는 유저스크립트
- crackle: 네이버 치지직 웹 사이트의 광고 제거 및 안티 애드블록 우회를 위한 유저스크립트
Google Chrome
점유율이 가장 높은 브라우저이다. 여러 플랫폼에서 지원하며 구글 계정 연동이 강력하여 사용한다. 또한, 프론트엔드 개발자는 대다수가 쓰는 환경에서 테스트를 해야 하기에 쓸 수 밖에 없다…
brew install --cask google-chrome
확장 프로그램
- 1Password: 위의 1Password 데스크탑 앱과 연동하여 사용하기 좋다.
- AdGuard 브라우저 어시스턴트: 위의 AdGuard 데스크탑 앱과 연동하여 사용하기 좋다.
- Dark Reader: 다크 모드를 지원하는 않는 웹사이트도 다크 모드로 만들어주는 확장앱
- Refined GitHub: GitHub에 다양한 Tweaks 기능을 추가해주는 확장앱
- CSMS+: GIST LMS에 기능 추가해주는 확장앱
Raycast V2
Spotlight를 대체하는 런처로, 클립보드 히스토리와 창 관리, 확장 플러그인까지 하나로 묶은 앱이다.
https://www.raycast.com/new 에서 직접 설치할 수 있다. V2에서는 macOS 27에 적응한 Liquid Glass 디자인과 개선 사항이 있다.

위 설정을 ABC로 설정하면, 기존의 키보드 언어가 뭐였든 영어로 바뀌니 편한 단축키 및 플러그인 사용이 가능하다.
유틸리티 앱
Alcove
아이폰의 다이나믹 아일랜드를 맥 노치로 옮겨온 앱이다. 재생 중인 음악, 에어드랍, 충전, 캘린더 등의 여러 기능을 가지고 있어 편리하다.
brew install --cask alcove
Klack
키를 누를 때 기계식 키보드 소리를 내준다. App Store에서 설치한다.
mas install 6446206067
Vorssaint
macOS 메뉴 바에서 쓰는 무료 오픈소스 시스템 툴킷이다. 화면을 닫아도 절전에 안 들어가게 하는 Keep-awake, CPU/GPU 온도와 배터리, 메모리 모니터링, 네트워크, 디스크 속도 표시, 다크 모드, 마이크 음소거 같은 빠른 토글까지 모듈식으로 필요한 것만 골라 켤 수 있다.
brew install --cask vorssaint
Gitify
메뉴 바에서 GitHub, GitLab, Gitea, Bitbucket 알림을 받는 무료 오픈소스 앱이다. 여러 플랫폼의 여러 계정을 한 번에 묶어서 보고, 필요한 알림만 걸러낼 수 있다.
brew install --cask gitify
Setapp
월 구독으로 유료 맥 앱을 쓸 수 있게 해주는 서비스이다. 몇 개만 써도 구독이 싸게 먹히는 편이다. 아래 앱들은 전부 Setapp 안에서 받는다.
brew install --cask setapp
AlDente Pro
맥북 배터리 충전 상한, 방전, 발열 보호, 보정, 배터리 수명과 관련된 종합 앱이다.
CleanShot X
macOS 기본 스크린샷을 통째로 대체하는 종합 앱이다. 캡처, 스크롤 캡처, 주석, GIF, 화면 녹화까지 50가지가 넘는 기능이 있다.
CleanMyMac
맥 유지보수 종합 도구이다. 청소만이 아니라 중복 파일, 악성코드 검사, 앱 삭제와 업데이트, 성능 점검 등 많은 기능이 있다.
TablePlus
데이터베이스 GUI이다.
Dato
메뉴 막대 시계와 캘린더이다.
Paste
클립보드를 보여준다. iCloud 동기화로 iPhone, iPad에서 사용할 수 있어 편리하다.
Supercharge
macOS Tweaks 앱이다.
개발 앱
Visual Studio Code
주력 코드 에디터이다.
brew install --cask visual-studio-code
# check
code --version
code 명령이 안 잡히면 Command Palette에서 Shell Command: Install 'code' command in PATH를 한 번 실행한다.
확장 프로그램 및 설정
Settings Sync 기능 덕에 다시 설치해도 그대로 유지되지만, 기록을 위해 VS Code 설정을 정리해본다.
언어 지원 및 Intellisense:
- Python: Python 지원. 인터프리터는 Mise로 세팅한 것을 골라야 한다.
- Pyrefly: 아래 Pyrefly를 language server로 붙인다.
- rust-analyzer: Rust 언어 지원
- Flutter: Flutter 지원. Dart 확장도 같이 설치된다.
- Astro:
.astro문법과 language server를 지원한다. - MDX: MDX 지원
- Even Better TOML: toml 지원
- Tailwind CSS IntelliSense: tailwindcss 클래스 자동완성
- npm Intellisense: import 경로 자동완성
- Vitest: Vitest 지원
- Jupyter: Jupyter Notebook 지원
- vscode-pdf: PDF 지원
Lint & Format:
Tweaks:
- Claude Code: 아래 Claude를 TUI가 아니라 GUI로 사이드 바에서 사용할 수 있다.
- mise VS Code: 아래 Mise 관리 탭이 생긴다.
- Loccy: i18next 키 관리 및 프리뷰 기능, 번역 기능 등등 유용한 확장
- Error Lens: 에러를 인라인에 바로 띄워서 굉장히 유용한 확장
- GitLens: 줄마다 누가 언제 고쳤는지 보여주는 확장
- Better Todo Tree:
TODO,FIXME등등의 태그 주석을 모아주고, 하이라이팅도 해주는 확장 - Color Highlight: hex, rgb 등의 색 포맷에 프리뷰로 색을 보여준다.
- Flow Icons: 예쁜 파일 아이콘 테마
{
"editor.fontFamily": "'MonoLisaCode', 'Symbols Nerd Font Mono', 'Pretendard GOV Variable', Menlo, Monaco, 'Courier New', monospace",
"editor.fontLigatures": "'calt', 'liga', 'cv01', 'cv02', 'cv03', 'cv04', 'cv05', 'cv07', 'cv08', 'cv09', 'cv11', 'cv12', 'dlig', 'ss01', 'ss13'",
"editor.lineHeight": 1.7,
"terminal.integrated.fontFamily": "'MonoLisaCode', 'Symbols Nerd Font Mono', 'Pretendard GOV Variable', Menlo, Monaco, 'Courier New', monospace",
"terminal.integrated.fontLigatures.enabled": true,
"terminal.integrated.fontLigatures.featureSettings": "'calt', 'liga', 'cv01', 'cv02', 'cv03', 'cv04', 'cv05', 'cv07', 'cv08', 'cv09', 'cv11', 'cv12', 'dlig', 'ss01', 'ss13'",
"terminal.integrated.lineHeight": 1.3,
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"files.trimTrailingWhitespace": true,
"tailwindCSS.classFunctions": ["cn", "cva", "tv"],
"[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[javascriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[astro]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[json]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[jsonc]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[yaml]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[css]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[markdown]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[mdx]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[toml]": { "editor.defaultFormatter": "tamasfe.even-better-toml" },
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.codeActionsOnSave": {
"source.fixAll.ruff": "explicit",
"source.organizeImports.ruff": "explicit"
}
},
"[rust]": { "editor.defaultFormatter": "rust-lang.rust-analyzer" },
"[dart]": { "editor.defaultFormatter": "Dart-Code.dart-code" }
}
OrbStack
macOS에서 Docker 컨테이너와 리눅스 VM을 돌리는 앱이다. 무거운 Docker Desktop을 대신하면서 훨씬 가볍고 빠르다.
brew install --cask orbstack
Figma
UI/UX 디자인하는 도구이다.
brew install --cask figma
Linear
이슈 트래커. 회사에서 쓴다.
brew install --cask linear
Notion
개인 기록부터 학교 과제, 업무 협업까지 다용도로 문서, 위키, 데이터베이스를 쓸 수 있는 앱이다.
brew install --cask notion
커뮤니케이션 앱
Slack
업무 연락용 앱이다.
brew install --cask slack
Discord
회사에서도 쓰고, 여러 커뮤니티로도 활용된다.
brew install --cask discord
Zoom
화상 회의 앱이다.
brew install --cask zoom
카카오톡
Homebrew에 cask가 없어서 App Store에서 받아야 한다.
mas install 869223134 # 카카오톡
만약 AI 에이전트가 카카오톡을 읽고 보내게 하려면 kakaocli가 있다. 공식 API로는 대화 기록을 못 읽어서, 로컬 데이터베이스를 직접 읽고 접근성 API로 UI를 조작하는 방식이다.
brew install silver-flight-group/tap/kakaocli
문서 앱
Microsoft Office
다양한 포맷의 문서를 작성하고, 사용하고, 주고 받으려면 Word, PowerPoint, Excel는 필수적이다. 유료이기에 학교 계정 라이선스가 붙어 있는 교내 소프트웨어 배포처에서 받는다.
한컴오피스
학교와 공공기관 문서가 .hwp, .hwpx로 오기 때문에 이것도 필요하다. 마찬가지로 유료라 교내 소프트웨어 배포처에서 받는다.
HOP
라이선스가 없어 급할 때 쓸 대안이다. HWP 엔진 rhwp가 공개되면서 나온 오픈소스 앱이라 .hwp, .hwpx를 그냥 열고 고칠 수 있다. 다만 공식 앱에 비해 아쉽고 버그도 많다.
brew install --cask hop
노트 앱
Notability
수업 필기용. 강의 자료 PDF를 그대로 열어 그 위에 필기하기 때문에 대학교에서는 사실상 필수다. 같은 계정이면 iPad, iPhone과 노트가 동기화되어, 아이패드로 쓴 필기를 맥에서 바로 이어 볼 수 있다.
mas install 360593530 # Notability
Obsidian
개인 지식 관리와 메모용 앱이다. iCloud로 무료로 동기화할 수 있다.
brew install --cask obsidian
그 외 앱
Apple 기본 앱
Apple Mail, Apple Calendar, Apple Reminder는 설치는 이미 되어있기에 세팅만 하면 된다. 시스템 설정 > 인터넷 계정에서 계정을 추가해주면 자동으로 연동된다.
Spotify
음악 스트리밍 앱이다.
brew install --cask spotify
Logitech G HUB
현재 사용중인 마우스인 G PRO X SUPERLIGHT 2 같은 G 시리즈 기기의 DPI, 폴링레이트, 버튼 매핑을 잡는 소프트웨어이다.
brew install --cask logitech-g-hub
게임
Steam
게임 스토어 겸 런처이다.
brew install --cask steam
Minecraft
마인크래프트 공식 런처이다.
brew install --cask minecraft
Modrinth
모드 플랫폼이자 런처이다.
brew install --cask modrinth
CurseForge
같은 역할의 다른 플랫폼이다. Modrinth에 안 올라온 모드가 여기에만 있는 경우가 있어 둘 다 설치가 필요하다.
brew install --cask curseforge
League of Legends
cask가 북미 서버 설치 프로그램이라, 한국 서버로 할 거면 공식 사이트에서 받는다.
brew install --cask league-of-legends # 북미 서버라 비추천
터미널
Ghostty
GPU 가속을 쓰는 네이티브 터미널 에뮬레이터이다. 플랫폼 UI를 그대로 쓰면서도 렌더링이 빠르고, 설정이 텍스트 파일 하나라 dotfiles로 관리하기 좋다.
brew install --cask ghostty
# check
ghostty --version
Ghostty 설정
~/.config/ghostty/config에 해주면 된다. 또는 앱에서 cmd, 로 열 수 있다.
# Font
font-family = "MonoLisaCode"
font-family = "Symbols Nerd Font Mono"
font-family = "Pretendard GOV Variable"
font-size = 11
font-thicken = true
adjust-box-thickness = 1
adjust-cursor-thickness = 1
font-feature = calt, liga, cv01, cv02, cv03, cv04, cv05, cv07, cv08, cv09, cv11, cv12, dlig, ss01, ss13
# Theme
theme = light:sherbet-light,dark:sherbet
# Layout
adjust-cell-height = 15%
window-padding-x = 8
# Cursor
cursor-style = bar
mouse-hide-while-typing = true
# UX
confirm-close-surface = false
# Keybinds
keybind = super+left=previous_tab
keybind = super+right=next_tab
# background
macos-titlebar-style = tabs
background-opacity = 0.85
background-blur = true
흔한 font-family에 콤마로 폴백을 넣어주는 문법이 아니라 ghostty 설정은 아래로 쭉 써야 한다.
ghostty +list-themes로 쓸 수 있는 테마를 훑어볼 수 있다. 또한 ~/.config/ghostty/themes/에 직접 커스텀 테마를 넣을 수 있다.
Fonts
Pretendard
Pretendard는 San Francisco와 Apple SD 산돌고딕 Neo가 없는 다른 환경에서 이를 대체할 수 있는 글꼴, system-ui를 대체하는 글꼴이다. 본문용 한글 산세리프로써 많은 곳에서 사용되고 있다.
Pretendard GOV는 개중에서도, 범정부 디자인시스템(KRDS)의 표준 글꼴에 사용되는 것을 목적으로 다듬어진 글꼴이다. 정부의 웹사이트와 앱, 각종 증명서에 쓰이는 만큼 한 글자도 잘못 읽히면 안 되므로, 헷갈리는 글자들을 서로 다르게 그렸다. 대문자 I, 소문자 l, 숫자 1과 구분되고, O와 0, w와 vv도 모양이 갈린다. 이 블로그에서도 쓰고 있다.
brew install --cask font-pretendard-gov
IBM Plex Sans KR
IBM이 만든 오픈소스 산세리프 Plex Sans의 한글 지원 버전이다. Pretendard보다 개성이 있어서, 같은 글이라도 분위기를 바꾸고 싶을 때 문서용으로 쓴다.
brew install --cask font-ibm-plex-sans-kr
Monaspace
GitHub가 만든 코딩용 폰트로, 네오그로테스크 산세리프 Neon, 휴머니스트 산세리프 Argon, 슬래브 세리프 Xenon, 손글씨 Radon, 기계식 산세리프 Krypton의 다섯 variant가 있다.
다섯 배리언트가 폭이 같아서, 코드 안에서 서체를 섞어도 격자가 안 어긋난다. 여기에 좁은 글자 옆의 여백을 넓은 글자로 빌려줘서, 고정폭 특유의 듬성듬성한 느낌 없이 균일하게 보이게 하는 Texture Healing이 구현되어있다.
brew install --cask font-monaspace font-monaspace-nf
MonoLisa
MonoLisa는 유료 코딩 폰트로, 위의 Monaspace 같은 네오그로테스크 계열과 달리 글자마다 개성이 있는데, 그 덕에 오래 봐도 눈이 덜 피로하면서 가독성도 훌륭하다. Ligature와 OpenType feature 지원도 폭넓어서 취향대로 켜고 끌 수 있다.
Nerd Font 글리프
MonoLisa는 Nerd Font 글리프를 담고 있지 않다. MonoLisa FAQ는 폰트를 직접 패치하기보다 폴백 폰트를 두는 쪽을 권한다. 패치본은 MonoLisa를 새로 받을 때마다 다시 구워야 한다.
아이콘 글리프만 담은 Symbols Nerd Font가 그 폴백이다.
brew install --cask font-symbols-only-nerd-font
VS Code는 fontFamily에 콤마로 잇는다.
"terminal.integrated.fontFamily": "'MonoLisaCode', 'Symbols Nerd Font Mono', 'Pretendard GOV Variable', Menlo, Monaco, 'Courier New', monospace"
Ghostty는 font-family를 줄마다 하나씩 쌓아 폴백을 만든다.
font-family = "MonoLisaCode"
font-family = "Symbols Nerd Font Mono"
font-family = "Pretendard GOV Variable"
폴백으로 안 되는 환경에서는 nerd-fonts의 font-patcher로 폰트에 글리프를 직접 굽는다. variable 폰트는 받지 않으니 MonoLisa-Regular.ttf 같은 static instance를 넘긴다.
git clone --depth 1 https://github.com/ryanoasis/nerd-fonts.git
cd nerd-fonts
./font-patcher ~/Library/Fonts/MonoLisa-Regular.ttf --complete
패치된 폰트가 ~/Library/Fonts에 새로 생기면 그걸 터미널·에디터 설정의 font-family에 지정한다.
0xProto
코드 가독성에 초점을 맞춘 오픈소스 코딩 폰트다. 0/O, 1/l/I처럼 헷갈리는 글자를 확실히 구분하고, Monaspace와 같은 Texture Healing으로 좁은 글자 옆 넓은 글자를 미세하게 줄여 균일하게 보이게 한다. 또한 Ligature를 지원하되 형태를 완전히 변형하여 헷갈리게 만드는 방식을 지양하여 설계한 점이 개성있다.
brew install --cask font-0xproto font-0xproto-nerd-font
셸 환경
chezmoi
.zshrc, .gitconfig, ghostty config, VS Code settings.json같은 dotfiles를 중앙화할 수 있다. 또한 git과 연동도 되어, 새 환경에서 chezmoi init --apply <repo> 로 설정을 가져올 수도 있다.
brew install chezmoi
# check
chezmoi --version
chezmoi init
chezmoi add ~/.zshrc
chezmoi apply
fzf
fzf는 범용 fuzzy finder이자 대화형 CLI다.
brew install fzf
# ~/.zshrc
source <(fzf --zsh)
ctrl+r: 히스토리 검색ctrl+t: 파일 검색해서 커맨드에 끼워넣기
zoxide
cd를 대신한다. 한 번 가본 디렉터리를 기억해뒀다가, 이름 일부만 쳐도 그중 제일 자주 간 곳으로 바로 이동시켜주는 편리한 도구이다.
brew install zoxide
# ~/.zshrc
eval "$(zoxide init zsh)"
z proj # ~/dev/my-project 같은 곳으로 바로 이동
Starship
어떤 셸에서든 쓰는 프롬프트다. 가볍고 빠르면서 원하는 대로 커스터마이징할 수 있다. 지금 디렉터리가 git 저장소면 브랜치와 변경 상태를, 언어별 프로젝트면 그 언어 버전을 바로 띄운다.
가장 많이 쓰이는 Powerlevel10k도 있지만 무겁기도 하고 Starship의 기본값이 워낙 예뻐서 쓴다. Starship은 TOML 설정 파일을 쓰기에 chezmoi로도 유용하다.
brew install starship
# ~/.zshrc
eval "$(starship init zsh)"
Zsh
플러그인
fzf-tab은 zsh의 기본 선택 메뉴를 fzf로 갈아끼우는 것이라 fzf가 깔려 있어야 한다. 로드 순서가 까다롭다.
zsh-completions는FPATH에 얹히므로compinit앞fzf-tab은compinit뒤이면서, 위젯을 감싸는zsh-autosuggestions·zsh-syntax-highlighting보다 앞zsh-syntax-highlighting은zsh-history-substring-search보다 먼저
brew install zsh-completions zsh-autosuggestions zsh-syntax-highlighting zsh-history-substring-search zsh-you-should-use fzf-tab
~/.zshrc에 이 순서로 넣는다. 경로의 $HOMEBREW_PREFIX는 Homebrew 설정 때 넣은 brew shellenv가 채워주므로 Intel/ARM을 안 가린다.
# zsh-completions 는 FPATH 방식이라 compinit 보다 앞
FPATH="$HOMEBREW_PREFIX/share/zsh-completions:$FPATH"
autoload -Uz compinit && compinit
# fzf-tab 은 compinit 뒤, 위젯을 래핑하는 autosuggestions/syntax-highlighting 보다 앞
source "$HOMEBREW_PREFIX/opt/fzf-tab/share/fzf-tab/fzf-tab.zsh"
source "$HOMEBREW_PREFIX/share/zsh-autosuggestions/zsh-autosuggestions.zsh"
# syntax-highlighting 은 history-substring-search 보다 먼저
source "$HOMEBREW_PREFIX/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
source "$HOMEBREW_PREFIX/share/zsh-history-substring-search/zsh-history-substring-search.zsh"
bindkey '^[[A' history-substring-search-up # 위 화살표
bindkey '^[[B' history-substring-search-down # 아래 화살표
source "$HOMEBREW_PREFIX/share/zsh-you-should-use/you-should-use.plugin.zsh"
- zsh-completions: 기본 zsh에 없는 커맨드용 자동완성 정의 모음
- zsh-autosuggestions: 히스토리 기반으로 입력 중인 줄 뒤에 회색 제안을 띄운다.
- zsh-syntax-highlighting: 입력하는 즉시 명령어, 경로에 문법 강조를 입힌다.
- zsh-history-substring-search: 위/아래 화살표로 지금까지 입력한 부분 문자열을 포함하는 히스토리만 훑는다.
- zsh-you-should-use: 방금 친 명령이 등록된 alias 로 대체 가능하면 알려준다
- fzf-tab: tab 자동완성 목록을 fzf 로 갈아엎어 뒤진다
CLI 도구
ripgrep
grep의 개선판이다. .gitignore를 자동으로 인식하여 안 봐도 되는 파일은 알아서 건너뛰며 성능도 개선되어 훨씬 빠르게 훑는다.
brew install ripgrep
# check
rg --version
fd
find의 개선판이다. 옵션 없이 이름 일부만 쳐도 찾아주고 .gitignore도 알아서 존중한다.
brew install fd
# check
fd --version
bat
cat의 개선판이다. syntax highlighting와 line number, layout등을 통해 예쁘게 그려준다. git 저장소 안에서는 변경된 줄까지 표시해준다.
brew install bat
# check
bat --version
eza
ls의 개선판이다. 아이콘, 트리 보기, git 상태 표시가 기본으로 붙는다.
brew install eza
# check
eza --version
micro
nano의 개선판이다. 마우스로 커서 이동, 드래그 선택, 스크롤이 되고 ctrl+c/ctrl+v/ctrl+x 같은 익숙한 키바인딩과 syntax highlighting까지 지원한다.
brew install micro
# check
micro --version
jq
가볍고 유연한 JSON 프로세서이다. API 응답이나 설정 파일을 셸에서 바로 뒤진다.
brew install jq
# check
jq --version
yq
jq와 같은 문법을 쓰는 YAML 프로세서이다. jq가 다루지 못하는 YAML, TOML, XML 설정 파일을 셸에서 바로 뒤진다.
brew install yq
# check
yq --version
tldr
man 명령어 대신 쓰는 CLI 도구. 길게 옵션 전체를 나열하는 대신 예시 위주로 보여주는 방식으로 쉽게 이해할 수 있다.
brew install tldr
# check
tldr --version
tldr tar
agent-browser
AI 에이전트를 위한 브라우저 자동화 CLI이다. 출력이 짧아 컨텍스트를 덜 먹고 빠르다.
brew install agent-browser
# 첫 실행 전에 Chrome을 따로 받는다
agent-browser install
버전 관리
Git
버전 관리 시스템이다. Xcode Command Line Tools에서 같이 설치 되지만 최신 버전으로 쓰려면 Homebrew로 설치하는 것이 좋다.
/opt/homebrew/bin이 /usr/bin보다 PATH 앞에 있으면 정상적으로 잡을 수 있다.
brew install git
# PATH order
which -a git
# check
git --version
Git 설정
git config --global을 한 번에 모았다. 이름과 이메일은 커밋 서명까지 했다면 서명 키의 이메일과 맞춰야 한다.
git config --global user.name "Hyunseung Ryu"
git config --global user.email "ryu@rhseung.me"
git config --global init.defaultBranch main
diff는 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.dark true
머지 충돌은 zdiff3로 바꾼다. zdiff3은 conflict 전 원본 내용까지 같이 보여줘서 가늠하기가 더 쉽다. git에 내장된 옵션이라 따로 설치할 건 없다.
git config --global merge.conflictStyle zdiff3
macOS가 폴더마다 생성하는 .DS_Store는 글로벌 .gitignore에 적는 것이 낫다. ~/.config/git/ignore가 기본 전역 gitignore이므로, 그 파일을 수정한다:
echo ".DS_Store" >> ~/.config/git/ignore
GitHub CLI
CLI로 깃허브의 PR, 이슈, 릴리스 등의 기능들을 사용할 수 있게 하는 툴이다. 브라우저를 안 열어도 되고, 사람이 사용하기 쉽고 AI Agent가 쓰기도 쉽다.
brew install gh
# check
gh --version
gh auth login으로 한 번 로그인해두면 git push/pull에도 인증을 쓸 수 있다.
serie
git 커밋 그래프를 터미널에서 보여주는 TUI다. git log --graph보다 훨씬 보기 편하다.
brew install serie
# check
serie --version
delta
git diff를 더 개선해서 그려주는 페이저다. 나란히 보여주고 문법 강조까지 되어 훨씬 읽기 편해진다.
brew install git-delta
# check
delta --version
언어 환경
Mise
Node, Python, Rust 같은 런타임 버전을 프로젝트마다 고정해주는 버전 관리자이다. nvm, pyenv, fvm처럼 언어마다 따로 깔던 버전 관리자를 하나로 합쳤다. 여기서 그치지 않고 direnv와 Make까지 겸한다.
설치
Homebrew로 설치할 수도 있지만, mise self-update 커맨드가 작동하려면 직접 설치하는 것이 좋다.
curl https://mise.run | sh
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
echo 'eval "$(~/.local/bin/mise activate zsh --shims)"' >> ~/.zprofile
# check
mise --version
셸 자동완성도 같이 건다. --install이 그 셸이 찾는 자리에 완성 스크립트를 써주고, zsh의 fpath+=처럼 한 번 더 필요한 줄이 있으면 그건 따로 출력해준다.
mise completion zsh --install
Dev Tools
프로그래밍 언어 설치는 전부 Mise를 사용하여 글로벌로 설치(mise use -g <tool>)하면 된다.
- Node.js:
node@lts - Python:
python@latest - Rust:
rust@latest - Java:
java@latest, Temurin 배포판으로 받아온다 - Flutter:
flutter@latest
또한, nvm, pyenv, fvm처럼 언어별로 따로 깔던 버전 관리자를 이걸로 대신한다. 프로젝트마다 [tools]를 다르게 둬서 디렉터리를 옮겨 다니면 버전이 자동으로 바뀌게 할 수 있다.
# project-a/mise.toml
[tools]
node = "24"
cd project-a && node --version # v24.x
cd ../project-b && node --version # mise.toml 이 없으면 전역 버전
Environments - direnv 대체
mise.toml의 [env]에 환경변수를 적어두면 그 디렉터리에 들어갈 때 자동으로 실린다.
[env]
DATABASE_URL = "postgres://localhost/dev"
기본값은 default로 준다.
[env]
NODE_ENV = { default = "development" }
required = true는 값을 채워주지 않고 있는지만 검사한다.
[tasks.deploy]
env = { ASC_KEY_ID = { required = true } }
run = "./deploy.sh"
redact = true를 붙이면 값을 노출하지 않고 숨겨 보안을 유지한다.
redactions = ["*_TOKEN", "*_KEY"]
[env]
DATABASE_URL = { value = "postgres://user:pass@localhost/dev", redact = true }
Tasks - Make 대체
[tasks]에 자주 쓰는 스크립트를 적어두고 실행할 수 있다.
[tasks.dev]
run = "bun run dev"
sources/outputs를 주면 입력이 안 바뀐 태스크는 건너뛴다 - 타임스탬프로 재실행 여부를 가르는 Make의 핵심 기능 그대로다.
[tasks.build]
sources = ["src/**/*.ts"]
outputs = ["dist/**"]
run = "bun build"
Backends
언어 런타임 말고 개별 도구도 mise가 설치할 수 있다. npm:prettier, pipx:black, cargo:ripgrep, go:golang.org/x/tools/gopls, ubi:owner/repo처럼 백엔드를 접두어로 붙이면 그 생태계 패키지 매니저를 빌려서 설치한다. 이 글에서 uv tool install로 까는 claude-swap도 원래는 여기로 통합할 수 있다.
[tools]
"npm:prettier" = "latest"
"cargo:ripgrep" = "latest"
Hooks
Enter, Leave, Preinstall, Postinstall, Watch 등의 이벤트에 커맨드를 실행한다.
단순 이벤트 뿐만 아니라 다양한 이벤트를 지원한다.
cd,enter,leave,preinstall,postinstall[hooks] enter = "echo '프로젝트 진입'" leave = "echo '프로젝트 이탈'" postinstall = "echo '설치 완료'"- Dev Tool 레벨의
postinstall[tools] node = { version = "20", postinstall = "npm install -g pnpm" } python = { version = "3.12", postinstall = "pip install pipx" } - Task
Lockfile
npm의 package-lock.json, Rust의 Cargo.lock과 같은 역할을 하는 Mise의 Lockfile이다.
lockfile = true를 설정해두면 설치, 업그레이드할 때마다 자동으로 갱신되고, 수동으로 만들려면 mise lock을 돌리면 된다.
Bun
JavaScript 런타임 겸 패키지 매니저이다. Node를 대신하면서 번들러와 테스트 러너까지 안고 있다.
Mise로도 깔 수 있지만 직접 깐다. bun upgrade가 살아 있고, 설치 스크립트가 zsh 자동완성까지 같이 붙여준다.
curl -fsSL https://bun.com/install | bash
# check
bun --version
스크립트가 ~/.zshrc에 아래를 붙인다. 안 붙었으면 직접 넣는다.
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"
# completions
[ -s "$HOME/.bun/_bun" ] && source "$HOME/.bun/_bun"
uv
Python 패키지, 프로젝트 관리자이다. pip, virtualenv, pipx, poetry가 나눠 하던 일을 하나로 합쳤고, Rust로 짜여 설치가 눈에 띄게 빠르다.
버전 관리는 Mise로 할 수 있겠지만, uv는 패키지 설치와 가상환경, 의존성 잠금(uv.lock) 전부 해주기 때문에 파이썬 프로젝트는 uv를 쓴다.
Mise와 같은 이유로 직접 설치한다. Homebrew로 깔면 uv self update가 막힌다.
curl -LsSf https://astral.sh/uv/install.sh | sh
# check
uv --version
Ruff
Python 린터 겸 포매터이다. flake8, isort, black이 나눠 하던 일을 하나로 합쳤고, 위의 uv와 같은 Astral이 만들어 Rust로 짜여 있다.
brew install ruff
# check
ruff --version
Pyrefly
Meta에서 만든 빠른 Python 타입 체커기이자 언어 서버로, Mypy를 대체한다. 덕분에, 같은 Meta에서 만든 PyTorch에서 Pyrefly가 잘 돌아간다.
brew install pyrefly
# check
pyrefly --version
fnox
.env에 평문으로 두던 비밀값을 암호화해서 저장소에 커밋하게 해주는 시크릿 매니저다. 1Password, AWS Secrets Manager 같은 원격 저장소를 지원해서 쓴다. Mise처럼 디렉토리에 들어가면 자동으로 로드된다.
mise use -g fnox
# fnox.toml
[providers.onepassword]
type = "1password"
[secrets]
DATABASE_URL = { provider = "onepassword", value = "op://vault/item/field" }
# ~/.zshrc
eval "$(fnox activate zsh)"
Claude
Anthropic이 만든 LLM이다. 개인적으로 다른 LLM들을 전부 써봤지만, 가장 취향에 맞고 성능이 좋다고 생각해 쓰고있다.
설치
- Terminal
curl -fsSL https://claude.ai/install.sh | bash - Desktop app
- VS Code Extension
# Desktop 앱에 붙여둔 MCP 서버 그대로 가져오기
claude mcp add-from-claude-desktop
claude-swap
Claude Code 계정을 여러 개 쓸 경우 쉽게 swap할 수 있는 CLI다. 계정마다 OAuth 토큰을 macOS Keychain에 따로 보관해두고, 전환할 때는 그 계정의 로그인 정보만 바꿔치기한다. MCP 서버 같은 공유 설정은 그대로 남는다.
Ruff, Pyrefly와 달리 Homebrew에 formula가 없어서 uv로 깐다. dotfiles의 uv-tools.txt에 이름을 적어두면 chezmoi apply가 이 명령을 대신 돌린다.
uv tool install claude-swap
# check
cswap --version
계정마다 로그인한 뒤 cswap add로 등록해두면, cswap list로 계정별 5시간/7일 사용률과 리셋 시각을 확인할 수 있다.
# 로그인한 계정을 등록
cswap add
# 계정별 사용률
cswap list
# 2번 계정으로 전환
cswap switch 2
cswap auto를 켜두면 사용률이 임계값(기본 90%)에 가까워질 때 알아서 전환한다. best(기본값) 전략은 여유가 가장 많은 계정으로, consume-first는 주간 한도가 가장 먼저 리셋되는 계정으로 옮긴다. 임계값 근처에서 왔다갔다하지 않도록 쿨다운과 히스테리시스 마진이 걸려 있다.
cswap auto --threshold 80
CLAUDE.md
전역 CLAUDE.md는 모든 프로젝트와 모든 세션에 영향을 주기 때문에, 글로벌하게 적용될 룰을 적어두면 좋다.
보통 경로는 ~/.claude/CLAUDE.md이다.
## CLI Tool Preferences
- 파일 목록: `ls` 대신 `eza`
- 파일 검색: `find` 대신 `fd`
- 텍스트 검색: `grep` 대신 `rg`
- 파일 내용 확인: `bat` 대신 `cat` - bat의 꾸밈은 사람 눈을 위한 것이라 순수 데이터가 아니게 된다
- JSON 파싱: grep/sed로 억지로 자르지 말고 `jq`, YAML/TOML은 `yq`
- 브라우저 조작: Playwright MCP 대신 `agent-browser`
## Commits
**커밋 하나에 변경 하나.** 스테이지한 변경이 서로 독립적으로 되돌려질 수 있으면 커밋을 나눈다.
**이미 만든 커밋은 건드리지 않는다.** 리뷰 지적이든 추가 수정이든 새 커밋으로 쌓는다.
**제목은 영어, 본문은 한국어.**
`<type>: <title>`, 명령형으로 쓴다.
## Comments
**주석은 코드가 말할 수 없는 것만 적는다.** 무엇을 하는지는 코드가 이미 말한다 -
적을 값어치가 있는 건 _왜 이 방식이어야 하는지_, 특히 다르게 짜면 깨지는 이유다.
TODO, FIXME 같은 태그형 주석 말고는 설명형 주석을 최소화한다 - 주석이 필요 없을 만큼
가독성 좋고 간결하게 짜는 게 우선이다. 주석은 많을수록 좋은 게 아니다.
Skills
아래는 추천하는 스킬들이다.
- Superpowers: software development methodology 도입
- k-skill: SRT, KTX, KBO, 당근, 쿠팡, 카톡, 정부24, 홈택스 등등 한국의 서비스와 관련된 스킬 모음집
- Emil Kowalski’s Skills: 애니메니션과 디자인에 관련된 스킬
- Humanize KR: AI가 쓴 한글을 사람 글처럼 윤문하는 Claude 스킬
- Humanizer: 위와 동일하나 영어에 해당하는 스킬
- ponytail: 베테랑 개발자처럼 코드 과잉 구현을 막고 간결하게 짜는 스킬