맥 기본 터미널, 이제 바꿔볼까? SSH·tmux 활용까지
맥을 사용하면서 가장 많이 실행하는 프로그램 중 하나가 터미널이다.
처음에는 macOS에서 기본으로 제공하는 Terminal.app만으로도 충분했다. cd로 디렉터리를 이동하고, git으로 코드를 관리하고, 필요할 때 ssh로 서버에 접속하는 정도였으니 딱히 불편할 일이 없었다.
그런데 최근 개발 환경을 조금씩 바꾸기 시작했다.
Mac mini를 상시 개발 환경으로 사용하고, Neovim과 LazyVim을 설치하고, SSH로 원격 접속하고, tmux로 세션을 관리하는 구조를 구성하고 있다. 여기에 Codex와 같은 AI 코딩 에이전트까지 활용하다 보니 터미널의 역할이 단순한 명령어 입력창을 넘어섰다.
그러다 개발자들이 사용하는 터미널을 살펴보니 Ghostty, WezTerm, iTerm2 같은 이름들이 눈에 들어왔다.
“기본 터미널도 잘 돌아가는데, 굳이 다른 터미널을 설치할 이유가 있을까?”
이번 글에서는 Ghostty가 무엇인지, macOS 기본 터미널과 어떤 차이가 있는지 살펴보고 설치부터 테마, 단축키, SSH와 tmux 활용까지 정리해 보려고 한다.
1. Ghostty가 무엇인가?

Ghostty는 GPU 가속과 운영체제의 네이티브 UI를 활용하는 오픈소스 터미널 에뮬레이터(Terminal Emulator)다.
여기서 터미널 에뮬레이터라는 말이 조금 낯설 수 있다.
우리가 터미널에 ls, git status, docker ps 등을 입력하면 실제 명령어를 해석하는 것은 셸(Shell)이다. macOS에서는 일반적으로 zsh를 사용한다.
반면 Ghostty나 Terminal.app은 셸과 사용자 사이에서 문자, 색상, 키보드 입력 등을 처리하는 프로그램이다.
쉽게 정리하면 다음과 같다.
| 구분 | 역할 | 예시 |
|---|---|---|
| 터미널 에뮬레이터 | 명령어 입력과 출력을 보여주는 프로그램 | Ghostty, Terminal.app, WezTerm |
| 셸(Shell) | 명령어를 해석하고 실행 | zsh, bash, fish |
| 멀티플렉서 | 여러 터미널 작업과 세션을 관리 | tmux |
즉, Ghostty를 설치한다고 해서 기존 zsh를 버리거나 개발 도구를 새로 설치해야 하는 것은 아니다.
기존에 사용하던 ~/.zshrc, Oh My Zsh, Git 별칭, Homebrew 등의 설정을 대부분 그대로 사용할 수 있다.
Ghostty가 내세우는 특징은 다음과 같다.
- GPU 가속 렌더링: macOS에서는 Metal을 활용해 터미널 화면을 렌더링한다.
- 네이티브 UI: macOS의 창 관리 방식과 자연스럽게 통합된다.
- 화면 분할: 하나의 창에서 독립적인 터미널 세션을 여러 개 실행할 수 있다.
- 테마와 글꼴: 다양한 내장 테마와 폰트 설정을 지원한다.
- Quick Terminal: 단축키로 화면 가장자리에서 터미널을 불러올 수 있다.
- 최신 터미널 기능: True Color, 이미지 출력 프로토콜 등 다양한 기능을 지원한다.
물론 GPU 가속을 사용한다고 해서 모든 명령어가 무조건 빨라지는 것은 아니다.
예를 들어 git clone의 네트워크 속도나 Java 프로그램의 컴파일 속도가 Ghostty 설치만으로 개선되지는 않는다. GPU 가속은 주로 터미널 화면을 그리는 과정과 관련이 있다.
2. macOS 기본 터미널과 비교하면?
가장 궁금했던 부분이다.
애플이 기본으로 제공하는 Terminal.app도 충분히 훌륭하다. 오랫동안 검증되었고, 운영체제에 기본으로 포함되어 있어 별도의 설치가 필요 없다.
그렇다면 Ghostty의 차별점은 무엇일까?
| 비교 항목 | macOS Terminal.app | Ghostty |
|---|---|---|
| 설치 | 기본 제공 | 별도 설치 |
| 렌더링 | 기본 터미널 렌더링 | GPU 가속 |
| SSH | 지원 | 지원 |
| 탭 관리 | 지원 | 지원 |
| 화면 분할 | 같은 세션을 나눠 보기 | 독립적인 셸로 분할 |
| 가로·세로 분할 | 제한적 | 모두 지원 |
| 테마 설정 | GUI 프로파일 중심 | 설정 파일과 내장 테마 |
| Quick Terminal | 기본 제공하지 않음 | 지원 |
| Nerd Font | 별도 글꼴 설정 | 지원 |
| tmux 사용 | 가능 | 가능 |
| 사용자 설정 | GUI 중심 | 텍스트 설정 파일 중심 |
여기서 흥미로운 부분이 하나 있다.
기본 터미널도 Cmd + D를 누르면 화면이 분할된다.
그렇다면 Ghostty의 분할 기능과 같은 것 아닐까?
사실 다르다.
Terminal.app의 화면 분할은 기본적으로 동일한 셸 세션의 서로 다른 부분을 볼 수 있도록 나누는 기능이다. 반면 Ghostty는 분할된 영역마다 독립적인 셸을 실행할 수 있다.
예를 들어 하나의 화면에서 다음 작업을 동시에 실행하는 것이다.
- 왼쪽 위: Codex CLI 실행
- 오른쪽 위: SSH로 원격 서버 접속
- 왼쪽 아래:
btop으로 CPU와 메모리 모니터링 - 오른쪽 아래:
docker compose logs -f로 로그 확인
여러 개의 터미널 창을 번갈아 열 필요가 없다.
물론 tmux로도 충분히 구현할 수 있지만, Ghostty 자체의 분할 기능만으로도 간단한 작업 환경을 만들 수 있다는 장점이 있다.
3. Ghostty 설치하기
3.1 설치 환경
| 구분 | 내용 |
|---|---|
| 기기 | Mac mini (Apple Silicon) |
| 운영체제 | macOS |
| 패키지 매니저 | Homebrew |
| 기본 셸 | zsh |
| 에디터 | Neovim + LazyVim |
| 세션 관리 도구 | tmux |
Ghostty는 공식 홈페이지에서 DMG 파일을 다운로드해 설치할 수도 있지만, Homebrew를 사용하는 편이 관리하기 편하다.
3.2 Homebrew로 설치
터미널을 열고 다음 명령어를 입력한다.
brew install --cask ghostty
설치가 끝났다면 Ghostty를 실행한다.
open -a Ghostty
또는 macOS의 Spotlight에서 Ghostty를 검색해 실행해도 된다.
설치가 끝났다. 생각보다 간단하다.
Ghostty는 기본 설정만으로도 사용할 수 있도록 설계되었기 때문에 별도의 초기 설정이 반드시 필요한 것은 아니다.
3.3 정상적으로 실행되었는지 확인
Ghostty에서 다음 명령어를 입력한다.
echo $TERM
echo $SHELL
일반적인 Ghostty의 로컬 zsh 환경이라면 다음과 같은 출력이 나타날 수 있다.
xterm-ghostty
/bin/zsh
TERM은 현재 터미널의 기능을 식별하는 환경 변수다.
SHELL은 사용자의 로그인 셸 경로를 나타낸다.
이미 tmux 내부에 들어가 있다면 TERM이 tmux-256color 등으로 표시될 수 있는데, 이것은 정상이다.
여기서 확인할 점은 Ghostty를 설치했다고 기존의 zsh가 바뀐 것은 아니라는 사실이다.
셸 설정과 터미널 앱 설정은 서로 다른 영역이다.
4. Ghostty 꾸미기: 테마, 폰트, 투명도
Ghostty의 장점 중 하나는 설정 파일 하나로 여러 옵션을 관리할 수 있다는 것이다.
4.1 설정 파일 생성
먼저 설정 디렉터리를 만든다.
mkdir -p ~/.config/ghostty
설정 파일을 생성하고 연다.
touch ~/.config/ghostty/config.ghostty
nvim ~/.config/ghostty/config.ghostty
Neovim이 익숙하지 않다면 nano를 사용해도 된다.
nano ~/.config/ghostty/config.ghostty
Ghostty는 key = value 형식의 단순한 설정 문법을 사용한다.
복잡한 프로그래밍 언어를 배우지 않아도 설정을 변경할 수 있다는 뜻이다.
참고로 Ghostty는 macOS의 ~/Library/Application Support/com.mitchellh.ghostty/ 경로에 있는 설정 파일도 지원한다. 두 경로에 설정 파일이 존재하면 설정 적용 순서에 따라 값이 덮어써질 수 있으므로 한 곳에서 관리하는 편이 좋다.
4.2 Nerd Font 설치
이전에 Neovim + LazyVim을 설치하면서 Nerd Font를 사용했다.
LazyVim에서는 파일 아이콘과 상태바 등을 표시하기 위해 Nerd Font가 유용하다.
설치하지 않았다면 다음 명령어를 입력한다.
brew install --cask font-jetbrains-mono-nerd-font
Ghostty는 기본적으로 JetBrains Mono를 포함하고 있지만, 기존에 사용하던 Nerd Font를 명시적으로 지정해 통일된 개발 환경을 만드는 것도 좋은 방법이다.
4.3 추천 설정 적용
다음은 내가 사용하려는 개발 환경을 기준으로 구성한 설정이다.
# ==================================
# Ghostty Configuration
# ==================================
# 1. 테마
theme = dark:Catppuccin Frappe,light:Catppuccin Latte
# 2. 글꼴
font-family = JetBrainsMono Nerd Font
font-size = 14
# 3. 커서
cursor-style = bar
# 4. 창 여백
window-padding-x = 12
window-padding-y = 10
# 5. 배경 투명도 및 블러
background-opacity = 0.95
background-blur = 15
# 6. 화면 분할 단축키
keybind = super+d=new_split:right
keybind = super+shift+d=new_split:down
# 7. Quick Terminal
keybind = global:super+shift+space=toggle_quick_terminal
quick-terminal-position = top
quick-terminal-size = 40%
각 설정의 의미를 살펴보자.
① 테마
theme = dark:Catppuccin Frappe,light:Catppuccin Latte
macOS의 다크 모드와 라이트 모드에 따라 테마가 자동 전환된다.
Catppuccin은 부드러운 색상 조합으로 널리 사용되는 테마다.
Ghostty에는 다양한 테마가 포함되어 있으며 다음 명령어로 목록을 확인할 수 있다.
ghostty +list-themes
② 글꼴
font-family = JetBrainsMono Nerd Font
font-size = 14
앞에서 설치한 Nerd Font를 사용한다.
터미널의 가독성뿐 아니라 Neovim과 LazyVim에서 사용하는 아이콘 표시에도 영향을 준다.
③ 창 여백
window-padding-x = 12
window-padding-y = 10
터미널 창의 가장자리와 텍스트 사이에 여백을 준다.
작은 차이지만 글자가 창 테두리에 붙어 있는 것보다 보기 편하다.
④ 배경 투명도
background-opacity = 0.95
background-blur = 15
터미널의 배경을 약간 투명하게 만들고 뒷배경에 블러 효과를 적용한다.
여기서 background-opacity는 0부터 1까지의 값을 사용한다.
1.0: 완전히 불투명0.95: 약간 투명0.8: 더 투명
투명도가 높다고 무조건 좋은 것은 아니다. 뒤쪽 창의 내용이 비치면 오히려 코드 가독성이 떨어질 수 있다.
참고로 macOS에서는 배경 투명도를 변경한 후 Ghostty를 완전히 재시작해야 적용되며, 네이티브 전체 화면에서는 투명도가 비활성화된다.
4.4 설정 다시 불러오기
설정을 저장했다면 Ghostty에서 다음 단축키를 누른다.
Cmd + Shift + ,
이 단축키는 설정 파일을 다시 읽는다.
일부 옵션은 재시작이 필요하므로, 설정을 변경해도 적용되지 않는다면 Ghostty를 완전히 종료한 뒤 실행해 보자.
5. 화면 분할과 단축키 활용하기
Ghostty에서는 하나의 창을 여러 영역으로 나눠 사용할 수 있다.
앞서 작성한 설정을 적용하면 다음과 같은 단축키를 사용할 수 있다.
| 단축키 | 기능 |
|---|---|
Cmd + T | 새 탭 |
Cmd + N | 새 창 |
Cmd + D | 오른쪽 화면 분할 |
Cmd + Shift + D | 아래쪽 화면 분할 |
Cmd + W | 현재 탭 또는 분할 영역 닫기 |
Cmd + Shift + , | 설정 다시 불러오기 |
Cmd + Shift + Space | Quick Terminal 토글 |
여기서 Cmd + D와 Cmd + Shift + D는 앞서 설정 파일에 직접 등록한 단축키다.
이렇게 화면을 나누어 사용하면 Docker 로그를 확인하면서 코드를 수정하거나, 서버 리소스를 확인하면서 SSH 작업을 진행할 수 있다.
주의할 점도 있다.
Ghostty의 분할 기능은 단순히 화면을 여러 개 만들어 주는 것이지, 작업을 영구적으로 유지해 주는 기능은 아니다.
터미널을 종료하거나 SSH 연결이 끊기면 실행 중이던 작업도 영향을 받을 수 있다.
바로 이런 경우에 tmux가 필요하다.
6. Quick Terminal: 어디서든 터미널 불러오기
Ghostty에서 개인적으로 유용해 보이는 기능 중 하나는 Quick Terminal이다.
웹 브라우저에서 문서를 읽다가 간단한 명령어를 확인해야 할 때가 있다.
그때마다 터미널 아이콘을 클릭하거나 창을 전환하는 것은 번거롭다.
Quick Terminal은 단축키를 누르면 화면 가장자리에서 터미널이 나타나는 기능이다.
앞서 등록한 설정은 다음과 같다.
keybind = global:super+shift+space=toggle_quick_terminal
quick-terminal-position = top
quick-terminal-size = 40%
이 설정을 적용하면 Cmd + Shift + Space로 Quick Terminal을 표시하거나 숨길 수 있다.
global 옵션은 Ghostty가 활성화되지 않은 상태에서도 해당 단축키가 동작하도록 설정하는 것이다.
단, macOS에서 전역 단축키를 사용하려면 Ghostty에 접근성 권한을 허용해야 할 수 있다.
시스템 설정 → 개인정보 보호 및 보안 → 손쉬운 사용에서 Ghostty의 권한을 확인하면 된다.
다른 프로그램에서 작업하다가 터미널을 잠깐 열어 Git 상태를 확인하고 다시 돌아오는 용도로 활용하기 좋겠다.
7. Ghostty와 tmux, 함께 사용하는 이유
처음에는 이런 생각이 들었다.
“Ghostty에서 화면 분할을 지원한다면, tmux는 굳이 필요 없는 것 아닐까?”
하지만 두 도구는 서로 해결하는 문제가 다르다.
Ghostty는 터미널의 화면과 사용자 인터페이스를 담당한다.
tmux는 여러 터미널 세션을 만들고 유지하는 역할을 한다.
| 구분 | Ghostty | tmux |
|---|---|---|
| 핵심 역할 | 터미널 화면 및 입출력 | 세션 관리 |
| 화면 분할 | 지원 | 지원 |
| 탭·창 관리 | 지원 | 지원 |
| SSH 연결 종료 후 세션 유지 | 자체적으로 보장하지 않음 | 지원 |
| 재접속 후 작업 복원 | 일반 셸 작업 보장 안 됨 | 기존 세션에 재접속 가능 |
| GUI 필요 여부 | 필요 | 불필요 |
가령 MacBook에서 SSH로 Mac mini에 접속해 긴 작업을 실행한다고 가정하자.
일반 SSH 셸에서 작업하다가 네트워크 연결이 끊기면 실행 중이던 프로그램도 종료될 수 있다.
하지만 원격 Mac mini에서 tmux 세션을 만들어 실행했다면 이야기가 달라진다.
tmux 서버가 살아 있는 한 클라이언트의 연결이 끊겨도 세션을 유지할 수 있다.
7.1 tmux 설치
Homebrew로 설치한다.
brew install tmux
설치 확인:
tmux -V
7.2 tmux 세션 만들기
dev라는 이름의 세션을 생성한다.
tmux new -s dev
이제 해당 세션 안에서 프로그램을 실행하면 된다.
예를 들어:
codex
작업을 유지한 채 tmux에서 빠져나오려면 다음 키를 순서대로 누른다.
Ctrl + B → D
이것을 Detach라고 한다.
이후 동일한 컴퓨터에 다시 접속해 다음 명령어를 실행하면 기존 세션으로 돌아갈 수 있다.
tmux attach -t dev
세션 목록은 다음 명령어로 확인한다.
tmux ls
주의할 점은 tmux도 컴퓨터가 종료되거나 재부팅되면 기본적으로 세션이 사라진다는 것이다.
또한 특정 프로그램의 실행 상태가 네트워크 연결에 의존한다면 tmux만으로 그 프로그램의 모든 작업이 보장되지는 않는다.
7.3 추천 활용 구조
내가 구성하려는 개발 환경을 그림으로 나타내면 다음과 같다.
MacBook
└── Ghostty
└── SSH (Tailscale)
└── Mac mini
└── tmux
├── Window 1: Codex CLI
├── Window 2: Docker Logs
├── Window 3: btop
└── Window 4: Neovim
Mac mini에서는 Ghostty를 로컬 터미널로도 사용할 수 있다.
다만 MacBook에서 SSH로 접속하는 상황에서는 Mac mini에 Ghostty 앱이 실행 중일 필요가 없다. SSH가 연결되면 원격 셸과 tmux를 활용할 수 있기 때문이다.
반대로 Mac mini의 전체 데스크톱 화면을 직접 조작해야 한다면 Jump Desktop 같은 원격 데스크톱 도구를 활용하면 된다.
SSH와 원격 데스크톱은 서로 다른 목적의 도구다.
8. SSH 접속할 때 발생할 수 있는 문제
Ghostty에서 SSH를 사용하다 보면 원격 서버에서 다음과 같은 오류를 만날 수 있다.
unknown terminal type: xterm-ghostty
또는:
Error opening terminal: xterm-ghostty.
왜 이런 오류가 발생할까?
터미널 프로그램은 TERM 환경 변수를 통해 자신이 어떤 기능을 지원하는지 알린다.
Ghostty에서는 일반적으로 다음 값이 사용된다.
echo $TERM
xterm-ghostty
문제는 일부 원격 서버가 xterm-ghostty의 터미널 정보(terminfo)를 가지고 있지 않을 수 있다는 것이다.
이때 vim, nano, top처럼 터미널 기능을 활용하는 프로그램에서 오류가 발생할 수 있다.
임시 해결 방법
원격 서버에 접속한 뒤 다음 명령어를 실행할 수 있다.
export TERM=xterm-256color
이렇게 하면 해당 셸에서는 보다 범용적인 터미널 유형을 사용하게 된다.
단, Ghostty 전용 기능 중 일부는 사용할 수 없을 수 있다.
Ghostty의 SSH 통합 기능 활용
Ghostty에서는 SSH 연결 시 터미널 정보를 전달하거나 설치하도록 도와주는 셸 통합 기능도 제공한다.
설정 파일에 다음 옵션을 추가할 수 있다.
shell-integration-features = ssh-env,ssh-terminfo
이 기능은 SSH 환경 변수의 호환성을 처리하고, 필요한 경우 원격 호스트에 Ghostty의 terminfo 정보를 설치하도록 돕는다.
다만 원격 시스템의 설정을 변경할 수 있으므로 관리 권한이 있는 서버에서 사용하는 편이 좋다.
특히 업무용 서버나 다른 사람이 관리하는 서버라면 관련 정책을 확인해야 한다.
9. Ghostty와 WezTerm, 어느 쪽이 더 좋을까?
Ghostty를 살펴보다 보면 WezTerm도 자연스럽게 비교 대상에 올라온다.
둘 다 GPU 가속을 지원하는 고급 터미널이지만 지향점은 조금 다르다.
| 항목 | Ghostty | WezTerm |
|---|---|---|
| 설정 방식 | 간단한 텍스트 설정 | Lua |
| 주요 장점 | 가벼운 사용 경험, 네이티브 UI | 고급 자동화와 커스터마이징 |
| 화면 분할 | 지원 | 지원 |
| 자체 멀티플렉서 | 없음 | 제공 |
| SSH 연결 | 일반 SSH 및 통합 기능 | SSH 도메인 기능 |
| 설정 난이도 | 비교적 낮음 | 상대적으로 높음 |
WezTerm은 Lua를 통해 다양한 동작을 세밀하게 구성할 수 있고 자체 멀티플렉서 기능도 제공한다.
반면 Ghostty는 비교적 간단한 설정으로 빠르게 개발 환경을 구성하는 데 초점을 맞추고 있다.
이미 tmux를 사용할 계획이라면 WezTerm의 멀티플렉서 기능까지 학습할 필요는 없을 수 있다.
따라서 지금 내 환경에서는 Ghostty + tmux 조합이 더 단순하고 목적에 맞아 보인다.
물론 이것이 모든 사용자에게 Ghostty가 더 좋다는 의미는 아니다.
복잡한 워크스페이스 자동화나 Lua 기반 구성이 필요하다면 WezTerm도 훌륭한 선택이다.
10. 설치 후 알아두면 좋은 점
10.1 기존 zsh 설정은 그대로 사용한다
Ghostty는 새로운 셸이 아니다.
따라서 기존에 사용하던 .zshrc 설정은 대부분 그대로 유지된다.
cat ~/.zshrc
Oh My Zsh, PATH, alias, 자동완성 설정 등이 여기에 들어 있다면 Ghostty에서도 활용할 수 있다.
10.2 폰트를 설치했는데 아이콘이 깨진다면?
폰트 설치와 적용은 별개의 과정이다.
Nerd Font가 설치되어 있어도 Ghostty가 다른 글꼴을 사용하고 있다면 원하는 아이콘이 표시되지 않을 수 있다.
설정 파일에서 다음 항목을 확인하자.
font-family = JetBrainsMono Nerd Font
설정을 다시 읽거나 Ghostty를 재시작해 확인한다.
10.3 tmux와 Ghostty의 분할 기능은 구분해서 사용한다
로컬에서 간단히 로그와 명령어를 동시에 보려면 Ghostty 분할 기능만으로도 충분하다.
하지만 SSH로 원격 접속해 장시간 유지해야 하는 작업이라면 tmux가 유리하다.
특히 같은 화면 안에서 Ghostty와 tmux의 화면 분할 기능을 지나치게 중첩하면 단축키와 화면 관리가 오히려 복잡해질 수 있다.
상황에 따라 하나의 분할 방식을 중심으로 사용하는 것이 좋겠다.
10.4 기본 터미널은 굳이 삭제하지 않는다
Ghostty를 설치하더라도 macOS 기본 Terminal.app은 그대로 두는 편이 좋다.
Ghostty 설정에 문제가 생기거나 새로운 버전에서 예상하지 못한 오류가 발생했을 때 기본 터미널을 통해 문제를 해결할 수 있기 때문이다.
11. 마치며
처음에는 터미널을 바꾼다는 것이 단순히 검은 화면을 조금 더 예쁘게 꾸미는 일이라고 생각했다.
하지만 Ghostty와 tmux를 살펴보면서 터미널 환경을 구성하는 일에도 나름의 기준이 필요하다는 생각이 들었다.
Ghostty는 화면을 효율적으로 다루는 역할에 집중하고, tmux는 세션을 유지하고 관리하는 역할을 맡는다.
SSH는 원격 컴퓨터에 접속하는 통로가 되고, Jump Desktop은 GUI가 필요한 순간에 활용한다.
각 도구가 해결하는 문제가 조금씩 다른 것이다.
지금 구성하려는 Mac mini 개발 환경에서는 다음 조합을 중심으로 사용해 볼 생각이다.
Ghostty + tmux + SSH(Tailscale) + Neovim + btop
모든 기능을 갖춘 하나의 프로그램을 찾기보다는, 역할이 분명한 도구를 적절하게 조합하는 편이 장기적으로 유지보수하기에도 좋을 것 같다.
그리고 한 가지 더.
개발 도구를 꾸미는 일은 재미있지만, 설정을 꾸미는 데 개발하는 시간보다 더 많은 시간을 쓰게 되는 것은 경계해야겠다.
어쨌든 터미널은 예쁘게 만들려고 사용하는 것이 아니라 개발을 더 편하게 하려고 사용하는 도구니까.
이 글이 macOS 기본 터미널에서 Ghostty로 넘어가려는 누군가에게 도움이 되었으면 좋겠다.
P.S. 개발 환경 설정은 분명 한 번만 하려고 시작했는데, 왜 끝이 없는 걸까?