서버에 SSH로 붙어서 뭔가 오래 걸리는 작업을 돌려본 적 있으신가요. 빌드를 걸어놓거나, 큰 파일을 옮기거나, AI 에이전트에게 긴 작업을 시켜놓고 기다리는 상황 말입니다.
그러다 노트북을 덮었습니다. 또는 와이파이가 잠깐 끊겼습니다. 또는 카페에서 나와 지하철을 탔습니다.
다시 접속하면 그 작업은 없습니다. 죽었습니다.
왜 죽나
SSH로 접속하면 서버에 내 전용 터미널이 하나 생깁니다. 그런데 이 터미널은 SSH 연결에 매달려 있습니다. 연결이 끊어지면 서버는 "이 사람 나갔구나" 하고 그 터미널을 정리합니다. 거기서 돌던 작업도 같이 정리됩니다.
당연한 동작입니다. 문제는 내가 나가고 싶어서 나간 게 아니라는 거죠.
tmux는 이 문제 하나를 푸는 도구입니다
비유하자면 이렇습니다.
지금까지는 내가 서버에 전화를 걸어 통화하면서 일을 시킨 셈입니다. 전화가 끊기면 일도 끊깁니다.
tmux를 쓰면 서버 안에 방을 하나 만들고 그 안에서 일을 시킵니다. 나는 그 방에 들어갔다 나왔다 할 뿐입니다. 내가 나가도 방은 그대로 있고, 안에서 돌던 일도 계속 돌아갑니다. 내일 다시 들어가면 어제 그 화면이 그대로 있습니다.
이름이 터미널 멀티플렉서라 어렵게 들리는데, 실제로 하는 일은 이겁니다. 작업을 내 연결에서 떼어내는 것.
명령어는 사실상 세 개면 됩니다
먼저 설치합니다. 이때 중요한 건 내 노트북이 아니라 작업이 돌아갈 서버에 설치한다는 점입니다. 많이 헷갈리는 부분입니다.
brew install tmux # 맥
sudo apt install tmux # 우분투, 데비안
1. 방 만들고 들어가기
tmux new -s main
main이라는 이름의 방을 만들고 들어갑니다. 이름은 아무거나 좋습니다. 이제 여기서 평소처럼 작업하면 됩니다.
2. 방에서 나오기
Ctrl + b 를 누르고 뗀 다음, d
두 키를 동시에 누르는 게 아니라 순서대로 누릅니다. Ctrl과 b를 같이 눌렀다 떼고, 그 다음 d입니다. 이걸 detach라고 합니다. 방에서 나왔을 뿐 안의 작업은 계속 돕니다.
사실 이것조차 안 해도 됩니다. 그냥 노트북을 덮어도, 와이파이가 끊겨도 결과는 같습니다. 그게 tmux를 쓰는 이유입니다.
3. 다시 들어가기
tmux attach -t main
나갔던 그 화면이 그대로 나옵니다. 30분 전에 걸어둔 빌드가 끝나 있고, 그 사이 출력된 로그도 전부 남아 있습니다.
방이 여러 개면 목록을 봅니다.
tmux ls
덤으로 따라오는 것: 화면 분할
tmux를 쓰다 보면 이 기능을 더 자주 쓰게 됩니다.
Ctrl + b 다음 % 세로로 쪼개기
Ctrl + b 다음 " 가로로 쪼개기
Ctrl + b 다음 방향키 나뉜 화면 사이 이동
Ctrl + b 다음 x 현재 칸 닫기
한쪽에서 서버를 띄우고 다른 쪽에서 로그를 보는 식으로 씁니다. 터미널 창을 여러 개 띄우는 것과 비슷해 보이지만, 이 분할 상태까지 통째로 저장됩니다. 다시 attach하면 나눠놓은 그대로 돌아옵니다.
맥에는 비슷한 게 이미 깔려 있습니다
screen이라는 프로그램이 macOS에 기본 내장돼 있습니다. tmux보다 오래됐고 하는 일은 비슷합니다.
screen -S main # 만들기
Ctrl + a 다음 d # 나오기
screen -r main # 다시 들어가기
급할 때 설치 없이 쓸 수 있다는 게 장점입니다. 다만 화면 분할이나 설정 면에서 tmux가 훨씬 낫기 때문에, 계속 쓸 거라면 tmux를 까는 편이 좋습니다.
언제 효과를 보나
- 오래 걸리는 작업 - 빌드, 대용량 rsync, 데이터 마이그레이션. 걸어놓고 노트북을 덮어도 됩니다
- 불안정한 회선 - 카페 와이파이, LTE 테더링. 끊겨도 다시 붙으면 그만입니다
- AI 에이전트 장시간 작업 - 요즘 가장 체감되는 용도입니다. 에이전트에게 긴 작업을 맡기고 자리를 뜰 수 있습니다
- 장소를 옮기며 이어서 작업 - 집에서 시작한 작업을 밖에서 그대로 이어받습니다
자주 하는 오해
내 노트북에 깔면 되나요 - 아닙니다. 작업이 실제로 돌아갈 쪽, 즉 원격 서버에 깔아야 합니다. 노트북에 깔아봐야 노트북이 꺼지면 같이 꺼집니다.
Ctrl+b가 불편한데요 - 다들 그렇게 생각합니다. 설정 파일에서 바꿀 수 있는데, 처음에는 기본값 그대로 쓰면서 손에 익히길 권합니다. 남의 서버에 붙었을 때도 똑같이 동작하니까요.
나갔는데 작업이 죽었어요 - 방 안에서 작업을 시작했는지 확인하세요. tmux에 들어가기 전에 실행한 명령은 보호받지 못합니다. 순서가 중요합니다.
정리
- SSH 터미널은 연결이 끊기면 그 안의 작업도 죽습니다
- tmux는 작업을 내 연결에서 떼어내 서버 쪽에 붙여놓습니다
tmux new -s 이름,Ctrl+b d,tmux attach -t 이름세 개면 시작할 수 있습니다- 원격 서버에 설치해야 합니다. 내 노트북이 아닙니다
- 화면 분할 상태까지 통째로 저장됩니다
다음 글에서는 이걸 실제로 써서, 집에 있는 맥에서 하던 작업을 밖에서 노트북으로 이어받는 구성을 다루겠습니다.