터미널tmux

Claude Code를 동시에 여러 개 돌리는 멀티 세션 셋업 — tmux와 cmux

2026.04.17

한 화면에서 여러 세션을 동시에 돌리는 멀티 세션 셋업 일러스트

한 작업에 한 터미널이면 손해다

Claude Code를 한 세션만 띄워놓고 작업하면 답답한 순간이 자주 온다. AI가 뭔가 5분짜리 작업을 하는 동안 나는 그저 기다린다. 그동안 다른 일을 같이 하면 처리량이 두 배가 된다.

처음에는 Warp 탭을 여러 개 열었다. 탭이 5개 넘어가면 어디에 뭐가 떠 있는지 잊어버린다. 그래서 cmux로 옮겼고, 그 위에 tmux를 얹는 구성을 알아봤다.

이 글은 한 화면에서 Claude Code 인스턴스 셋과 dev 서버를 같이 돌리는 셋업이다. 끝에는 이 중 어디까지가 실제로 필요했는지도 적어뒀다.

왜 tmux와 cmux를 같이 쓰는가

둘 다 터미널 관련 도구라서 헷갈릴 수 있다. 역할이 다르다.

  • cmux: 터미널 에뮬레이터(앱). Warp, iTerm 같은 것의 대체재. GPU 가속, 색감, 폰트 렌더링이 좋다.
  • tmux: 터미널 멀티플렉서. 한 터미널 안에서 패널 분할, 세션 관리, 백그라운드 유지를 한다.

cmux가 "창"이라면 tmux는 "그 창 안의 격자"다. 둘은 충돌하지 않고 자연스럽게 합쳐진다.

기본 셋업

설치는 brew 한 줄이다.

brew install tmux

~/.tmux.conf에 최소 설정:

# prefix를 Ctrl+A로 (Ctrl+B는 다른 도구와 자주 충돌)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
 
# 마우스 지원 (패널 클릭, 리사이즈)
set -g mouse on
 
# 패널 분할을 직관적으로
bind | split-window -h
bind - split-window -v
 
# 패널 이동을 vim 키로
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
 
# 패널 리사이즈
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
 
# 색상 지원
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"
 
# 창 번호 1부터 시작
set -g base-index 1

tmux source ~/.tmux.conf로 적용한다.

4분할 작업 화면

제일 많이 쓰이는 레이아웃이다. 한 창을 4분할해서 각각 다른 일을 시킨다.

┌─────────────────┬─────────────────┐
│                 │                 │
│  Claude Code 1  │  Claude Code 2  │
│  (frontend)     │  (backend)      │
│                 │                 │
├─────────────────┼─────────────────┤
│                 │                 │
│  Dev Server     │  Logs / Tests   │
│                 │                 │
└─────────────────┴─────────────────┘

수동으로 만들 수도 있지만, 매번 같은 레이아웃이면 스크립트로 만든다.

#!/bin/bash
# ~/bin/start-dev-layout.sh
 
cd ~/joowonkoh-dev
tmux new-session -d -s dev
 
# 4분할
tmux split-window -h
tmux split-window -v
tmux select-pane -t 0
tmux split-window -v
 
# 각 패널에 명령
tmux send-keys -t dev:0.0 'claude' C-m       # 좌상: Claude Code 1
tmux send-keys -t dev:0.1 'npm run dev' C-m  # 좌하: dev server
tmux send-keys -t dev:0.2 'claude' C-m       # 우상: Claude Code 2
tmux send-keys -t dev:0.3 'npm test --watch' C-m  # 우하: tests
 
tmux attach -t dev

./start-dev-layout.sh 한 번 실행하면 4분할이 자동으로 만들어진다.

Claude Code 인스턴스 분리하기

Claude Code 인스턴스 두 개를 띄우면 중요한 게 있다. 각 인스턴스가 다른 디렉토리에서 작업해야 한다. 안 그러면 같은 파일을 두 인스턴스가 동시에 수정해서 충돌이 난다.

흔한 분리 방법:

  • 좌상 인스턴스: frontend/ 폴더에서 작업
  • 우상 인스턴스: backend/ 폴더에서 작업

또는 git worktree로 같은 레포의 다른 브랜치를 두 폴더에 펼쳐서 각각 다른 인스턴스가 본다. Git Worktree 글에서 더 자세히 다룬다.

세션 자동 복원

작업하다가 노트북을 닫고 다시 열면 tmux 세션이 그대로 살아 있다. 그게 tmux의 진짜 매력이다.

tmux ls로 살아있는 세션 확인.

$ tmux ls
dev: 4 panes (created Mon Apr 17 09:00:00 2026)
blog: 2 panes (created Mon Apr 17 11:30:00 2026)

tmux attach -t dev로 다시 붙는다. 모든 패널 상태가 그대로다. 실행 중이던 dev 서버도 죽지 않았다.

리부팅하면 세션이 사라진다. 리부팅에도 살리려면 tmux-resurrect 플러그인을 쓴다.

# ~/.tmux.conf
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
 
run '~/.tmux/plugins/tpm/tpm'

prefix + Ctrl+s로 저장, prefix + Ctrl+r로 복원. 노트북 재부팅 후에도 4분할 레이아웃과 디렉토리 위치가 그대로 돌아온다.

자주 쓰는 키바인딩

prefix(Ctrl+A)를 누른 다음 입력하는 키들이다.

tmux 자주 쓰는 키바인딩prefix: Ctrl+A
|

세로 분할

-

가로 분할

h/j/k/l

패널 이동

H/J/K/L

패널 리사이즈

z

패널 줌 (한 패널을 전체화면)

c

새 창

,

창 이름 변경

d

세션에서 분리(detach)

s

세션 목록에서 선택

x

패널 닫기

prefix + z(줌)는 자주 쓴다. Claude Code 출력을 자세히 보고 싶을 때 한 패널만 키운 다음, 다시 prefix + z로 원래 레이아웃으로 돌아온다.

cmux와 합치는 팁

cmux 자체에도 분할 기능이 있다. tmux와 어떤 걸 쓸지 헷갈릴 수 있다.

기준은 이렇게 갈린다:

  • 로컬 단일 머신 작업: cmux 분할로 충분
  • 여러 SSH 세션, 백그라운드 유지, 리부팅 복원이 필요: tmux

대부분의 경우 tmux 한 가지만 깊게 익히는 게 효율적이다. cmux는 GPU 렌더링 좋은 "호스트 창"으로 쓰고, 그 안에서 tmux로 세션을 관리한다.

흔한 함정

함정 1: 두 인스턴스가 같은 파일을 건드린다

가장 자주 만나는 사고다. 좌상 Claude Code가 App.tsx를 수정하는 동안 우상도 같은 파일을 수정하면 한쪽 변경이 사라진다. 디렉토리를 분리하거나, 같은 디렉토리에서는 한 명만 쓰기 작업을 하게 한다.

함정 2: 너무 많은 패널

4분할이 기능적 최대다. 6분할쯤 가면 글자 크기가 작아져서 가독성이 떨어진다. 화면이 좁아진 만큼 한 패널에서 보는 정보도 줄어든다. 한 화면 4분할이 안전한 한계다.

함정 3: 세션 이름을 안 짓는다

tmux new-session을 그냥 치면 세션 이름이 0, 1처럼 숫자가 된다. 며칠 후 tmux ls로 보면 어떤 세션이 뭐였는지 모른다. 항상 -s 옵션으로 이름을 짓는다.

tmux new -s blog       # 블로그 작업용
tmux new -s api-fix    # API 버그 수정용

이 한 가지 습관만 들어도 세션 관리가 한결 깔끔해진다.

직접 겪은 일: 결국 tmux를 안 얹었다

셋업을 길게 적어놨지만 실토하면, 지금 내 맥에는 tmux가 없다. cmux만 쓴다.

위에 「로컬 단일 머신이면 cmux 분할로 충분」이라고 적어뒀는데, 내 경우가 정확히 거기였다. SSH로 원격에 붙어 일하지 않고, 리부팅을 넘겨서 살려둬야 하는 장기 프로세스도 없다. 그러면 tmux가 주는 것 중에 내가 받는 게 거의 없다. 세션 복원도, 분리된 백그라운드 세션도 필요가 없었다.

더 중요한 건 따로 있었다. 여러 개를 동시에 돌릴 때의 진짜 병목이 화면이 아니라 작업 공간이었다는 것이다. 위에도 적었듯 인스턴스 두 개가 같은 파일을 건드리면 한쪽 변경이 사라진다. 이 문제는 창을 아무리 잘 나눠도 안 풀린다.

풀린 방법은 git worktree였다. 같은 레포를 여러 폴더에 펼치면 각 인스턴스가 서로 안 겹치는 자리에서 일한다. 그 뒤로는 창이 몇 개든 상관없어졌고, 그러자 창을 정교하게 나눌 이유도 같이 사라졌다.

배운 건 이거다. 병목을 잘못 짚으면 맞는 도구를 깔고도 안 쓰게 된다. 화면 분할 도구를 찾고 있었는데 필요한 건 작업 공간 분리 도구였다. 둘은 겉보기에 같은 문제를 푸는 것처럼 보인다.

정리

AI 에이전트를 여러 개 동시에 돌리면 기다리는 시간이 줄어든다. 한쪽에서 5분 작업하는 동안 다른 쪽에서 다른 일을 한다. 이 방향 자체는 분명하다.

다만 그 방향으로 가는 길이 하나가 아니다. tmux를 얹는 구성은 세션을 나누는 접근이고, 아래에 적을 것처럼 작업 공간을 나누는 접근으로도 같은 곳에 도착한다.

시작점을 하나만 고른다면 이렇다. tmux conf 위 예시를 복사하고 4분할 스크립트를 하나 만들어 본다. 며칠 써보면 자기에게 필요한 게 화면 분할인지 작업 공간 분리인지가 갈린다.

같이 읽으면 좋은 글