tmux는 터미널 멀티플렉서야
멀티플렉서는 입구 하나를 받아서 여러 갈래로 나눠주는 장치야. tmux는 터미널 연결 하나 (로컬 터미널이든 SSH 세션 하나든) 를 받아서 그 안에 오래 살아남는 window와 pane을 여러 개 만들어줘. 서버에 한 번만 로그인하면 그 안에서 셸 열 개가 돌고, 로그아웃해도 다 그대로 살아 있어.
쉬운 말로 정리한 킬러 기능들
- 세션이 안 죽어. 세션에서 빠져나오고, 터미널을 닫고, 이틀 동안 손을 놔도 돼. 돌고 있던 프로세스도, 열려 있던 파일도, 커서 위치까지도 그대로야. 사람들이 tmux 전도사가 되는 이유가 이거야.
- SSH가 끊겨도 작업은 안 죽어. 배포 도중에 와이파이가 나갔다고 해봐. tmux 없이 SSH만 붙어 있었다면 스크립트가 같이 죽어. 서버 쪽 tmux 세션 안에서 돌고 있었다면 스크립트는 계속 가고, 다시 연결해서 붙기만 하면 돼.
- 고급 터미널 없이도 pane을 나눠 써. tmux가 직접 나눠주니까 macOS Terminal이든, SSH로 들어간 Linux VPS든, 시리얼로 붙은 Raspberry Pi든 어디서나 똑같이 동작해.
- window를 여러 개 둘 수 있어. 브라우저 탭 같은 건데, 셸용이지.
- 배치를 스크립트로 짤 수 있어. 작업 공간을 한 번 정의해두고 ("에디터, 개발 서버, 로그 세 pane으로 열어") 셸 명령 하나로 띄우는 거야.
- 같이 짤 수 있어. 두 사람이 같은 머신에 SSH로 들어와 같은 tmux 세션에 붙으면 서로의 키 입력이 실시간으로 보여.
"지금 tmux를 배워라"가 맞는 답인 이유
요즘 터미널 (iTerm2, Wezterm, Ghostty, Kitty) 은 자기만의 split과 tab을 갖고 있어. 좋은 일이지. 문제는 그게 로컬에서만 먹힌다는 거야. 서버에 SSH로 들어가는 순간 그 기능들은 아무 도움이 안 돼. tmux는 리모트 머신 쪽에서 도니까, split도 영속성도 배치도 내가 어떤 터미널 앞에 앉아 있든 그대로 따라와.
계층
세 개념이 겹겹이 들어 있어. 단어만 먼저 익혀두고, 키는 다음 레슨에서 볼게.
- 세션 — 이름을 붙인 작업 공간. 보통 프로젝트마다 하나야. "work", "cwk-pippa", "vim-tmux-quest" 이런 식으로.
- Window — 세션 안의 브라우저 탭 같은 거. 세션 하나에 window가 여러 개 들어가.
- Pane — window를 나눈 칸. 셸 여러 개를 한 화면에 띄워줘.
tmux가 맡은 일은 하나야. 상태를 절대 잃지 않기. 에디터는 왔다 가지만 tmux는 그 아래 층에서 맥락을 붙들고 있어. "와이파이 죽었는데 아무것도 안 날아갔네" 하는 순간을 한 번만 겪어보면 tmux는 평생 간다.