VSCode 여러 개 띄우던 개발자가 Ghostty + lazygit + Claude Code로 갈아탄 이유
VSCode를 여러 개 띄워 Git Graph와 코드를 보던 습관을 Ghostty + lazygit + Claude Code 조합으로 바꿨습니다. 같은 작업, 20배 적은 리소스. 설치부터 워크플로우까지 정리합니다.
1. 문제 상황
VSCode를 여러 개 띄우면 메모리가 녹는다
프로젝트별로 VSCode를 하나씩 열어서 작업하고 있었습니다. Git Graph 확장으로 브랜치 시각화, 변경사항 확인, 코드 편집까지 VSCode 하나로 모든 걸 해결하고 있었죠.
문제는 프로젝트가 늘어날 때였습니다.
VSCode (프로젝트 A) → ~800MB RAM
VSCode (프로젝트 B) → ~800MB RAM
VSCode (프로젝트 C) → ~800MB RAM
VSCode (프로젝트 D) → ~800MB RAM
────────────────────────────────
합계 → ~3.2GB RAM (확장 포함 시 더 많음)
VSCode는 Electron 기반이라 인스턴스 하나당 별도의 Chromium 프로세스가 뜹니다. 4개를 띄우면 사실상 Chrome 탭 4개를 추가로 여는 것과 비슷합니다. macOS의 Activity Monitor를 열어보면 Code Helper (Renderer) 프로세스가 수십 개씩 뜨는 걸 볼 수 있습니다.
실제로 필요한 기능은 무엇이었나
VSCode를 쓰는 이유를 정리해봤습니다:
- Git Graph: 브랜치 그래프 시각화, 커밋 히스토리 확인
- Git Diff: 변경사항 확인, 스테이징
- 코드 편집: 파일 열어서 직접 수정
- 터미널: 빌드, 테스트 실행
여기서 3번(코드 편집)은 Claude Code가 대신해주고 있었습니다. 결국 Git 시각화와 터미널을 위해 800MB짜리 에디터를 띄우고 있던 셈입니다.
목표
Git 시각화 + 변경사항 확인 + 터미널 작업을 유지하면서
리소스 사용량을 최소화한다.
2. 해결 방법: Ghostty + lazygit + delta
도구 선택 과정
터미널 에뮬레이터부터 골라야 했습니다. 후보를 비교해봤습니다.
| Ghostty | Warp | Kitty | iTerm2 | WezTerm | |
|---|---|---|---|---|---|
| 엔진 | 네이티브 (Zig) | Rust | C + Python | Objective-C | Rust |
| GPU 가속 | O | O | O | X | O |
| 리소스 | 최경량 | 중간 | 가벼움 | 중간 | 가벼움 |
| 설정 방식 | 텍스트 파일 | GUI | 텍스트 파일 | GUI | Lua 스크립트 |
| AI 기능 | 없음 | 내장 | 없음 | 없음 | 없음 |
| 레이아웃 프리셋 | 미지원 | 지원 | 지원 | 지원 | Lua로 자유 정의 |
| 가격 | 무료/오픈소스 | 개인 무료 | 무료/오픈소스 | 무료 | 무료/오픈소스 |
Ghostty를 선택한 이유:
- macOS 네이티브 렌더링으로 체감될 정도로 가볍고 빠름
- Claude Code의 Shift+Enter가 별도 설정 없이 네이티브 지원
- Anthropic 개발자들도 사용하는 터미널이라는 점에서 Claude Code와의 호환성이 검증됨
- 탭 + 분할(split)로 멀티 프로젝트 작업 가능
"VS Code's terminal is too unstable, had plenty of freezes when pasting in large amounts of text. Nothing beats Ghostty." — Peter Steinberger
WezTerm이 아쉬웠던 점:
WezTerm은 Lua로 레이아웃 프리셋을 정의할 수 있어서 "탭 열면 자동으로 분할 + 명령 실행"이 가능합니다. Ghostty에는 아직 이 기능이 없습니다(관련 논의). 하지만 수동으로 Cmd+D 한 번 누르는 것과 자동화의 차이는 크지 않았고, Ghostty의 가벼움이 더 매력적이었습니다.
최종 도구 구성
┌─────────────────────────────────────────────────────┐
│ Ghostty (터미널 에뮬레이터) │
│ ├── lazygit → Git 시각화 (VSCode Git Graph 대체) │
│ ├── delta → Git diff 출력 강화 │
│ └── Claude Code → 코드 편집 + AI 어시스턴트 │
└─────────────────────────────────────────────────────┘
| 역할 | 기존 (VSCode) | 변경 후 |
|---|---|---|
| Git 그래프 | Git Graph 확장 | lazygit |
| Git Diff | VSCode diff viewer | delta (lazygit 내부에서도 적용) |
| 코드 편집 | VSCode 에디터 | Claude Code |
| 터미널 | VSCode 내장 터미널 | Ghostty |
| 리소스 (4개 프로젝트) | ~3.2GB+ | ~200MB |
3. 설치 및 설정
3-1. Ghostty 설치
brew install --cask ghostty
설치 후 Applications에서 Ghostty를 실행하거나 Spotlight에서 검색하면 됩니다.
3-2. lazygit 설치
brew install lazygit
아무 Git 프로젝트 디렉토리에서 lazygit을 입력하면 바로 실행됩니다.
cd ~/my-project
lazygit
lazygit을 처음 실행하면 이런 화면을 볼 수 있습니다:
┌─ Status ──────┐┌─ Files ──────────────────────────────────┐
│ (1↑) main ││ M src/components/Header.tsx │
│ ││ M src/pages/index.tsx │
│ ││ ?? src/utils/helpers.ts │
├─ Branches ────┤├─ Diff ──────────────────────────────────┤
│ * main ││ - const title = "Hello" │
│ feature/auth││ + const title = "Hello World" // ← 변경점 │
│ fix/bug-123 ││ │
├─ Commits ─────┤│ │
│ abc1234 fix.. ││ │
│ def5678 add.. ││ │
│ ghi9012 init ││ │
└───────────────┘└─────────────────────────────────────────┘
왼쪽 패널에서 브랜치, 커밋, 파일 상태를 한눈에 볼 수 있고, 오른쪽에서 diff가 실시간으로 표시됩니다. VSCode의 Git Graph + Source Control을 하나로 합쳐놓은 느낌입니다.
3-3. git-delta 설치 및 설정
brew install git-delta
delta는 설치만으로는 동작하지 않습니다. Git에 pager로 등록해야 합니다.
# delta를 git의 기본 pager로 설정
git config --global core.pager delta
# 인터랙티브 모드에서도 delta 사용
git config --global interactive.diffFilter "delta --color-only"
# delta 설정
git config --global delta.navigate true # n/N 키로 파일 간 이동
git config --global delta.side-by-side true # 좌우 분할 diff
# merge conflict 시 3-way diff 표시
git config --global merge.conflictstyle diff3
# 코드 이동 감지 활성화
git config --global diff.colorMoved default
설정이 완료되면 ~/.gitconfig에 다음과 같이 추가됩니다:
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
navigate = true
side-by-side = true
[merge]
conflictstyle = diff3
[diff]
colorMoved = default
이후 git diff, git log -p, git show 등을 실행하면 자동으로 delta가 적용됩니다. lazygit 안에서도 diff 출력에 delta가 적용되므로 별도 설정 없이 syntax highlighting과 side-by-side view를 볼 수 있습니다.
Before/After: git diff 출력 비교
Before (기본 git diff):
- const API_URL = "http://localhost:3000"
+ const API_URL = process.env.NEXT_PUBLIC_API_URL || "http://localhost:3000"
흰색/빨강/초록 텍스트만 나옵니다. 어떤 부분이 변경되었는지 눈으로 찾아야 합니다.
After (delta 적용):
│ src/config.ts │
├──────────────────────────────────┬───────────────────────────────┤
│ Before │ After │
├──────────────────────────────────┼───────────────────────────────┤
│ const API_URL = "http://local…" │ const API_URL = │
│ │ process.env.NEXT_PUBLIC_… ← │
│ │ || "http://localhost:3000" │
└──────────────────────────────────┴───────────────────────────────┘
좌우 분할로 Before/After가 명확하고, 변경된 단어 단위로 하이라이팅됩니다.
4. 워크플로우: 탭 = 프로젝트
핵심 개념
Ghostty의 탭 하나가 프로젝트 하나입니다. 각 탭 안에서 화면을 분할(split)해서 lazygit과 Claude Code를 나란히 띄웁니다.
Ghostty
├── 탭1 (프로젝트 A)
│ ├── 왼쪽 분할: Claude Code
│ └── 오른쪽 분할: lazygit
│
├── 탭2 (프로젝트 B)
│ ├── 왼쪽 분할: Claude Code
│ └── 오른쪽 분할: lazygit
│
└── 탭3 (프로젝트 C)
├── 왼쪽 분할: Claude Code
└── 오른쪽 분할: lazygit
새 프로젝트 시작 루틴
# 1. 새 탭 열기: Cmd+T
# 2. 프로젝트 디렉토리로 이동
cd ~/projects/my-project
# 3. 좌우 분할: Cmd+D
# 4. 오른쪽 분할에서 lazygit 실행
lazygit
# 5. 왼쪽 분할로 이동: Cmd+Option+←
# 6. Claude Code 실행
claude
6단계처럼 보이지만, 실제로는 10초 안에 끝납니다.
Ghostty 필수 단축키
| 동작 | 단축키 |
|---|---|
| 탭 | |
| 새 탭 | Cmd+T |
| 탭 닫기 | Cmd+W |
| 탭 이동 | Cmd+1 ~ Cmd+9 |
| 이전/다음 탭 | Cmd+Shift+[ / Cmd+Shift+] |
| 분할 | |
| 좌우 분할 | Cmd+D |
| 상하 분할 | Cmd+Shift+D |
| 분할 간 이동 | Cmd+Option+방향키 |
| 분할 크기 조절 | Cmd+Ctrl+방향키 |
| 분할 균등 정렬 | Cmd+Ctrl+= |
| 현재 분할 줌 토글 | Cmd+Shift+Enter |
| 일반 | |
| 전체화면 토글 | Cmd+Enter |
| 화면 클리어 | Cmd+K |
| 폰트 크기 조절 | Cmd++ / Cmd+- |
| 설정 파일 열기 | Cmd+, |
| 설정 리로드 | Cmd+Shift+, |
특히 Cmd+Shift+Enter (분할 줌 토글) 는 유용합니다. lazygit에서 복잡한 diff를 볼 때 전체 화면으로 확대했다가, 다시 축소하는 것이 가능합니다.
lazygit 필수 단축키
| 동작 | 단축키 |
|---|---|
| 패널 이동 | h / l 또는 ← / → |
| 항목 이동 | j / k 또는 ↑ / ↓ |
| 파일 스테이징 | Space |
| 전체 스테이징 | a |
| 커밋 | c |
| 커밋 (에디터) | C |
| 브랜치 체크아웃 | Space (브랜치 패널에서) |
| 새 브랜치 | n (브랜치 패널에서) |
| 푸시 | P |
| 풀 | p |
| 레포 전환 | ) |
| 도움말 | ? |
| 종료 | q |
lazygit에서 방향키도 지원하므로 Vim 키바인딩을 모르더라도 바로 사용할 수 있습니다.
5. Ghostty 설정 커스터마이즈
Ghostty의 설정 파일은 ~/.config/ghostty/config에 위치합니다.
# 설정 디렉토리 생성 (최초 1회)
mkdir -p ~/.config/ghostty
기본 설정 예시
# ~/.config/ghostty/config
# 폰트 설정
font-family = "JetBrains Mono"
font-size = 14
# 테마 (내장 테마 목록: ghostty +list-themes)
theme = catppuccin-mocha
# 창 설정
window-padding-x = 10
window-padding-y = 10
window-decoration = true
# 커서
cursor-style = block
cursor-style-blink = false
# 스크롤백 버퍼
scrollback-limit = 10000
설정을 변경한 후 Cmd+Shift+,를 누르면 Ghostty를 재시작하지 않고도 즉시 반영됩니다.
사용 가능한 테마 목록은 터미널에서 확인할 수 있습니다:
ghostty +list-themes
추가 커스터마이즈가 필요 없는 이유
Ghostty는 "zero config" 철학을 따릅니다. 기본값이 이미 잘 잡혀 있어서, 폰트와 테마 정도만 바꾸면 대부분의 사용자에게 충분합니다. 분할 이동(Cmd+Option+방향키), 탭 관리(Cmd+T/W/1~9) 등 핵심 단축키가 모두 기본 제공됩니다.
6. Claude Code와의 시너지
Shift+Enter 네이티브 지원
Claude Code에서 여러 줄을 입력할 때 Shift+Enter로 줄바꿈을 합니다. Ghostty는 이 키조합을 별도 설정 없이 지원합니다.
다른 터미널에서는 /terminal-setup 명령을 실행하거나 수동으로 키바인딩을 설정해야 하지만, Ghostty에서는 설치하자마자 바로 동작합니다.
지원 터미널 (설정 불필요): Ghostty, iTerm2, WezTerm, Kitty
설정 필요: VS Code, Alacritty, Zed, Warp
알림(Notification) 지원
Claude Code가 오래 걸리는 작업을 수행할 때, 완료 알림을 macOS 알림 센터로 받을 수 있습니다. Ghostty는 이 기능도 네이티브로 지원합니다.
대용량 텍스트 안정성
VSCode 터미널에서는 대량의 텍스트를 붙여넣을 때 프리징이 발생하는 경우가 있습니다. Claude Code가 긴 코드를 출력하거나, 로그를 대량으로 표시할 때 Ghostty는 GPU 가속 렌더링 덕분에 끊김 없이 처리합니다.
7. 핵심 개념 정리
도구별 역할 요약
| 도구 | 역할 | 대체 대상 | 설치 |
|---|---|---|---|
| Ghostty | 터미널 에뮬레이터 | VSCode 창 | brew install --cask ghostty |
| lazygit | Git TUI 클라이언트 | Git Graph 확장 | brew install lazygit |
| git-delta | Diff 출력 강화 | VSCode diff viewer | brew install git-delta |
| Claude Code | AI 코드 편집 | VSCode 에디터 | npm install -g @anthropic/claude-code |
git-delta는 왜 필요한가?
"lazygit이 diff를 보여주는데 delta가 왜 필요하지?"라고 생각할 수 있습니다.
delta는 독립 실행하는 프로그램이 아닙니다. Git의 pager로 등록되어 git diff, git log -p 등의 출력을 자동으로 꾸며주는 역할입니다. 그리고 lazygit도 내부적으로 Git 명령어를 사용하므로, delta가 설정되어 있으면 lazygit 안의 diff에도 자동 적용됩니다.
delta 미설치: lazygit diff → 기본 색상 (빨강/초록)
delta 설치: lazygit diff → syntax highlighting + side-by-side + 단어 단위 변경 표시
Neovim/Helix는 필요 없는가?
| 도구 | 용도 | 필요한 경우 |
|---|---|---|
| Neovim | 터미널 코드 에디터 | 코드를 직접 편집할 일이 많을 때 |
| Helix | 터미널 코드 에디터 (모던) | Neovim보다 쉬운 진입점을 원할 때 |
Claude Code가 코드 편집을 담당하므로, 에디터는 선택사항입니다. 코드를 눈으로 확인만 하고 싶다면 lazygit의 diff 뷰나 bat (syntax highlighting이 적용된 cat)으로 충분합니다.
# bat 설치 (선택사항)
brew install bat
# 사용법
bat src/index.ts # syntax highlighting + 줄번호로 파일 확인
8. 베스트 프랙티스
프로젝트 시작 체크리스트
- [ ] Ghostty에서
Cmd+T로 새 탭 생성 - [ ]
cd로 프로젝트 디렉토리 이동 - [ ]
Cmd+D로 좌우 분할 - [ ] 한쪽에서
lazygit, 다른 쪽에서claude실행 - [ ] 작업 시작
프로젝트 간 전환
탭 단위로 프로젝트가 분리되어 있으므로 Cmd+1~9로 즉시 전환됩니다. VSCode에서 창을 찾아 클릭하는 것보다 훨씬 빠릅니다.
lazygit 레포 전환
동일한 탭 내에서 다른 Git 레포를 열고 싶을 때는 lazygit에서 ) 키를 누르면 최근 열었던 레포 목록이 표시됩니다.
분할 줌 활용
lazygit에서 복잡한 diff를 볼 때 Cmd+Shift+Enter로 해당 분할을 전체화면으로 확대할 수 있습니다. 확인이 끝나면 다시 Cmd+Shift+Enter로 원래 크기로 돌아옵니다.
9. FAQ
Q: Ghostty 설정 파일은 어디에 있나요?
A: ~/.config/ghostty/config에 위치합니다. 없으면 직접 생성하면 됩니다. mkdir -p ~/.config/ghostty && touch ~/.config/ghostty/config로 만들 수 있습니다.
Q: lazygit에서 Vim 키바인딩을 꼭 써야 하나요?
A: 아닙니다. 방향키(↑↓←→)로도 모든 탐색이 가능합니다. Space로 스테이징, c로 커밋 등 자주 쓰는 동작은 단일 키라서 금방 익숙해집니다.
Q: delta를 설치했는데 lazygit에 적용이 안 됩니다.
A: ~/.gitconfig에 [core] pager = delta가 설정되어 있는지 확인하세요. lazygit은 Git의 pager 설정을 자동으로 따릅니다. git config --global core.pager로 현재 설정을 확인할 수 있습니다.
Q: VSCode를 완전히 삭제해야 하나요?
A: 아닙니다. 코드를 직접 눈으로 보며 편집해야 할 때 VSCode를 가끔 여는 것은 좋은 전략입니다. 핵심은 항상 띄워놓는 습관을 버리는 것입니다. 필요할 때만 열고, 끝나면 닫으세요.
Q: WezTerm이 레이아웃 자동화가 되는데 왜 Ghostty를 선택했나요?
A: WezTerm의 Lua 기반 레이아웃 프리셋은 매력적이지만, Ghostty의 Cmd+D 한 번이면 끝나는 수동 분할과 비교했을 때 자동화의 이점이 크지 않았습니다. 대신 Ghostty가 제공하는 네이티브 macOS 렌더링, 극도의 가벼움, Claude Code 네이티브 지원이 더 실용적이었습니다.
10. 참고 자료
- Ghostty 공식 사이트
- Ghostty 키바인딩 설정 문서
- lazygit GitHub
- git-delta GitHub
- Claude Code 터미널 설정 가이드
- Daniel Miessler - Claude Code + Neovim + Ghostty 통합
- Peter Steinberger - AI 개발 워크플로우