Fall in IT.

tmux를 사용해서 Claude Code 사용성을 높여보자 본문

Artificial Intelligence

tmux를 사용해서 Claude Code 사용성을 높여보자

D.Y 2026. 3. 20. 08:56
반응형

Claude Code를 로컬 맥 환경에서 처음 쓰는 개발자 대부분은 iTerm2를 열고, 그 안에서 claude 명령어를 실행한다. 작동은 한다. 그러나 iTerm2 창을 닫거나 맥을 재시작하는 순간 진행 중이던 작업 세션과 작업환경은 사라진다. (세션이야 resume 명령어로 다시 불러올 수 있다. 하지만, 작업환경은 사라진다.) 백엔드 엔지니어들이 tmux를 사용하는 본질적인 이유가 바로 여기에 있다.

이 글은 두 개념을 명확히 구분하고, tmux가 왜 생산성을 높이는지, 현업에서 어떻게 쓰이는지를 실제 사례와 함께 설명한다.

 

1. 개념 구분: 터미널 클라이언트 vs tmux

터미널 클라이언트란 무엇인가

iTerm2, Terminal.app, Warp 같은 도구는 터미널 클라이언트다. 이 도구들의 역할은 단 하나다 — 사용자가 입력한 키스트로크를 셸로 전달하고, 셸의 출력을 화면에 렌더링한다. 마치 텍스트 전용 브라우저와 같다. 브라우저가 HTML을 시각적으로 표현하듯, 터미널 클라이언트는 문자 스트림을 시각적으로 표현한다.

핵심은 이것이다. 터미널 클라이언트는 프로세스를 소유하지 않는다. 창을 닫으면 그 안에서 실행 중이던 프로세스는 종료된다. 창이 곧 세션이고, 세션이 곧 프로세스의 생애 주기다.

tmux란 무엇인가

tmux는 **터미널 멀티플렉서(Terminal Multiplexer)**다. 터미널 클라이언트와 전혀 다른 계층에 존재한다.

tmux는 OS 위에서 독립적인 서버 프로세스로 동작한다. 이 서버가 **세션(session)**을 관리한다. 세션 안에는 여러 **윈도우(window)**가 있고, 하나의 윈도우는 여러 **팬(pane)**으로 분할될 수 있다. 중요한 것은 이 세션이 터미널 클라이언트와 완전히 독립되어 있다는 점이다.

iTerm2로 tmux 세션에 접속(attach)하면, iTerm2는 단순히 그 세션의 출력을 보여주는 뷰어에 불과해진다. iTerm2를 닫아도 tmux 세션은 OS 백그라운드에서 살아 있다. 언제든 다시 접속(re-attach)하면 작업은 그대로다.

비유하자면: iTerm2는 TV이고, tmux는 방송국이다. TV를 꺼도 방송은 계속된다. TV를 다시 켜면 방송을 이어서 볼 수 있다.

 

2. 왜 tmux가 생산성을 높이는가

백엔드 엔지니어들이 tmux를 사용하는 이유는 단순히 "여러 창을 열 수 있어서"가 아니다. 본질적인 이유는 세 가지다.

세션의 영속성

서버 작업을 하는 백엔드 개발자는 배포, 빌드, 테스트를 원격 서버에서 장시간 실행한다. SSH 연결이 끊기거나 노트북 덮개를 닫아도 작업은 계속 실행되어야 한다. tmux가 없으면 프로세스가 즉시 종료된다. tmux가 있으면 세션이 서버에 살아 있고, 나중에 다시 접속해 결과를 확인한다.

Claude Code 관점에서 이것은 결정적이다. 대규모 코드베이스 분석이나 멀티 스텝 작업을 Claude Code에게 맡겨 놓고 자리를 비울 수 있다. 맥 화면이 꺼지거나 iTerm2가 강제 종료되어도 작업은 계속 진행된다.

컨텍스트 전환 비용 제거

일반적인 개발 흐름을 생각해보자. Claude Code로 코드를 생성하면서, 동시에 Git 로그를 확인하고, 서버 로그를 모니터링하고, 테스트를 실행해야 한다. iTerm2만 사용하면 각 작업마다 탭을 전환하거나 창을 새로 열어야 한다. 멘탈 컨텍스트가 분산된다.

tmux에서는 단일 화면을 여러 팬으로 분할한다. 왼쪽에 Claude Code, 오른쪽 위에 파일 트리, 오른쪽 아래에 테스트 결과가 동시에 보인다. 물리적으로 같은 화면에 모든 컨텍스트가 존재한다.

작업 단위의 격리

프로젝트별로 tmux 세션을 분리하면 작업 단위가 명확해진다. ebs-backend 세션에서는 EBR 시스템 개발만, devops 세션에서는 인프라 작업만 진행한다. 세션을 전환하는 것은 프로젝트를 전환하는 것이다. 각 세션의 상태는 완전히 독립적으로 보존된다.

 

3. 현업 개발자들은 tmux를 어떻게 사용하는가

기본 구조 설계

현업에서 사용하는 tmux 구조는 대체로 다음 패턴을 따른다.

세션: project-name
  ├── window 0: main     — Claude Code 실행
  ├── window 1: git      — git 작업, 브랜치 관리
  ├── window 2: server   — 개발 서버 실행
  └── window 3: logs     — 서버 로그 모니터링

하나의 프로젝트가 하나의 세션이다. 세션 안의 윈도우는 역할로 구분한다.

필수 단축키 (실전 기준)

tmux의 모든 명령은 프리픽스 키 이후에 입력한다. 기본값은 Ctrl + b다.

작업단축키
새 세션 생성 tmux new -s project-name
세션 목록 확인 tmux ls
세션 재접속 tmux attach -t project-name
새 윈도우 Ctrl+b c
다음 윈도우 Ctrl+b n
화면 수직 분할 Ctrl+b %
화면 수평 분할 Ctrl+b "
팬 간 이동 Ctrl+b 방향키
세션 분리 (detach) Ctrl+b d

현업 개발자 대부분은 Ctrl+b 대신 Ctrl+a로 프리픽스를 재설정한다. ~/.tmux.conf에 한 줄 추가로 변경 가능하다.

# ~/.tmux.conf
set-option -g prefix C-a
unbind-key C-b
bind-key C-a send-prefix

Claude Code와 함께하는 실전 워크플로우

아침에 맥을 켰을 때 tmux를 사용하는 개발자의 루틴은 다음과 같다.

# 어제 작업하던 세션으로 복귀
tmux attach -t ebs-backend

# → 어제 실행 중이던 Claude Code가 그대로 실행 중
# → git 윈도우에는 어제 마지막 커밋 상태가 그대로
# → 서버 로그 윈도우에는 밤새 발생한 로그가 쌓여 있음

세션을 새로 만드는 것이 아니라, 어제 작업 상태로 그대로 복귀한다. 이것이 tmux 사용자와 비사용자의 첫 번째 차이다.

 

4. 대표 사례: Claude Code 멀티 에이전트 작업

다음은 Claude Code를 tmux와 함께 사용할 때 나타나는 대표적인 패턴이다.

시나리오: EBR 시스템의 API 레이어와 DB 스키마를 동시에 작업한다.

# 세션 생성
tmux new -s ebr-dev

# window 0: orchestrator Claude Code
claude --model claude-opus-4-6

# Ctrl+b c → window 1 생성: subagent Claude Code
claude --model claude-sonnet-4-6

# Ctrl+b c → window 2 생성: 파일 변경 감시
watch -n 2 'git diff --stat'

# Ctrl+b c → window 3 생성: 테스트 자동 실행
pytest --watch

Opus가 전체 아키텍처를 설계하는 동안, Sonnet이 개별 컴포넌트를 구현한다. watch가 파일 변경을 실시간으로 보여주고, pytest가 변경 즉시 테스트를 돌린다. 이 모든 것이 단일 터미널 화면에서, 세션이 끊기지 않고, 동시에 진행된다.

iTerm2만 사용했다면 이 중 어느 하나에 집중할 때 나머지 세 개의 컨텍스트를 탭 전환으로 잃어가며 작업해야 했을 것이다.

 

정리

터미널 클라이언트는 화면을 렌더링하는 도구다. tmux는 세션을 관리하는 OS 레벨 서버다. 이 둘은 같은 계층에 있지 않다.

tmux가 백엔드 엔지니어 사이에서 표준으로 자리 잡은 이유는 화려한 기능 때문이 아니다. 세션의 영속성, 컨텍스트의 동시 가시성, 작업 단위의 격리 — 이 세 가지가 장시간 복잡한 작업을 수행하는 개발자의 흐름을 유지시키기 때문이다.

Claude Code를 진지하게 사용한다면, tmux는 선택이 아니라 인프라다.

반응형
Comments