본문 바로가기
AI.IT

tmux 사용법 정리, 터미널 생산성을 확실히 올리는 방법

by bamsik 2026. 4. 13.
반응형

tmux 완전 정복: 터미널 생산성을 극대화하는 다양한 활용법

서버에 SSH로 접속해서 작업하다가 연결이 끊겨 진행 중이던 프로세스를 잃어본 경험이 있는가? 여러 프로젝트를 동시에 작업하면서 터미널 창이 수십 개로 불어난 적은? tmux(terminal multiplexer)는 이 모든 문제를 해결하는 강력한 도구다.

이 글에서는 tmux의 기본 개념부터 실무에서 바로 활용할 수 있는 고급 워크플로우까지, 다양한 활용법을 정리한다.


1. tmux란 무엇인가

tmux는 하나의 터미널 안에서 여러 세션, 윈도우, 패인(pane)을 관리할 수 있는 터미널 멀티플렉서다. 핵심 가치는 세 가지다:

  • 세션 지속성(Persistence): 터미널을 닫거나 SSH 연결이 끊어져도 세션이 유지된다
  • 화면 분할(Multiplexing): 하나의 터미널에서 여러 작업 공간을 동시에 운용한다
  • 원격 협업(Collaboration): 같은 세션에 여러 사용자가 접속해 실시간 공동 작업이 가능하다

기본 구조

tmux server
  └── Session (세션) - 프로젝트 단위
       └── Window (윈도우) - 탭과 유사
            └── Pane (패인) - 화면 분할 영역

설치

# macOS
brew install tmux

# Ubuntu/Debian
sudo apt install tmux

# CentOS/RHEL
sudo yum install tmux

2. 핵심 키바인딩 정리

tmux의 모든 명령은 프리픽스 키(기본값: Ctrl+b) 이후 해당 키를 누르는 방식이다.

세션 관리

동작 명령
새 세션 생성 tmux new -s 세션명
세션 분리(detach) Ctrl+bd
세션 목록 tmux ls
세션 재접속 tmux attach -t 세션명
세션 전환 Ctrl+bs
세션 종료 tmux kill-session -t 세션명

윈도우 관리

동작 명령
새 윈도우 Ctrl+bc
다음/이전 윈도우 Ctrl+bn / p
윈도우 번호로 이동 Ctrl+b0-9
윈도우 이름 변경 Ctrl+b,
윈도우 닫기 Ctrl+b&

패인 관리

동작 명령
수평 분할 Ctrl+b%
수직 분할 Ctrl+b"
패인 이동 Ctrl+b → 방향키
패인 크기 조절 Ctrl+bCtrl+방향키
패인 닫기 Ctrl+bx
패인 최대화/복원 Ctrl+bz
패인 레이아웃 변경 Ctrl+bSpace

3. 실전 활용법: 개발 환경 구축

3-1. IDE 스타일 레이아웃

tmux로 Vim/Neovim + 터미널 조합의 IDE와 유사한 환경을 만들 수 있다.

# 왼쪽 80%에 에디터, 오른쪽 20%에 터미널
tmux new-session -s dev \; \
  send-keys 'nvim .' Enter \; \
  split-window -h -p 20 \; \
  split-window -v \; \
  send-keys 'npm run dev' Enter \; \
  select-pane -t 0

이렇게 하면:

  • 왼쪽: 코드 에디터 (Neovim)
  • 오른쪽 위: 빈 터미널 (git, 테스트 실행용)
  • 오른쪽 아래: 개발 서버 실행

3-2. 프로젝트별 세션 운영

프로젝트마다 별도 세션을 만들어 컨텍스트 스위칭 비용을 줄인다.

# 백엔드 프로젝트
tmux new -s backend -d
tmux send-keys -t backend 'cd ~/projects/api-server' Enter

# 프론트엔드 프로젝트
tmux new -s frontend -d
tmux send-keys -t frontend 'cd ~/projects/web-app' Enter

# 인프라 관리
tmux new -s infra -d
tmux send-keys -t infra 'cd ~/infrastructure' Enter

Ctrl+bs로 세션 목록을 열고 프로젝트 간 즉시 전환할 수 있다.

3-3. 터미널 시작 시 자동 복귀

셸 설정 파일(.bashrc, .zshrc)에 다음을 추가하면, 터미널을 열 때마다 기존 세션에 자동 복귀한다:

# 기존 세션이 있으면 attach, 없으면 새로 생성
if command -v tmux &> /dev/null && [ -z "TMUX_ENV" ]; then
  tmux attach -t main || tmux new -s main
fi

4. DevOps/서버 관리 활용

4-1. 서버 모니터링 대시보드

하나의 터미널에서 시스템 상태를 한눈에 파악하는 대시보드를 구성할 수 있다.

tmux new-session -s monitor \; \
  send-keys 'htop' Enter \; \
  split-window -h \; \
  send-keys 'tail -f /var/log/syslog' Enter \; \
  split-window -v \; \
  send-keys 'watch -n 2 df -h' Enter \; \
  select-pane -t 0 \; \
  split-window -v \; \
  send-keys 'iftop' Enter

결과 레이아웃:

+-------------------+-------------------+
|      htop         |   syslog tail     |
|  (CPU/Memory)     |   (로그 모니터)    |
+-------------------+-------------------+
|     iftop         |   df -h watch     |
|  (네트워크)        |   (디스크 사용량)  |
+-------------------+-------------------+

4-2. synchronize-panes로 다중 서버 동시 제어

여러 서버에 같은 명령을 동시에 실행해야 할 때, synchronize-panes가 진가를 발휘한다.

# 4개 서버 접속 패인 생성
tmux new-session -s servers \; \
  send-keys 'ssh web-01' Enter \; \
  split-window -h \; \
  send-keys 'ssh web-02' Enter \; \
  split-window -v \; \
  send-keys 'ssh web-03' Enter \; \
  select-pane -t 0 \; \
  split-window -v \; \
  send-keys 'ssh web-04' Enter

그 후 동기화 모드를 활성화한다:

Ctrl+b → :setw synchronize-panes on

이제 한 패인에 타이핑하면 모든 패인에 동시 입력된다. 패키지 업데이트, 설정 파일 배포, 서비스 재시작 등을 일괄 수행할 수 있다.

# 4개 서버에 동시 실행됨
sudo apt update && sudo apt upgrade -y
sudo systemctl restart nginx

동기화를 끄려면:

Ctrl+b → :setw synchronize-panes off

4-3. 장시간 실행 작업의 안전한 운용

배포, 마이그레이션, 대용량 데이터 처리 등 오래 걸리는 작업은 tmux 세션 안에서 실행하면 SSH 연결이 끊어져도 안전하다.

# 배포 세션 시작
tmux new -s deploy

# 배포 스크립트 실행
./deploy-production.sh

# 다른 작업을 위해 detach (배포는 계속 진행)
# Ctrl+b → d

# 나중에 상태 확인
tmux attach -t deploy

5. 페어 프로그래밍과 원격 협업

tmux의 클라이언트-서버 아키텍처를 활용하면 별도의 화면 공유 도구 없이 실시간 페어 프로그래밍이 가능하다.

기본 설정

# 호스트: 세션 생성
tmux new -s pair

# 게스트: 같은 서버에 SSH 접속 후 세션 연결
tmux attach -t pair

두 사용자가 같은 세션에 접속하면 모든 입력과 화면 변경이 실시간 동기화된다. 화상회의 기반 화면 공유보다 지연이 적고, 양쪽 모두 직접 코드를 편집할 수 있다.

독립적 뷰 제공 (같은 세션, 다른 윈도우)

같은 세션에 접속하되 각자 다른 윈도우를 볼 수 있도록 하려면:

# 게스트가 새 클라이언트로 연결 (독립 뷰)
tmux new-session -t pair -s pair-guest

이 방식은 같은 세션의 윈도우를 공유하면서도, 각자 다른 윈도우를 자유롭게 오갈 수 있다.

tmate: 더 쉬운 원격 공유

tmate는 tmux 기반의 즉시 공유 도구로, 별도의 서버 설정 없이 URL 하나로 세션을 공유한다:

# 설치
brew install tmate  # macOS

# 세션 시작 → 자동으로 공유 URL 생성
tmate
# ssh URL이 표시됨 → 상대방에게 전달

6. tmux 자동화: tmuxinator와 tmuxp

매번 세션을 수동으로 구성하는 건 번거롭다. tmuxinator이나 tmuxp를 사용하면 YAML 파일 하나로 복잡한 작업 환경을 즉시 복원할 수 있다.

tmuxinator

Ruby 기반의 tmux 세션 매니저로, 가장 널리 사용된다.

# 설치
gem install tmuxinator
# 또는
brew install tmuxinator

프로젝트 설정 파일 생성:

tmuxinator new myproject

~/.config/tmuxinator/myproject.yml:

name: myproject
root: ~/projects/myproject

windows:
  - editor:
      layout: main-vertical
      panes:
        - nvim
        - git status

  - server:
      panes:
        - npm run dev

  - database:
      panes:
        - docker-compose up db
        - pgcli mydb

  - logs:
      layout: even-horizontal
      panes:
        - tail -f logs/app.log
        - tail -f logs/error.log

한 명령으로 전체 환경 실행:

tmuxinator start myproject
# 또는 축약형
mux start myproject

tmuxp

Python 기반의 대안으로, 기존 tmux 세션을 YAML로 "freeze"하는 기능이 강점이다.

# 설치
pip install tmuxp

# 현재 세션을 설정 파일로 저장
tmuxp freeze myproject

# 설정 파일로 세션 복원
tmuxp load myproject.yaml

myproject.yaml 예시:

session_name: myproject
start_directory: ~/projects/myproject

windows:
  - window_name: code
    layout: main-vertical
    panes:
      - shell_command:
          - nvim .
      - shell_command:
          - npm test -- --watch

  - window_name: services
    panes:
      - shell_command:
          - docker-compose up

7. 필수 플러그인 가이드

TPM (Tmux Plugin Manager)

tmux 플러그인 생태계의 핵심. 설치 후 .tmux.conf에서 플러그인을 선언적으로 관리한다.

# 설치
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

.tmux.conf에 추가:

# 플러그인 목록
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'tmux-plugins/tmux-yank'

# TPM 초기화 (항상 .tmux.conf 맨 아래에)
run '~/.tmux/plugins/tpm/tpm'

설치: Ctrl+bI (대문자)

tmux-resurrect: 세션 영구 보존

시스템 재시작 후에도 tmux 세션(윈도우, 패인 레이아웃, 실행 중이던 명령)을 복원한다.

# 세션 저장
Ctrl+b → Ctrl+s

# 세션 복원
Ctrl+b → Ctrl+r

tmux-continuum: 자동 저장/복원

tmux-resurrect를 자동화한다. 설정하면 15분마다 자동 저장되고, tmux 시작 시 자동 복원된다.

# .tmux.conf
set -g @continuum-restore 'on'
set -g @continuum-save-interval '15'  # 15분마다 자동 저장

tmux-yank: 시스템 클립보드 연동

tmux 복사 모드에서 선택한 텍스트를 OS 클립보드에 직접 복사한다.

set -g @plugin 'tmux-plugins/tmux-yank'

tmux-fzf: 퍼지 파인더 연동

fzf를 tmux와 통합하여 세션, 윈도우, 패인을 빠르게 검색하고 전환한다.

set -g @plugin 'sainnhe/tmux-fzf'
# 사용: Ctrl+b → F (대문자)

8. 추천 설정: .tmux.conf

실무에서 검증된 설정들을 모았다.

# ─── 기본 설정 ─────────────────────────────────

# 프리픽스를 Ctrl+a로 변경 (screen 스타일, 더 누르기 편함)
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# 256 컬러 지원
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"

# 마우스 지원 활성화
set -g mouse on

# 히스토리 버퍼 크기
set -g history-limit 50000

# 인덱스를 1부터 시작 (0은 키보드 왼쪽 끝에 있어 불편)
set -g base-index 1
setw -g pane-base-index 1

# 윈도우 번호 자동 재정렬
set -g renumber-windows on

# ESC 지연 제거 (Vim 사용자 필수)
set -sg escape-time 0

# 포커스 이벤트 전달 (Vim autoread 등에 필요)
set -g focus-events on

# ─── 키바인딩 ──────────────────────────────────

# 설정 리로드
bind r source-file ~/.tmux.conf \; display "Config reloaded!"

# 직관적인 화면 분할 (| 수평, - 수직)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %

# 새 윈도우를 현재 디렉토리에서 열기
bind c new-window -c "#{pane_current_path}"

# Vim 스타일 패인 이동
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# Alt+방향키로 패인 이동 (프리픽스 없이)
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# 패인 크기 조절 (대문자 HJKL)
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

# Vim 스타일 복사 모드
setw -g mode-keys vi
bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi y send -X copy-selection-and-cancel

# ─── 상태 바 ───────────────────────────────────

set -g status-position top
set -g status-interval 5

set -g status-style 'bg=#1e1e2e fg=#cdd6f4'
set -g status-left '#[bg=#89b4fa,fg=#1e1e2e,bold] #S #[default] '
set -g status-left-length 30
set -g status-right '#[fg=#a6adc8] %Y-%m-%d  %H:%M #[default]'

setw -g window-status-format ' #I:#W '
setw -g window-status-current-format '#[bg=#cba6f7,fg=#1e1e2e,bold] #I:#W #[default]'

# ─── 플러그인 ──────────────────────────────────

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'tmux-plugins/tmux-yank'

set -g @continuum-restore 'on'

run '~/.tmux/plugins/tpm/tpm'

9. 고급 활용: 스크립팅과 자동화

send-keys를 활용한 자동화

send-keys는 tmux 스크립팅의 핵심 명령이다. 패인에 키 입력을 프로그래밍 방식으로 전송한다.

#!/bin/bash
# dev-start.sh - 개발 환경 자동 실행 스크립트

SESSION="dev"

tmux has-session -t SESSION_NAME 2>/dev/null

if [ $? != 0 ]; then
  # 새 세션 생성 (첫 번째 윈도우: 에디터)
  tmux new-session -d -s SESSION_NAME -n editor
  tmux send-keys -t SESSION_NAME:editor 'cd ~/project && nvim .' Enter

  # 두 번째 윈도우: 서버
  tmux new-window -t SESSION_NAME -n server
  tmux send-keys -t SESSION_NAME:server 'cd ~/project && npm run dev' Enter

  # 세 번째 윈도우: 테스트
  tmux new-window -t SESSION_NAME -n test
  tmux send-keys -t SESSION_NAME:test 'cd ~/project && npm test -- --watch' Enter

  # 네 번째 윈도우: Docker
  tmux new-window -t SESSION_NAME -n docker
  tmux send-keys -t SESSION_NAME:docker 'docker-compose up' Enter

  # 에디터 윈도우로 포커스 이동
  tmux select-window -t SESSION_NAME:editor
fi

tmux attach -t SESSION_NAME

tmux + cron으로 정기 작업 관리

cron과 tmux를 결합하면 장시간 실행되는 정기 작업을 모니터링할 수 있다.

# crontab에 추가
0 2 * * * tmux new-session -d -s backup \; send-keys './backup.sh' Enter

조건부 명령 실행

# 세션이 없을 때만 생성
tmux has-session -t work 2>/dev/null || tmux new-session -d -s work

# 특정 윈도우가 없을 때만 생성
tmux list-windows -t work | grep -q 'logs' || \
  tmux new-window -t work -n logs 'tail -f /var/log/app.log'

10. 실전 팁 모음

패인을 새 윈도우로 분리/합치기

# 현재 패인을 독립 윈도우로 분리
Ctrl+b → !

# 다른 윈도우의 패인을 현재 윈도우로 가져오기
Ctrl+b → :join-pane -s 윈도우번호

명령어 출력 스크롤하기 (복사 모드)

# 복사 모드 진입
Ctrl+b → [

# 방향키 또는 PageUp/PageDown으로 스크롤
# vi 모드: j/k, Ctrl+d/Ctrl+u
# q로 종료

별도의 tmux 서버 사용

프로젝트별로 독립된 tmux 서버를 운영할 수 있다:

# 별도 소켓으로 서버 생성
tmux -L project-a new -s main
tmux -L project-b new -s main

# 특정 서버에 접속
tmux -L project-a attach

환경 변수 갱신

SSH 재접속 후 SSH_AUTH_SOCK 등의 환경 변수가 오래된 값을 가지는 문제를 해결한다:

# .tmux.conf
set -g update-environment "SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"

알림 설정

백그라운드 윈도우에서 작업이 완료되었을 때 알림을 받는다:

# .tmux.conf
setw -g monitor-activity on
set -g visual-activity on

마무리

tmux는 단순한 터미널 분할 도구가 아니다. 개발 환경 구축, 서버 관리, 원격 협업, 자동화까지 터미널 기반 작업의 거의 모든 영역을 커버한다.

핵심 활용 포인트를 정리하면:

활용 분야 핵심 기능
개발 환경 IDE 스타일 레이아웃, 프로젝트별 세션
서버 관리 모니터링 대시보드, synchronize-panes
원격 작업 세션 지속성, SSH 연결 복구
협업 세션 공유, 페어 프로그래밍
자동화 tmuxinator/tmuxp, 스크립팅
안정성 tmux-resurrect/continuum으로 세션 영구 보존

처음엔 기본적인 세션 생성과 화면 분할부터 시작하고, 점차 자동화와 플러그인으로 확장해 나가는 것을 추천한다. .tmux.conf 설정은 한 번에 완성하려 하지 말고, 실제 사용하면서 필요한 설정을 하나씩 추가해 가는 것이 가장 좋은 접근법이다.


참고 자료:


📌 함께 보면 좋은 글

반응형