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를 쓰는 이유를 정리해봤습니다:

  1. Git Graph: 브랜치 그래프 시각화, 커밋 히스토리 확인
  2. Git Diff: 변경사항 확인, 스테이징
  3. 코드 편집: 파일 열어서 직접 수정
  4. 터미널: 빌드, 테스트 실행

여기서 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. 참고 자료