Skip to main content
낭고넷

tmux 입문: SSH가 끊겨도 작업이 유지되는 원격 개발 환경 세팅 (+ 내 설정/치트시트)

10분

tmux 소개

tmux는 터미널 멀티플렉서(terminal multiplexer)다. 쉽게 말해 “터미널 화면 분할 + 작업 세션 유지/복구 도구”라고 보면 된다.

보통 터미널을 쓰다 보면 창을 여러 개 띄우거나 탭을 왔다 갔다 하게 되는데, tmux를 쓰면 한 터미널 창 안에서 모든 걸 체계적으로 관리할 수 있다.

핵심 구조 3가지

내 기준으로 tmux의 구조는 이렇게 이해하니 편했다.

  • Session: 프로젝트/작업공간 단위 (“개발실 통째로”)
  • Window: 탭 단위 (“업무 종류별 칸막이”)
  • Pane: 화면 분할 단위 (“동시에 봐야 하는 창”)

가장 큰 장점: detach/attach

SSH 연결이 끊기거나 실수로 터미널 창을 닫아도, tmux Session 안에서 실행 중인 프로세스는 죽지 않고 서버에 계속 살아있다. 나중에 다시 접속(attach)하면 작업하던 화면 그대로 복구된다.


설치하기 (macOS)

맥을 사용 중이라면 Homebrew로 간단하게 설치할 수 있다.

brew install tmux

설치가 잘 됐는지 버전을 확인해보자.

tmux -V
# tmux 3.x... 과 같이 나오면 성공

왜 tmux를 써야 할까? (맥미니 + 맥북 원격 개발)

나는 집에 맥미니를 개발 머신(서버)으로 두고, 밖에서는 맥북으로 SSH 접속을 해서 개발하는 경우가 많다. 이때 tmux가 없으면 꽤 불편하다.

1) SSH가 끊겨도 개발 서버가 안 죽는다

npm run devdocker compose up 같은 명령어를 실행해 뒀는데, 카페 와이파이가 잠깐 끊겨서 SSH 접속이 종료되었다고 상상해 보자.

  • tmux가 없고, 위 명령어를 SSH 터미널의 포그라운드로 실행했다면: 보통 SSH가 끊기면서 프로세스도 같이 종료되는 경우가 많다.
  • tmux 세션 안에서 실행했다면: 네트워크가 끊겨도 맥미니 안에서는 서버가 계속 돌고 있다.

다시 접속해서 tmux attach만 하면, 로그가 올라가던 그 화면 그대로 다시 연결된다.

2) “작업공간”을 통째로 유지한다

프로젝트마다 필요한 터미널 세팅이 다르다.

  • A 프로젝트: 탭1(서버 로그), 탭2(DB 접속), 탭3(Git 명령어)
  • B 프로젝트: 탭1(모니터링), 탭2(스크립트 실행)

tmux를 쓰면 이 세팅을 매번 다시 할 필요가 없다. 퇴근할 때 그냥 접속만 끊고(detach), 다음 날 다시 붙기(attach)만 하면 어제 하던 작업 환경이 그대로 펼쳐진다.


5분 만에 시작하기 (실전 명령어)

복잡한 건 나중에 배우고, 일단 이것만 알면 써먹을 수 있다.

1) 세션 생성 및 접속

# 'my-project'라는 이름으로 새 세션 만들기
tmux new -s my-project

# 현재 실행 중인 세션 목록 보기
tmux ls

# 'my-project' 세션으로 다시 들어가기 (attach)
tmux attach -t my-project

꿀팁: 실전에서는 아래 명령어를 제일 많이 쓴다. “없으면 만들고, 있으면 들어가라”는 뜻이다.

tmux new -A -s my-project

2) Detach (안 죽이고 나가기)

tmux 안에서 작업을 하다가 터미널을 끄지 않고 “잠깐 빠져나오고” 싶다면? Prefix 키를 누른 다음 d를 누르면 된다.

  • tmux 기본 Prefix: Ctrl-b
  • 내 설정 Prefix: Ctrl-a (아래 설정 참고)

즉, 내 설정 기준으로는 Ctrl-a를 누르고 손을 뗀 뒤 d를 누르면 된다. (Ctrl-ad)


내 tmux 설정 (~/.tmux.conf)

tmux는 기본 설정(Ctrl-b)이 손에 잘 안 익는다. 개발자들이 많이 쓰는 편한 설정을 모아두었다. 홈 디렉터리에 .tmux.conf 파일을 만들고 아래 내용을 붙여넣자. (vim ~/.tmux.conf)

# 1. 마우스 사용 (pane 크기 조절, 스크롤 등)
set -g mouse on

# 2. 히스토리 제한 늘리기 (기본값은 너무 작음)
set -g history-limit 50000

# 3. 키 입력 반응 속도 높이기 (vim 사용 시 필수)
set -g escape-time 0
setw -g mode-keys vi

# 4. Prefix 키 변경 (Ctrl+b -> Ctrl+a)
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# 5. 직관적인 화면 분할 키 설정
unbind '"'
unbind %
bind - split-window -v  # -(빼기) 누르면 위아래로 나뉨
bind | split-window -h  # |(파이프) 누르면 좌우로 나뉨

# 6. 색상 설정 (256 color 지원)
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",xterm-256color:RGB"

설정 포인트 설명

  • set -g mouse on: 마우스로 화면 분할 경계선을 잡고 드래그하거나, 휠로 스크롤할 수 있다. 초보자에게 강력 추천.
  • prefix C-a: 기본 Ctrl-b는 손가락이 너무 멀다. Ctrl-a가 훨씬 누르기 편하다.
    • 참고: 셸에서 “문장 맨 앞으로 이동”하는 단축키도 Ctrl-a다. 이 기능이 필요할 땐 Ctrl-a두 번 연속 누르면 된다.
  • split-window: 기본 분할 키(", %)는 직관적이지 않다. 키보드 모양 그대로 |(좌우 분할), -(상하 분할)로 바꾸면 외울 필요가 없다.
  • escape-time 0: 이 설정을 안 하면 vim/nvim을 쓸 때 ESC 키 반응이 미묘하게 느려진다.
    만약 Alt/Option 조합이 꼬이거나 입력이 씹히면 10~20 정도로 올려보자.
  • tmux-256color: 일부 원격 서버에선 tmux-256color terminfo가 없어서 깨지는 경우가 있다. 그땐 우선 이 줄을 잠깐 주석 처리하고, 원인을 확인하는 편이 빠르다.

설정을 변경했다면 아래 방법 중 하나로 적용하자.

  • tmux 안에서: Ctrl-a :source-file ~/.tmux.conf → Enter
  • tmux 밖에서(세션이 떠있을 때): tmux source-file ~/.tmux.conf

Cheat Sheet (내 설정 기준: Prefix = Ctrl-a)

Ctrl-a를 먼저 누르고, 손을 뗀 다음 해당 키를 누르면 된다. 헷갈릴 땐 Ctrl-a ?를 누르면 전체 단축키 목록이 나온다.

Session (작업공간 관리)

동작 키/명령어 설명
나가기 (Detach) Ctrl-a d 세션을 끄지 않고 밖으로 나감
세션 목록 보기 tmux ls 현재 열려있는 세션 확인
새 세션 생성 tmux new -s <이름>
있으면 접속, 없으면 생성 tmux new -A -s <이름> 가장 자주 씀
세션 완전히 종료 tmux kill-session -t <이름>

Window (탭 관리)

동작 설명
새 윈도우(탭) 생성 Ctrl-a c create
윈도우 목록 보기 Ctrl-a w window list
다음/이전 윈도우 Ctrl-a n / Ctrl-a p next / previous
윈도우 이름 변경 Ctrl-a , 탭 이름 바꿀 때
윈도우 종료 Ctrl-a & 현재 탭 닫기

Pane (화면 분할)

동작 설명
좌/우 분할 `Ctrl-a ` (내 설정)
상/하 분할 Ctrl-a - (내 설정)
포커스 이동 Ctrl-a + 방향키 분할된 화면 간 이동
화면 확대/복귀 Ctrl-a z 현재 화면을 전체 화면으로 (zoom)
화면 닫기 Ctrl-a x 현재 분할 화면 닫기
분할 번호 보기 Ctrl-a q

Copy mode (스크롤 및 복사)

터미널 출력이 너무 길어서 위로 올려보고 싶을 때 사용한다.

동작 설명
모드 진입 (스크롤) Ctrl-a [ 방향키나 PageUp/Dn으로 스크롤 가능
검색 / vi처럼 /검색어 입력 후 엔터
선택 시작 Space 환경에 따라 v로 설정된 경우도 있음
복사 Enter 기본은 tmux 버퍼에 복사됨
붙여넣기 Ctrl-a ]
나가기 q 일반 모드로 복귀

참고: macOS 클립보드까지 바로 연동하려면 pbcopy 등을 활용한 별도 설정이 필요할 수 있다.


낭고넷

love to write and code