에디블로그
Engineer's Field Notes

AI 자동화로 매일
한 편씩 쓰는
엔지니어 운영 노트

Claude Code · 자동화 파이프라인 · 사고 회고까지. 잘 굴러간 기록 + 깨진 흔적도 같이 남깁니다.

사람이 할 수 있는 일은,
AI도 할 수 있어야 합니다.
매일 한 편 쓰면서 검증 중.
— 이번 주 가장 많이 읽힌 글 TOP 3
개발자 도구/터미널 & 환경

[tmux] SSH가 끊겨도 작업이 안 죽는 이유

반응형
[tmux] SSH가 끊겨도 작업이 안 죽는 이유
개발자 도구 · 터미널 & 환경

[tmux] SSH가 끊겨도 작업이 안 죽는 이유

원격 서버에 SSH로 접속해 빌드를 돌리다 노트북 뚜껑을 닫으면 그 작업은 같이 죽습니다. tmux는 그 사이에 한 겹을 더 끼워 넣어, 터미널 연결이 끊겨도 안에서 돌던 프로그램은 계속 살아있게 만드는 도구예요. 이 글에서는 tmux가 정확히 무엇을 대체하는지, 세션·윈도우·페인이라는 세 단위를 어떻게 다루는지, 그리고 처음 설정할 때 알아두면 좋은 부분까지 정리합니다.

터미널이 끊겨도 프로그램은 서버 쪽에 남아 있습니다

tmux는 터미널 멀티플렉서(terminal multiplexer)로 분류됩니다. 멀티플렉서라는 이름이 붙은 이유는, 하나의 터미널 화면 안에서 여러 개의 셸을 나눠 쓰게 해주기 때문이에요. 그런데 tmux의 진짜 가치는 화면 분할보다 그 아래에 있는 구조에 있습니다.

tmux는 서버-클라이언트 모델로 동작합니다. 백그라운드에서 tmux 서버가 돌면서 모든 세션과 그 안의 프로그램을 관리하고, 터미널은 그 서버에 붙는 클라이언트일 뿐이에요. 그래서 터미널 창을 닫거나 SSH 연결이 끊어져도 서버 쪽 세션은 그대로 살아있습니다. 다시 접속해서 그 세션에 붙으면, 빌드 로그가 화면을 채우던 그 시점 그대로 이어집니다.

이 차이를 표로 보면 이렇습니다.

상황 일반 터미널 tmux 세션 안
SSH 연결이 끊김 실행 중이던 프로세스 종료 세션은 서버에 남아 계속 실행
화면을 여러 개로 터미널 탭/창을 여러 개 띄움 한 창 안에서 페인으로 분할
다른 기기에서 이어 작업 처음부터 다시 시작 같은 세션에 attach 해서 이어감
장시간 작업 모니터링 창을 계속 열어둬야 함 detach 해두고 필요할 때 attach

그래서 tmux는 흔히 screen 같은 도구나, 터미널 앱의 탭 기능을 대체하는 용도로 쓰입니다. 특히 원격 서버에서 오래 걸리는 작업을 돌리는 사람들이 많이 씁니다.

설치하고 첫 세션을 띄우기까지

설치는 패키지 매니저로 합니다. macOS는 Homebrew로 brew install tmux, 데비안·우분투 계열은 apt install tmux, 레드햇 계열은 dnf install tmux로 받을 수 있어요. 설치가 끝나면 이름을 붙여 세션 하나를 시작합니다.

# work 라는 이름으로 새 세션 시작
tmux new-session -s work

# 짧게 쓰면
tmux new -s work

이름(-s work)을 붙여두면 나중에 어떤 세션이었는지 알아보기 쉽습니다. 이름 없이 tmux만 쳐도 세션은 만들어지지만, 숫자로만 구분돼 여러 개일 때 헷갈립니다. 일단 세션 안에 들어오면 화면 아래쪽에 초록색 상태 표시줄이 보이는데, 여기가 tmux 안이라는 신호예요.

모든 명령은 prefix 키를 먼저 누릅니다

tmux의 단축키는 전부 prefix 키를 먼저 누른 뒤에 동작합니다. 기본 prefix는 Ctrl+b예요. 예를 들어 새 윈도우를 만드는 단축키는 "Ctrl+b 를 누르고 손을 뗀 다음 c 를 누르는" 식입니다. 이 글에서는 이를 C-b c처럼 표기합니다.

이 prefix 구조 덕분에 셸에서 쓰는 일반 단축키(Ctrl+c, Ctrl+r 같은 것)와 tmux 명령이 충돌하지 않습니다. tmux에게 명령을 내릴 때만 prefix를 한 번 거치는 거예요. 처음에는 손에 익지 않아 답답할 수 있는데, 핵심 단축키 대여섯 개만 외우면 대부분의 작업이 됩니다.

세션을 떼어놓고(detach) 다시 붙이기(attach)

tmux를 쓰는 가장 큰 이유가 바로 이 동작입니다. 작업을 그대로 둔 채 세션에서 빠져나오는 것을 detach라고 합니다.

detach — 작업을 남겨두고 나오기

C-b d를 누르면 세션에서 분리됩니다. 화면은 원래 셸로 돌아오지만, 방금까지 돌던 프로그램은 tmux 서버 안에서 계속 실행됩니다. 빌드든 학습 스크립트든 다운로드든, 노트북을 닫거나 SSH를 끊어도 그쪽에서 계속 진행돼요.

attach — 다시 그 세션으로 들어가기

나중에 다시 들어갈 때는 이름으로 붙습니다.

# 지금 살아있는 세션 목록 보기
tmux ls

# work 세션에 다시 붙기
tmux attach -t work

# 가장 최근 세션이면 그냥
tmux attach

tmux ls로 어떤 세션이 떠 있는지 확인하고, tmux attach -t 이름으로 원하는 세션에 들어갑니다. 같은 세션에 다른 기기에서도 붙을 수 있어서, 사무실 PC에서 띄운 세션을 집에서 이어받는 식의 작업도 됩니다.

윈도우 — 한 세션 안의 여러 작업 공간

세션 안은 다시 여러 윈도우로 나뉩니다. 윈도우는 터미널 앱의 탭과 비슷한 개념이에요. 하나는 코드 편집, 하나는 서버 실행, 하나는 git 작업 식으로 용도별로 나눠 두면 깔끔합니다. 윈도우 단축키는 다음과 같습니다.

단축키 동작
C-b c 새 윈도우 만들기
C-b n 다음 윈도우로
C-b p 이전 윈도우로
C-b 0 ~ C-b 9 번호로 바로 이동
C-b , 윈도우 이름 바꾸기
C-b & 현재 윈도우 닫기

윈도우마다 이름을 붙여두면(C-b ,) 상태 표시줄에서 어떤 윈도우인지 한눈에 보입니다. 윈도우가 늘어나면 번호 이동(C-b 뒤에 숫자)이 가장 빠릅니다.

페인 — 한 화면을 나눠 동시에 보기

윈도우 하나를 다시 여러 칸으로 쪼갠 것이 페인(pane)입니다. 왼쪽에 코드, 오른쪽에 실행 로그를 띄워 동시에 보는 식이에요. 페인은 같은 화면을 분할하므로, 서로 다른 작업을 곁눈질로 함께 보고 싶을 때 윈도우보다 편합니다.

단축키 동작
C-b % 좌우로 분할
C-b " 위아래로 분할
C-b + 방향키 페인 사이 이동
C-b z 현재 페인 전체 화면 토글(줌)
C-b x 현재 페인 닫기

여기서 자주 쓰게 되는 것이 줌(C-b z)입니다. 페인을 잘게 나눠 쓰다 보면 특정 화면을 잠깐 크게 봐야 할 때가 있는데, 줌을 누르면 그 페인만 윈도우 전체로 커지고 다시 누르면 원래 분할로 돌아옵니다. 분할 상태를 깨지 않고 잠깐 키웠다 줄이는 용도예요.

복사 모드와 설정 파일

복사 모드 — 마우스 없이 스크롤·복사

터미널 출력을 위로 스크롤하거나 텍스트를 선택해 복사하려면 복사 모드로 들어갑니다. C-b [를 누르면 복사 모드가 시작되고, 방향키나 페이지 키로 지나간 출력을 위로 올려 볼 수 있어요. 긴 로그를 거슬러 올라가 확인할 때 씁니다. 빠져나올 때는 q를 누릅니다.

~/.tmux.conf — 기본값 바꾸기

tmux는 홈 디렉터리의 ~/.tmux.conf 파일을 읽어 설정을 적용합니다. 가장 많이 손보는 두 가지는 prefix 키 변경과 마우스 지원입니다. 기본 prefix인 Ctrl+b는 누르기 불편하다는 의견이 많아 Ctrl+a로 바꾸는 경우가 흔합니다.

# ~/.tmux.conf

# prefix 를 Ctrl+a 로 변경
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# 마우스로 페인 선택·크기조절·스크롤 허용
set -g mouse on

설정 옵션은 set -g 옵션 값 형태로 적습니다(-g는 전역 적용). 주의할 점은, ~/.tmux.conf서버가 시작될 때만 읽힌다는 거예요. 이미 tmux가 떠 있는 상태에서 파일을 고쳤다면 다시 읽어줘야 반영됩니다.

# 셸에서
tmux source-file ~/.tmux.conf

# 또는 tmux 안에서 C-b : 를 누르고
:source-file ~/.tmux.conf

미리 알아두면 좋은 함정

  • prefix를 두 번 눌러야 셸로 전달됩니다. prefix를 C-a로 바꾸면 셸의 줄 맨 앞으로 가는 단축키와 겹칩니다. 위 설정의 bind C-a send-prefix가 그 보완책으로, C-a를 두 번 누르면 셸에 C-a가 전달됩니다.
  • detach와 종료는 다릅니다. C-b d(detach)는 세션을 살려두고 나오는 것이고, 세션 안의 셸을 exit로 닫으면 그 윈도우/세션은 사라집니다. 작업을 남기고 싶을 때는 반드시 detach를 써야 합니다.
  • 설정 파일은 새 세션이 아니라 서버 시작 때 읽힙니다. 새 세션을 열어도 바뀐 설정이 안 보이면 source-file로 다시 읽거나 서버를 재시작해야 합니다.
  • 중첩 tmux는 prefix가 충돌합니다. SSH로 들어간 원격 서버에서 또 tmux를 띄우면, 안쪽 tmux에 명령을 보낼 때 prefix를 두 번 눌러야 합니다.

누구에게 맞나

원격 서버에 SSH로 들어가 오래 걸리는 작업을 돌리는 사람이라면 효과가 가장 큽니다. 연결이 끊겨도 작업이 살아있고, 다시 붙어 이어갈 수 있다는 점만으로 충분히 쓸 이유가 됩니다. 로컬에서만 작업하더라도, 한 창 안에서 편집·실행·로그를 페인으로 나눠 보는 작업 환경을 고정해두고 싶다면 잘 맞아요.

시작은 단축키 다섯 개면 됩니다. 세션 만들기(tmux new -s 이름), detach(C-b d), attach(tmux attach -t 이름), 페인 분할(C-b %·C-b "), 윈도우 만들기(C-b c). 이 다섯 개로 며칠 써본 뒤 ~/.tmux.conf로 prefix와 마우스만 손보면, 나머지는 필요할 때 하나씩 익히면 됩니다.

시작 메모 설치는 brew install tmux(macOS) 또는 apt install tmux(우분투)로. 단축키가 안 먹으면 prefix(Ctrl+b)를 먼저 눌렀는지 확인하세요. 설정을 바꿨는데 반영이 안 되면 tmux source-file ~/.tmux.conf로 다시 읽으면 됩니다.
참고 자료
tmux 공식 위키 — Getting Started tmux 공식 위키 (전체) tmux GitHub 저장소

이 글은 직접 사용 후기가 아니라 공식 위키·문서를 바탕으로 한 객관 정리입니다. 단축키는 tmux 기본값 기준이며, 설정에 따라 달라질 수 있습니다.

반응형

📚 같이 보면 좋은

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 일정액의 수수료를 제공받습니다."