오늘도 공부
맥 개발자가 tmux를 꼭 알아야 하는 이유 본문
터미널 하나를 “작업 공간”으로 바꾸는 가장 실용적인 방법
맥으로 개발하다 보면 어느 순간 이런 장면이 반복됩니다.
한쪽에서는 서버를 띄우고, 다른 창에서는 로그를 보고, 또 다른 탭에서는 데이터베이스에 붙고, SSH로 원격 서버도 들어가야 합니다. 그런데 맥북을 덮거나 터미널 창을 잘못 닫는 순간 흐름이 끊깁니다.
이때 많은 개발자가 결국 정착하는 도구가 tmux입니다. tmux는 하나의 터미널 안에서 여러 프로그램을 실행하고, 작업을 분리했다가 다시 붙을 수 있게 해주는 터미널 멀티플렉서입니다. 공식 위키도 tmux를 “하나의 터미널 안에서 여러 프로그램을 다루고, 분리(detach) 후 다시 재연결(reattach)할 수 있게 해주는 도구”로 설명합니다. (GitHub)
이 글에서는 맥 기준으로 tmux가 정확히 무엇인지, 왜 쓰는지, 어떻게 설치하고, 어떤 식으로 실전에 적용하는지까지 브런치 스타일로 차근차근 정리해보겠습니다.
tmux는 정확히 무엇일까
tmux를 처음 접하면 “터미널 탭 관리 도구인가?” 정도로 생각하기 쉽습니다. 그런데 실제로는 그보다 훨씬 강력합니다.
핵심은 세 가지입니다.
첫째, 한 개의 터미널 창 안에서 여러 작업을 동시에 관리할 수 있습니다.
둘째, 세션을 분리(detach)해도 작업이 계속 살아 있습니다.
셋째, 나중에 같은 세션에 다시 접속해서 이어서 작업할 수 있습니다. (GitHub)
즉, tmux는 단순히 화면을 나누는 도구가 아니라, 터미널 기반 작업 상태를 보존하는 실행 환경에 가깝습니다.
예를 들어 이런 상황을 상상해보면 이해가 쉽습니다.
- 프론트엔드 개발 서버 실행
- 백엔드 API 서버 실행
- 로그 tail 확인
- PostgreSQL 접속
- 원격 서버 SSH 접속
- Git 작업
보통은 여러 탭을 열어두고 작업하겠지만, tmux에서는 이것을 세션 하나에 구조적으로 묶을 수 있습니다.
맥에서 tmux가 특히 유용한 이유
맥 사용자들은 iTerm2나 Terminal 앱의 탭 기능만으로도 어느 정도 작업이 가능합니다. 그런데 탭 기반 작업에는 몇 가지 한계가 있습니다.
가장 큰 문제는 작업의 지속성입니다.
터미널 탭은 눈에 보이는 UI 단위이지만, tmux 세션은 작업 상태 자체를 하나의 논리적 공간으로 유지합니다. 그래서 네트워크가 잠시 끊기거나, SSH 연결이 재구성되거나, 터미널 UI를 닫아도 세션에 다시 붙을 수 있습니다. 이것이 원격 서버 작업에서 특히 강력합니다. (GitHub)
또 맥에서는 로컬 개발과 원격 작업이 자주 섞입니다.
- 로컬에서 앱 실행
- 원격 서버에서 로그 확인
- Docker 컨테이너 관리
- 장시간 배치 작업 실행
이런 흐름에서는 “창을 많이 여는 것”보다 “작업 구조를 유지하는 것”이 더 중요합니다. tmux는 바로 그 부분을 해결합니다.
tmux를 맥에 설치하기
맥에서는 보통 Homebrew로 설치합니다. Homebrew 공식 formula 페이지에서도 tmux의 설치 명령은 brew install tmux로 안내됩니다. 현재 Homebrew formula에는 tmux가 “Terminal multiplexer”로 등록되어 있습니다. (Homebrew Formulae)
설치는 아래처럼 하면 됩니다.
brew install tmux
설치가 끝나면 버전을 확인합니다.
tmux -V
공식 Homebrew formula 기준으로 현재 stable 버전은 3.6a입니다. 다만 실제 설치 버전은 사용 시점의 formula 업데이트 상태에 따라 달라질 수 있습니다. (Homebrew Formulae)
tmux의 핵심 개념: 세션, 윈도우, 패널
tmux를 제대로 쓰려면 용어 세 개만 정확히 잡으면 됩니다.
1) Session
가장 큰 작업 단위입니다.
예를 들어 frontend, backend, infra, trading-bot 같은 식으로 프로젝트별 세션을 만들 수 있습니다.
2) Window
브라우저의 탭과 비슷한 개념입니다.
세션 안에 여러 윈도우를 둘 수 있습니다.
3) Pane
한 윈도우를 좌우/상하로 나눈 분할 화면입니다.
구조를 그림처럼 표현하면 이렇습니다.
Session: myproject
├── Window 1: editor
│ ├── Pane 1: nvim
│ └── Pane 2: npm run dev
├── Window 2: backend
│ ├── Pane 1: pnpm start
│ └── Pane 2: logs
└── Window 3: infra
├── Pane 1: ssh prod
└── Pane 2: htop
이 구조를 이해하면 tmux는 갑자기 어렵지 않습니다.
결국은 프로젝트 단위로 세션을 만들고, 작업 종류별로 윈도우를 나누고, 동시에 보고 싶은 것들을 패널로 분할하는 방식입니다.
가장 먼저 익혀야 할 기본 사용법
tmux를 실행하는 가장 단순한 방법은 다음과 같습니다.
tmux
하지만 실전에서는 보통 이름을 붙여 세션을 만듭니다.
tmux new -s work
예를 들어 API 프로젝트용 세션을 만들고 싶다면:
tmux new -s api
이제 이 세션 안에서 작업을 시작하면 됩니다.
현재 실행 중인 세션 목록 확인:
tmux ls
기존 세션에 다시 붙기:
tmux attach -t api
세션 종료:
tmux kill-session -t api
이 흐름이 tmux의 가장 기본 뼈대입니다.
prefix 개념부터 이해하자
tmux의 대부분 명령은 바로 입력하지 않고, 먼저 prefix 키를 누른 뒤 실행합니다.
기본 prefix는:
Ctrl + b
즉, Ctrl+b를 누르고 나서 다음 키를 입력하는 구조입니다.
예를 들어 새 윈도우를 만들고 싶으면:
Ctrl+b, 그 다음 c
처음에는 조금 낯설지만 금방 익숙해집니다.
가장 많이 쓰는 단축키
일단 아래만 기억해도 실무에 바로 들어갈 수 있습니다.
세션 관련
Ctrl+b d 현재 세션에서 detach
윈도우 관련
Ctrl+b c 새 윈도우 생성
Ctrl+b n 다음 윈도우
Ctrl+b p 이전 윈도우
Ctrl+b 0~9 번호로 윈도우 이동
Ctrl+b , 윈도우 이름 변경
Ctrl+b & 윈도우 종료
패널 관련
Ctrl+b % 좌우 분할
Ctrl+b " 상하 분할
Ctrl+b 방향키 패널 이동
Ctrl+b x 현재 패널 닫기
Ctrl+b z 현재 패널 확대/축소
Ctrl+b q 패널 번호 표시
Ctrl+b space 레이아웃 순환
스크롤 / 복사 모드
Ctrl+b [ 복사 모드 진입
q 복사 모드 종료
공식 위키의 Getting Started와 Recipes 문서도 이런 기본 조작과 함께 분할, 세션 재연결, 새 창/패널 생성 같은 흐름을 중심으로 설명합니다. (GitHub)
처음 쓰는 사람을 위한 실전 예제 1
프론트엔드 + 백엔드 + 로그 보기
가장 현실적인 예제를 하나 해보겠습니다.
1. 세션 생성
tmux new -s myapp
2. 첫 번째 윈도우에서 프론트엔드 실행
pnpm dev
3. 새 윈도우 생성
Ctrl+b c
여기서 백엔드 실행:
pnpm --filter api dev
4. 또 새 윈도우 생성
Ctrl+b c
로그 보기:
tail -f logs/app.log
5. 다시 이전 윈도우로 이동
Ctrl+b p
이렇게 되면 하나의 myapp 세션 안에 프론트, 백엔드, 로그가 각각 구조적으로 정리됩니다.
작업을 중간에 멈추고 싶지 않다면:
Ctrl+b d
이렇게 detach 하면 tmux 바깥으로 빠져나오지만, 내부 작업은 계속 살아 있습니다.
나중에 다시:
tmux attach -t myapp
하면 원래 상태 그대로 돌아옵니다. 이것이 tmux를 쓰는 가장 큰 이유입니다. (GitHub)
실전 예제 2
한 화면에서 서버와 로그를 같이 보기
이번에는 패널 분할을 써보겠습니다.
tmux new -s server
왼쪽 패널에서 서버 실행:
npm run start
이제 화면을 좌우로 나눕니다.
Ctrl+b %
오른쪽 패널에서 로그 확인:
tail -f /var/log/app.log
패널 이동은:
Ctrl+b + 방향키
이 구조는 특히 다음 상황에서 좋습니다.
- 한쪽에서 서버 실행
- 다른 쪽에서 curl 요청 테스트
- 또는 로그 모니터링
예:
왼쪽 패널
npm run start
오른쪽 패널
watch -n 1 "curl -I http://localhost:3000"
실전 예제 3
SSH 원격 서버 작업을 끊김 없이 이어가기
tmux가 진짜 빛나는 순간은 원격 서버 작업입니다.
예를 들어 맥에서 서버에 SSH 접속했다고 해보겠습니다.
ssh ubuntu@my-server
이제 원격 서버 안에서 tmux 세션을 시작합니다.
tmux new -s deploy
그 다음 배포 작업이나 로그 모니터링을 실행합니다.
git pull
pnpm install
pnpm build
pm2 restart app
혹은:
tail -f /var/log/nginx/access.log
이 상태에서 로컬 인터넷이 흔들리거나 맥북을 닫아도, 다시 SSH로 접속한 뒤 세션에 붙으면 됩니다.
ssh ubuntu@my-server
tmux attach -t deploy
이 흐름 때문에 서버 관리자는 tmux를 거의 필수 도구처럼 씁니다. 작업이 “터미널 창”이 아니라 “세션”에 귀속되기 때문입니다. (GitHub)
tmux를 더 편하게 만드는 설정 파일
tmux 설정은 보통 아래 파일에서 관리합니다.
~/.tmux.conf
여기에 자주 쓰는 옵션을 넣어두면 훨씬 편해집니다.
가장 먼저 추천할 만한 설정은 아래 정도입니다.
set -g mouse on
set -g history-limit 100000
unbind C-b
set -g prefix C-a
bind C-a send-prefix
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
이 설정이 의미하는 것은 다음과 같습니다.
- mouse on
마우스로 패널 선택, 스크롤, 리사이즈가 편해집니다. - history-limit 100000
스크롤백 버퍼를 크게 잡아 로그 보기 좋습니다. - prefix를 Ctrl+b에서 Ctrl+a로 변경
GNU Screen에 익숙한 사용자들이 많이 선호합니다. - 새 패널/윈도우를 현재 작업 디렉터리 기준으로 열기
이것이 실전에서 정말 중요합니다.
특히 마지막 세 줄은 공식 tmux Wiki Recipes에도 소개되는 패턴입니다. 새 패널과 새 윈도우가 현재 패널의 작업 경로를 이어받게 만들어 주기 때문에, 프로젝트 작업 흐름이 훨씬 자연스러워집니다. (GitHub)
설정 반영:
tmux source-file ~/.tmux.conf
맥 사용자에게 추천하는 .tmux.conf 예제
아래는 맥 개발자가 무난하게 시작하기 좋은 예제입니다.
# 마우스 사용
set -g mouse on
# 스크롤백 크게
set -g history-limit 100000
# prefix 변경
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# 인덱스를 1부터 시작
set -g base-index 1
setw -g pane-base-index 1
# 현재 디렉터리 유지하며 새 창/분할 생성
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -v -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
# 설정 리로드
bind r source-file ~/.tmux.conf \; display-message "tmux config reloaded"
# 더 직관적인 패널 이동
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
여기서 base-index 1은 윈도우 번호를 0이 아니라 1부터 시작하게 해서 직관성을 높입니다.
자주 하는 실수와 헷갈리는 부분
1) tmux를 종료하면 작업이 다 죽는다고 생각하는 경우
그렇지 않습니다. detach는 종료가 아니라 세션에서 빠져나오는 것입니다.
Ctrl+b d
이건 세션을 끄는 게 아니라 “잠시 나가는 것”입니다.
2) 패널을 닫고 싶은데 전체 세션이 종료되는 경우
현재 패널에서 실행 중인 쉘을 exit 하면 그 패널만 닫힙니다.
하지만 마지막 패널/마지막 윈도우까지 다 닫으면 세션이 종료될 수 있습니다.
3) 스크롤이 이상하게 느껴지는 경우
기본 터미널 스크롤과 tmux의 복사 모드가 다르게 동작해서 그렇습니다.
이럴 때는 마우스 활성화 설정이나 복사 모드 사용법을 익히면 해결됩니다.
tmux를 실제 개발 workflow에 녹이는 방법
제가 추천하는 방식은 프로젝트별 세션 고정 전략입니다.
예를 들면 이렇게 운영합니다.
frontend 세션
- Window 1: editor
- Window 2: dev server
- Window 3: test runner
backend 세션
- Window 1: editor
- Window 2: API server
- Window 3: worker
- Window 4: logs
infra 세션
- Window 1: ssh staging
- Window 2: ssh prod
- Window 3: docker / k8s commands
이렇게 나누면 머릿속도 정리됩니다.
터미널이 많아지는 것이 아니라, 작업 단위가 명확해집니다.
맥에서 터미널 앱과 함께 쓸 때의 팁
tmux는 Terminal.app에서도 잘 동작하고, iTerm2와 함께 써도 좋습니다.
다만 철학은 분명합니다.
- 터미널 앱: 바깥 컨테이너
- tmux: 실제 작업 공간
즉, 탭을 많이 열어 관리하기보다 iTerm2 탭 하나 안에 tmux 세션을 붙여서 사용하는 방식이 훨씬 안정적입니다.
실제로는 이런 형태가 많습니다.
- iTerm2 탭 1 → 로컬 개발용 tmux
- iTerm2 탭 2 → 원격 서버용 SSH 후 tmux
- iTerm2 탭 3 → 별도 실험용 세션
tmux와 함께 자주 언급되는 도구들
tmux 자체만으로도 충분하지만, 세션 자동 구성을 도와주는 도구들도 있습니다. Homebrew에는 tmuxinator, tmuxp, tmux-sessionizer, tmux-xpanes 같은 관련 도구가 등록되어 있습니다. 각각 복잡한 세션 구성을 템플릿화하거나 여러 패널을 빠르게 여는 데 쓰입니다. (Homebrew Formulae)
예를 들어 팀 프로젝트에서 늘 같은 구조가 필요하다면:
- 프론트엔드
- 백엔드
- 로그
- DB 셸
이 레이아웃을 매번 손으로 만들지 않고 자동으로 띄울 수 있습니다.
다만 처음에는 tmux 본체만 익히는 것을 추천합니다.
기본기가 잡히지 않은 상태에서 세션 매니저부터 쓰면 오히려 구조를 이해하기 어려워질 수 있습니다.
입문자가 바로 따라 할 수 있는 5분 실습
아래 실습만 해도 tmux 감이 옵니다.
1단계. 새 세션 생성
tmux new -s demo
2단계. 첫 번째 패널에서 명령 실행
python3 -m http.server 8000
3단계. 화면 분할
Ctrl+b %
4단계. 오른쪽 패널에서 테스트
curl http://localhost:8000
5단계. 새 윈도우 생성
Ctrl+b c
6단계. 새 윈도우에서 파일 목록 보기
ls -al
7단계. 세션 분리
Ctrl+b d
8단계. 다시 접속
tmux attach -t demo
이걸 한 번만 해보면 tmux가 “어려운 고급 툴”이 아니라, 단지 터미널 작업을 구조화하는 방식이라는 걸 바로 느끼게 됩니다.
결국 tmux는 누구에게 필요한가
tmux는 모든 사람에게 필수는 아닙니다.
하지만 아래 중 두세 개 이상 해당된다면 거의 확실하게 가치가 있습니다.
- 여러 서버/프로세스를 동시에 띄운다
- SSH 작업이 많다
- 긴 로그를 자주 본다
- 백엔드/인프라/배치 작업을 자주 한다
- 터미널 세션이 자주 끊겨 스트레스를 받는다
- 프로젝트별 작업 공간을 유지하고 싶다
특히 맥에서 개발하는 사람에게 tmux는 “화면 분할 도구”가 아니라, 작업 복원력과 집중력을 높여주는 운영 체계에 가깝습니다.
마무리
tmux를 처음 보면 낯설고, 단축키도 조금 투박해 보입니다.
그런데 며칠만 써보면 알게 됩니다.
문제는 터미널이 부족한 게 아니라,
작업 구조가 없었던 것이라는 사실을요.
맥에서 tmux를 익히면 얻는 가장 큰 이점은 화려한 기능이 아닙니다.
작업이 덜 끊기고, 덜 잃어버리고, 덜 헤매게 됩니다.
그리고 그 차이는 하루 작업량보다,
몇 달 뒤의 피로도에서 더 크게 드러납니다.
빠르게 보는 핵심 명령 모음
# 설치
brew install tmux
# 버전 확인
tmux -V
# 새 세션 생성
tmux new -s work
# 세션 목록
tmux ls
# 세션 재접속
tmux attach -t work
# 세션 종료
tmux kill-session -t work
# 설정 다시 불러오기
tmux source-file ~/.tmux.conf
치트시트

